管理對資源的存取權
若要使用 IAM 政策管理使用者或服務 ID 的存取權限,您必須是帳戶擁有者或已指派正確的存取權限。 若要指派使用者存取資源,您必須是帳戶中所有服務的管理員,或是特定服務或服務實例的指派管理員。 若要為服務 ID 指定存取權,您必須是身分服務或特定服務 ID 的管理員。
指派資源的存取權
您可以使用兩種類型的原則來指派對資源的存取權:
- 存取帳戶中的資源,您可以選擇僅一種類型或全部類型
- 存取資源群組中的資源,包括只存取一項資源或所有資源的選項
如果您刪除或編輯目前正在使用的服務 ID 的現有政策,可能會導致服務中斷。
如果要啟用使用者的完整管理員存取權,以完成 帳戶管理任務,例如邀請和移除使用者、檢視帳單和使用情況、管理服務 ID、管理存取群組、管理使用者存取權,以及存取所有啟用 IAM 的資源,則必須為使用者指定下列存取權:
- 具有管理員和管理員角色的身分與存取啟用服務的政策。
- 所有帳戶管理服務上具有管理員角色的政策。
您也可以設定存取管理標籤來管理存取。 如需詳細資訊,請參閱 使用標籤控制資源存取。
具有帳戶管理服務管理員角色的使用者可以變更其他使用者的存取權限,並從資源中移除使用者,包括具有管理員角色的其他使用者。
在主控台中指定資源存取權
若要指派帳戶中個別資源的存取權,或帳戶中所有資源的存取權,請完成下列步驟:
- 在 IBM Cloud 主控台中,按一下 管理 > 存取 (IAM),然後選擇 使用者 或 管理 > 存取 (IAM),然後選擇 服務 ID,視您要指派存取的身分而定。
- 按一下 行動 圖示
> 指定存取權限,取得您要指派存取的使用者或服務 ID。
- 選取一組服務或單一服務。 然後按下一步。
- 範圍存取帳戶中的所有資源,或根據屬性選擇特定資源。
- 按下一步。
- 選擇要指派的任何角色組合,然後按一下檢閱。
- 按一下新增,將您的政策組態新增至政策摘要。
- (可選)新增使用者或服務 ID 到存取群組。
- 選擇希望使用者或服務 ID 屬於的存取群組。
- 按一下新增
- 按一下指派。
如果使用者在包含資源的資源群組中沒有角色,他們可以看到資源,但無法進入帳號中的資源清單頁面存取資源,開始使用這些資源。 在資源群組本身指定 Viewer 或更高的角色,以確保使用者可以存取資源。
服務 ID 的保單限額增加,適用於特定帳戶。 若要利用增加的保單限額,請指派存取 Event Streams 或 IBM Cloud Object Storage 服務。 您也必須將存取政策的範圍設定為特定的服務實體、資源類型和資源 ID。
在主控台的資源群組中指定存取權限
若要指派資源群組中所有資源的存取權,或只指派資源群組內一項服務的存取權,請完成下列步驟:
- 在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後根據您要指派存取的身分,選擇使用者或服務 ID。
- 按一下要指定存取權的使用者或服務 ID,然後按一下存取 > 指定存取權。
- 選取一組服務或單一服務。 然後按下一步。
- 特定資源的存取範圍。 選擇資源群組屬性類型,然後輸入資源群組。
- 按下一步。
- 選擇管理資源群組的存取角色。 然後按下一步。
- 選擇要指派的任何角色組合,然後按一下檢閱。
- 按一下新增,將您的政策組態新增至政策摘要。
- 按一下指派。
指定管理資源群組的存取權限
您可以指派檢視或管理資源群組的存取權,而無需指派服務存取權。
身為管理員,您可能想要在所有資源群組上建立具有檢視者角色的存取群組。 這樣,當您指派服務資源的存取權時,就不必為檢視資源群組建立額外的政策。 使用者必須擁有資源群組的 Viewer 角色,才能在該資源群組中建立服務實例。
若要為資源群組指派存取權而不指派服務存取權,請完成下列步驟:
- 在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後根據您要指派存取的身分,選擇使用者或服務 ID。
- 按一下要指定存取權的使用者或服務 ID,然後按一下存取 > 指定存取權。
- 僅選擇資源群組。
- 選取新增條件。
- 選擇資源群組屬性類型,然後輸入資源群組。
- 按下一步。
- 選擇檢視或管理資源群組的存取角色。 然後按一下「檢閱」。
- 按一下新增,將您的政策組態新增至政策摘要。
- 按一下指派。
您可以視需要針對帳戶中的每個可用資源群組重覆此類型的政策,以指派存取權來管理帳戶中的所有資源群組。
使用 CLI 分配資源存取權限
-
登入 IBM Cloud® CLI。 如果您有多個帳戶,則系統會提示您選取要使用的帳戶。 如果您未使用
-r旗標來指定地區,則必須同時選取地區。ibmcloud login如果您的認證遭到拒絕,您可能是使用聯合 ID。 若要使用聯合 ID 來登入,請使用
--sso旗標。 如需詳細資料,請參閱使用聯合 ID 進行登入。如果您是第一次使用 IBM Cloud CLI,請查看 入門教學。
-
使用下列指令建立存取政策並指定給使用者或服務 ID
ibmcloud iam user-policy-create.- 此範例以
Administrator角色為sample-service服務的所有實體,指派存取帳戶中個別資源的權限:
ibmcloud iam user-policy-create name@example.com --roles Administrator --service-name sample-service- 本範例以
Administrator角色指派對 All Account Management 服務的存取權:
ibmcloud iam service-policy-create name@example.com --roles Administrator --account-management- 本範例指派
Administrator角色存取所有已啟用的身分與存取服務:
ibmcloud iam service-policy-create name@example.com --roles Administrator --attributes serviceType=service- 本範例指派
Administrator角色存取所有 IAM 帳戶管理服務:
ibmcloud iam service-policy-create name@example.com --roles Administrator --attributes service_group_id=IAM服務 ID 的保單限額增加,適用於特定帳戶。 若要利用增加的保單限額,請指派存取 Event Streams 或 IBM Cloud Object Storage 服務。 您也必須將存取政策的範圍設定為特定的服務實體、資源類型和資源 ID。
- 本範例以 Object Storage
Manager角色。 它將存取的範圍界定為特定的服務實體、資源類型和資源 ID:
ibmcloud iam service-policy-create SERVICE_ID service-name cloud-object-storage --service-instance SERVICE_INSTANCE_GUID --resource-type RESOURCE_TYPE --resource RESOURCE --roles Manager - 此範例以
使用 CLI 在資源群組中指定存取權限
輸入 ibmcloud user-policy-create 命令,為資源群組中的所有資源或資源群組中的單一服務指定存取權。 此範例提供 name@example.com Operator 角色給 ID 為 dda27e49d2a1efca58083a01dfde18f6 的資源群組:
ibmcloud iam user-policy-create name@example.com --roles Operator --resource-type resource-group --resource dda27e49d2a1efca58083a01dfde18f6
輸入 ibmcloud iam service-policy-create 命令,為資源群組中的所有資源或資源群組中的單一服務指定存取權。 本範例為資源群組 sample-resource-group 提供服務
test Administrator 角色:
ibmcloud iam service-policy-create test --roles Administrator --resource-group-name sample-resource-group
使用 CLI 指定管理資源群組的存取權限
您可以指派檢視或管理資源群組的存取權,而無需指派服務存取權。
身為管理員,您可能想要在所有資源群組上建立具有檢視者角色的存取群組。 這樣,當您指派服務資源的存取權時,就不必為檢視資源群組建立額外的政策。 使用者必須擁有資源群組的 Viewer 角色,才能在該資源群組中建立服務實例。
以下範例為特定資源群組的 Viewer 建立一個政策:
iam user-policy-create name@example.com --roles Viewer --resource-type resource-group --resource fec6c95e6a0a44c5bcca138bfe5a1f9e
以下範例為帳戶中的所有資源群組建立 Viewer 的政策。
iam user-policy-create name@example.com --roles Viewer --resource-type resource-group
以下範例針對資源群組中的所有資源建立 Viewer 政策
iam user-policy-create name@example.com --roles Viewer --resource-group-name satellite-test
使用 API 指定資源存取權限
您可以透過呼叫 IBM Cloud® Identity and Access Management(IAM)Policy Management API,將存取權指派給帳戶中的個別資源,或指派給帳戶中的資源清單,如以下範例請求所示。 範例請求提供 Administrator 服務實體的角色存取權:
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Administrator role for SERVICE_NAME's RESOURCE_NAME",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "IBMid-123453user"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam::::role:Administrator"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "$SERVICE_NAME"
},
{
"name": "resource",
"value": "$RESOURCE_NAME",
"operator": "stringEquals"
}
]
}
]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
.name("iam_id")
.value("EXAMPLE_USER_ID")
.build();
PolicySubject policySubjects = new PolicySubject.Builder()
.addAttributes(subjectAttribute)
.build();
PolicyRole policyRoles = new PolicyRole.Builder()
.roleId("crn:v1:bluemix:public:iam::::role:Administrator")
.build();
ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
.name("accountId")
.value(exampleAccountId)
.operator("stringEquals")
.build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
.name("serviceName")
.value("service")
.operator("stringEquals")
.build();
PolicyResource policyResources = new PolicyResource.Builder()
.addAttributes(accountIdResourceAttribute)
.addAttributes(serviceNameResourceAttribute)
.build();
CreatePolicyOptions options = new CreatePolicyOptions.Builder()
.type("access")
.subjects(Arrays.asList(policySubjects))
.roles(Arrays.asList(policyRoles))
.resources(Arrays.asList(policyResources))
.build();
Response<Policy> response = service.createPolicy(options).execute();
Policy policy = response.getResult();
System.out.println(policy);
const policySubjects = [
{
attributes: [
{
name: 'iam_id',
value: 'exampleUserId',
},
],
},
];
const policyRoles = [
{
role_id: 'crn:v1:bluemix:public:iam::::role:Administrator',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: exampleAccountId,
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceName',
value: 'service',
operator: 'stringEquals',
};
const policyResources = [
{
attributes: [accountIdResourceAttribute, serviceNameResourceAttribute]
},
];
const params = {
type: 'access',
subjects: policySubjects,
roles: policyRoles,
resources: policyResources,
};
iamPolicyManagementService.createPolicy(params)
.then(res => {
examplePolicyId = res.result.id;
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err)
});
policy_subjects = PolicySubject(
attributes=[SubjectAttribute(name='iam_id', value='example_user_id')])
policy_roles = PolicyRole(
role_id='crn:v1:bluemix:public:iam::::role:Administrator')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
name='serviceName', value='service')
policy_resources = PolicyResource(
attributes=[account_id_resource_attribute,
service_name_resource_attribute])
policy = iam_policy_management_service.create_policy(
type='access',
subjects=[policy_subjects],
roles=[policy_roles],
resources=[policy_resources]
).get_result()
print(json.dumps(policy, indent=2))
subjectAttribute := &iampolicymanagementv1.SubjectAttribute{
Name: core.StringPtr("iam_id"),
Value: core.StringPtr("exampleUserID"),
}
policySubjects := &iampolicymanagementv1.PolicySubject{
Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Administrator"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("accountId"),
Value: core.StringPtr(exampleAccountID),
Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("serviceName"),
Value: core.StringPtr("service"),
Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
Attributes: []iampolicymanagementv1.ResourceAttribute{
*accountIDResourceAttribute, *serviceNameResourceAttribute}
}
options := iamPolicyManagementService.NewCreatePolicyOptions(
"access",
[]iampolicymanagementv1.PolicySubject{*policySubjects},
[]iampolicymanagementv1.PolicyRole{*policyRoles},
[]iampolicymanagementv1.PolicyResource{*policyResources},
)
policy, response, err := iamPolicyManagementService.CreatePolicy(options)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(policy, "", " ")
fmt.Println(string(b))
您可以指派一組服務的存取權。 若要指派存取已啟用的 All Identity and Access 服務,請指定 serviceType 為 name 屬性,並使用 value service。 若要指定所有帳戶管理服務的存取權,請指定 serviceType 為 name 屬性,並使用 value platform_service。 若要指定帳戶管理服務子集的存取權所有 IAM 帳戶管理服務,請指定 service_group_id 為 name 屬性,並使用 value IAM。
服務 ID 的保單限額增加,適用於特定帳戶。 若要利用增加的保單限額,請指派存取 Event Streams 或 IBM Cloud Object Storage 服務。 您也必須將存取政策的範圍設定為特定的服務實體、資源類型和資源 ID。
以下示例請求賦予服務 ID Reader 角色對 Object Storage 的實例的存取權。 它將存取的範圍界定為特定的服務實體、資源類型和資源 ID:
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Reader role for SERVICE_NAME's RESOURCE_NAME",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "$SERVICE_ID"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam::::serviceRole:Reader"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "cloud-object-storage"
},,
{
"name": "serviceInstance",
"value": "$INSTANCE_ID",
"operator": "stringEquals"
}
{
"name": "resourceType",
"value": "$RESOURCE_TYPE",
"operator": "stringEquals"
},
{
"name": "resource",
"value": "$RESOURCE_NAME",
"operator": "stringEquals"
}
]
}
]
}'
使用 API 在資源群組中指定存取權限
此動作只能透過 UI 或 CLI 執行。 若要查看步驟,請切換至 UI 或 CLI 指示。
開始之前
在使用 Terraform 為資源指派存取權之前,請確認已完成下列事項:
- 安裝 Terraform CLI 並為 Terraform 配置 IBM Cloud Provider 外掛程式。 如需詳細資訊,請參閱 IBM Cloud® 上的 Terraform 入門 教學。 外掛程式抽象出 IBM Cloud API,用來完成這項任務。
- 建立名為
main.tf的 Terraform 配置檔案。 在此檔案中,您使用 HashiCorp Configuration Language 定義資源。 如需詳細資訊,請參閱 Terraform 文件。
使用 Terraform 分配資源存取權限
要使用 Terraform 分配資源存取權限,請使用下列步驟:
-
在
main.tf檔案中使用ibm_iam_user_policy資源參數指定資源存取權。下面的示例使用 ibm_iam_user_policy 為
kms服務的所有實例提供test@in.ibm.comViewer角色。resource "ibm_iam_user_policy" "policy" { ibm_id = "test@in.ibm.com" roles = ["Viewer"] resources { service = "kms" } }服務 ID 的保單限額增加,適用於特定帳戶。 若要利用增加的保單限額,請指派存取 Event Streams 或 IBM Cloud Object Storage 服務。 您也必須將存取政策的範圍設定為特定的服務實體、資源類型和資源 ID。
下面的示例通过使用 ibm _iam_user_policy,使
Reader角色的服务 ID 可以访问 Object Storage 的实例。 它將存取的範圍界定為特定的服務實體、資源類型和資源 ID:resource "ibm_iam_service_policy" "policy" { iam_service_id = "$SERVICE_ID" roles = ["Reader"] resources { service = "cloud_object_storage" resource_instance_id = "$SERVICE_INSTANCE_ID" resource_type = "$RESOURCE_TYPE" resource = "$RESOURCE" } }您可以在
service選項中指定要為其指定存取權限的服務名稱。 如需詳細資訊,請參閱 Terraform Identity and Access Management(IAM) 頁面的參數參考細節。使用 IAM 存取群組模組控制資源存取,以取得政策式權限。 瞭解 Terraform IBM 模組 的存取策略。
-
完成建立組態檔案後,初始化 Terraform CLI。 如需詳細資訊,請參閱 初始化工作目錄。
terraform init -
從
main.tf檔案提供資源。 如需詳細資訊,請參閱 使用 Terraform 佈建基礎結構。-
執行
terraform plan以產生 Terraform 執行計畫,預覽建議的動作。terraform plan -
執行
terraform apply以建立計劃中定義的資源。terraform apply
-
使用 Terraform 在資源群組中指定存取權限
若要使用 Terraform 在資源群組中指定存取權限,請使用下列步驟。
-
透過
main.tf檔案中的ibm_iam_user_policy資源,在資源群組中指定存取權限。下面的示例使用 ibm_iam_user_policy 為 ID 為
data.ibm_resource_group.group.id的資源群組提供test@in.ibm.comViewer角色。data "ibm_resource_group" "group" { name = "default" } resource "ibm_iam_user_policy" "policy" { ibm_id = "test@in.ibm.com" roles = ["Viewer"] resources { service = "containers-kubernetes" resource_group_id = data.ibm_resource_group.group.id } }您可以在
resource_group_id選項上指定要指派存取權限的資源群組 ID。 如需詳細資訊,請參閱 Terraform Identity and Access Management(IAM) 頁面的參數參考細節。使用 IAM 存取群組模組 對資源群組進行範圍存取,以實現細緻控制。 檢閱 Terraform IBM 模組 的資源群組政策。
-
完成建立組態檔案後,初始化 Terraform CLI。 如需詳細資訊,請參閱 初始化工作目錄。
terraform init -
從
main.tf檔案提供資源。 如需詳細資訊,請參閱 使用 Terraform 佈建基礎結構。-
執行
terraform plan以產生 Terraform 執行計畫,預覽建議的動作。terraform plan -
執行
terraform apply以建立計劃中定義的資源。terraform apply
-
移除主控台中的存取
移除使用者或服務 ID 的存取權可能需要 10 分鐘才能生效。
- 在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後根據您要管理的身分,選擇使用者或服務 ID。
- 選取您要移除存取權的使用者名稱或服務 ID。
- 從存取索引標籤,按一下要移除的原則資料列上的動作圖示
> 移除。
- 檢視您要移除的政策詳細資訊,然後按一下移除來確認。
您也可以從存取群組中移除使用者和服務 ID,方法是選擇要移除的使用者或服務 ID 的核取方塊,然後按一下移除。 然後再按一下移除,以核准程序。
使用 CLI 移除存取
若要使用 CLI 來移除使用者原則,您可以使用 ibmcloud iam user-policy-delete 指令。
ibmcloud iam user-policy-delete USER_ID POLICY_ID [-f, --force]
若要使用 CLI 移除服務 ID 政策,您可以使用 ibmcloud iam service-policy-delete 指令。
ibmcloud iam service-policy-delete SERVICE_ID POLICY_ID [-f, --force]
使用 API 移除存取權
透過提供政策 ID 並呼叫 IBM Cloud® Identity and Access Management(IAM)Policy Management API 來刪除政策,如以下範例請求所示:
curl -X DELETE 'https://iam.cloud.ibm.com/v1/policies/$POLICY_ID' \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json'
DeletePolicyOptions options = new DeletePolicyOptions.Builder()
.policyId(examplePolicyId)
.build();
service.deletePolicy(options).execute();
const params = {
policyId: examplePolicyId,
};
iamPolicyManagementService.deletePolicy(params)
.then(res => {
console.log(JSON.stringify(res, null, 2));
})
.catch(err => {
console.warn(err)
});
response = iam_policy_management_service.delete_policy(
policy_id=example_policy_id
).get_result()
print(json.dumps(response, indent=2))
options := iamPolicyManagementService.NewDeletePolicyOptions(
examplePolicyID,
)
response, err := iamPolicyManagementService.DeletePolicy(options)
if err != nil {
panic(err)
}
如果主題 ID 包含鎖定的服務 ID,則無法刪除政策。
在主控台中檢查已分配的存取權限
如果您需要檢閱您在所加入之帳戶中獲指派的存取權,請完成下列步驟:
- 在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後根據您要檢視的身分,選擇使用者或服務 ID。
- 選擇您的姓名或服務 ID。
- 檢視「存取」標籤中指定的存取權限。
如果您需要其他專用權,則必須與帳戶擁有者聯絡來更新存取權,或是與服務或服務實例的管理者聯絡來更新存取原則。
使用 CLI 檢查指定的存取
如果您需要檢視已加入帳號中的指定存取權限,可以使用 ibmcloud iam user-policies 指令。 本範例列出使用者 name@example.com 的政策:
ibmcloud iam user-policies name@example.com
使用 API 檢查已分配的存取權限
透過使用 API,您只能擷取帳戶中的所有政策,並依據屬性值進行篩選。 您可以前往 IBM Cloud 主控台中的 管理 > 使用者 > 您的名稱 > 存取,檢查帳戶中分配的存取權限。 若要擷取政策,請呼叫 IBM Cloud® Identity and Access Management(IAM)政策管理 API,如以下範例請求所示:
curl -X GET 'https://iam.cloud.ibm.com/v1/policies?account_id=$ACCOUNT_ID' \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json'
ListPoliciesOptions options = new ListPoliciesOptions.Builder()
.accountId(exampleAccountId)
.iamId(EXAMPLE_USER_ID)
.build();
Response<PolicyList> response = service.listPolicies(options).execute();
PolicyList policyList = response.getResult();
System.out.println(policyList);
const params = {
accountId: exampleAccountId,
iamId: exampleUserId
};
iamPolicyManagementService.listPolicies(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err)
});
policy_list = iam_policy_management_service.list_policies(
account_id=example_account_id, iam_id=example_user_id
).get_result()
print(json.dumps(policy_list, indent=2))
options := iamPolicyManagementService.NewListPoliciesOptions(
exampleAccountID,
)
options.SetIamID(exampleUserID)
policyList, response, err := iamPolicyManagementService.ListPolicies(options)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(policyList, "", " ")
fmt.Println(string(b))