為企業管理指派存取權限
若要授予使用者管理「IBM Cloud®」企業的權限,您必須先邀請該使用者加入企業帳戶,並為其指派企業帳戶管理服務的存取權限。
管理企業的存取權需要企業帳戶內的存取原則。 當您在企業的子帳戶內將「企業」帳戶管理服務原則指派給使用者時,使用者無法管理帳戶所屬的企業。 根據企業帳戶中「企業帳戶管理服務」所指派的角色,使用者可執行特定操作:
- 在企業中建立新帳戶
- 建立及命名帳戶群組
- 在帳戶群組之間移動帳戶
- 在刪除所有相關資源後取消帳戶
- 將現有帳戶匯入至企業
- 更新企業名稱或網域
- 檢視用於計算帳單的企業、特定帳戶群組、帳戶群組內的帳戶或特定帳戶的使用報告,並提供計劃層級的詳細資訊
- 建立企業管理的 IAM 範本
- 將企業管理的 IAM 範本指定給子帳戶
- 為子帳戶指定 IAM 範本
- 在子帳戶上設定支出通知,以通知企業成員
- 監控安全與合規性 IBM Cloud Security and Compliance Center Workload Protection
- 分享私人目錄
賦予使用者存取企業服務權限的政策,既可套用至整個企業,也可僅套用至特定帳戶群組或單一帳戶。
一般而言,企業帳戶本身不包含許多資源。 相反地,資源會建立在企業的子帳戶中。 它是在使用者可以受邀加入的其中每一個帳戶內,而且還會提供它存取權,以管理及使用資源。 使用者在企業帳戶中具有的存取權及成員資格,不適用於企業階層中的帳戶群組及子帳戶。 如以下圖表所示,使用者管理與存取管理仍各自獨立於各帳戶之中。
第一個圖表顯示如何將政策指派給企業帳戶中的使用者,以管理整個企業。 第二個圖表顯示範圍涵蓋帳戶群組的政策,該政策僅提供管理該帳戶群組及組織在其中的子帳戶的存取權。
在決定存取範圍時,原則的目標和角色很重要。 企業中的使用者、服務 ID 或存取群組可以完成企業管理任務:
- 橫跨整個企業。
- 在可能包含其他帳戶群組和帳戶的帳戶群組上。
- 在單一帳戶上。
舉例來說,如果使用者在企業帳戶管理服務上被指派了存取政策,而該存取政策的目標範圍是特定帳戶群組,那麼使用者就可以在帳戶群組內完成任務。 當目標設為特定帳戶群組或帳戶時,使用者無法完成影響整個企業的動作,例如更新企業名稱或網域。
您可以將適用的企業存取原則指派給子帳戶中的使用者,以僅管理該帳戶或其中包含的資源。 舉例來說,若您在企業帳戶管理服務中為子帳戶中的某位使用者指派一個角色,該使用者將無法在企業帳戶層級執行任何操作。 您必須將他們新增至企業帳戶,並指派該環境定義中的原則。
特定工作的必要原則
取決於需要完成的工作,非企業擁有者的使用者可能需要存取原則的組合。 下列範例提供一組存取原則,您必須將這些原則指派給企業中的使用者,才能完成特定作業。
如果您是不屬於企業的帳戶擁有者,但想要帳戶中的另一位使用者能夠將您帳戶轉換成企業,則可以將「計費」帳戶管理服務的「管理者」角色指派給該使用者。
在企業中檢視用量及管理計費
如需使用者能夠檢視企業中所有帳戶的用量報告、進行付款,以及檢視發票,您必須指派下列所有存取原則:
- 企業帳戶中「企業」帳戶管理服務的用量報告檢視者角色
- 企業帳戶中「計費」帳戶管理服務的「管理者」角色
將現有帳戶匯入至企業
若要讓使用者 將現有的 IBM Cloud 帳戶匯入企業環境,您必須指派以下所有存取政策:
- 要匯入之帳戶中「計費」帳戶管理服務的「管理者」角色
- 帳戶群組或企業帳戶的企業帳戶管理服務上的管理員或編輯角色
- 企業帳戶之「計費」帳戶管理服務的「管理者」角色
移動帳戶
為了讓使用者能夠在企業內移動帳戶,您必須指派下列存取原則:
- 企業帳戶中「計費」帳戶管理服務的「管理者」角色
然後,使用下列兩個選項之一:
- 整個企業之「企業」帳戶管理服務的「管理者」或「編輯者」角色
- 目前和目標帳戶群組的管理員或編輯角色
有關使用者針對各角色可執行的操作詳情,請參閱 《帳戶管理服務的操作與角色》。
管理安全性與合規性
若要讓使用者透過 IBM Cloud Security and Compliance Center Workload Protection [平台名稱] 管理安全性與合規性,您必須指派以下存取政策:
- 管理員或編輯角色 IBM Cloud Security and Compliance Center Workload Protection
- 企業的自訂角色
若要建立具有適當權限的自訂角色,請參閱 透過 IAM 控制存取。
建立和指派企業管理的 IAM 範本
若要建立由企業管理的 IAM 範本,您必須為「所有 IAM 帳戶管理服務」指派「範本管理員」角色。
若要將企業管理的 IAM 範本指派給子帳戶,您必須將「所有 IAM 帳戶管理服務」的「範本指派管理員」角色,以及在「企業服務」上至少具備「檢視者」角色的政策,指派給該帳戶。
預設情況下,任何使用者都沒有這些權限,包括帳戶擁有者。
有關使用者針對各角色可執行的操作詳情,請參閱 《帳戶管理服務的操作與角色》。
在主控台中指派存取權
若要將存取原則指派給企業帳戶中的現有使用者,請完成下列步驟:
您可以將原則的目標設為整個企業、特定帳戶群組(可以包含其內所有帳戶的存取權),或甚至是帳戶群組中的特定帳戶。
- 在 IBM Cloud 控制台中,按一下 「管理」 >「存取權限 (IAM)」,然後選取「使用者」。
- 在您要授予存取權限的用戶所在的列中,點選「動作」圖示
,然後點選 「授予存取權限」。
- 從服務中,選擇企業。
- 按下一步。
- 將存取範圍擴大到資源群組的特定子帳戶,或企業中的所有帳戶。 然後按下一步。
- 選取任何角色或權限組合,然後按一下檢閱。
- 按一下新增,將您的政策組態新增至政策摘要。
- (可選)重複步驟以新增其他存取。
- 按一下指派。
有關在企業帳戶中指定存取權限的角色和動作的詳細資訊,請參閱 指定帳戶管理服務的存取權限。
使用 CLI 指派存取權
若要為使用者建立新的存取原則,請執行 ibmcloud iam user-policy-create 指令。 在指令範例中,使用 JSON 檔案來指定原則詳細資料。 請檢閱使用 API 指派存取權一節,以取得
JSON 檔案中所包含內容的範例。
建立使用者原則:
ibmcloud iam user-policy-create name@example.com -f policy.json
如需相關資訊,請參閱 ibmcloud iam user-policy-create。
使用 API 指派存取權
以下請求範例為企業帳戶中,於 Enterprise 服務上具有「編輯者」角色的使用者指派一項政策,且該政策的作用範圍限定於某個帳戶群組。 此類型的原則為階層式,並適用於階層中的所有後代物件,這表示在指定目標帳戶群組內的所有帳戶群組或帳戶。
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Editor role for SERVICE_NAME's RESOURCE_NAME",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "IBMid-123453user"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam::::role:Editor"
}
],
"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:Viewer")
.build();
ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
.name("accountId")
.value(exampleAccountId)
.operator("stringEquals")
.build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
.name("serviceType")
.value("service")
.operator("stringEquals")
.build();
ResourceTag policyResourceTag = new ResourceTag.Builder()
.name("project")
.value("prototype")
.operator("stringEquals")
.build();
PolicyResource policyResources = new PolicyResource.Builder()
.addAttributes(accountIdResourceAttribute)
.addAttributes(serviceNameResourceAttribute)
.addTags(policyResourceTag)
.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:Viewer',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: exampleAccountId,
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceType',
value: 'service',
operator: 'stringEquals',
};
const policyResourceTag = {
name: 'project',
operator: 'stringEquals',
value: 'prototype',
};
const policyResources = [
{
attributes: [accountIdResourceAttribute, serviceNameResourceAttribute],
tags: [policyResourceTag],
},
];
const params = {
type: 'access',
subjects: policySubjects,
roles: policyRoles,
resources: policyResources,
};
iamPolicyManagementService.createPolicy(params)
.then(res => {
examplePolicyId = res.result.id;
console.log('createPolicy() result:\n' + 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:Viewer')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
name='serviceType', value='service')
policy_resource_tag = ResourceTag(
name='project', value='prototype')
policy_resources = PolicyResource(
attributes=[account_id_resource_attribute,
service_name_resource_attribute],
tags=[policy_resource_tag])
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: &exampleUserID,
}
policySubjects := &iampolicymanagementv1.PolicySubject{
Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Viewer"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("accountId"),
Value: core.StringPtr(exampleAccountID),
Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("serviceType"),
Value: core.StringPtr("service"),
Operator: core.StringPtr("stringEquals"),
}
policyResourceTag := &iampolicymanagementv1.ResourceTag{
Name: core.StringPtr("project"),
Value: core.StringPtr("prototype"),
Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
Attributes: []iampolicymanagementv1.ResourceAttribute{
*accountIDResourceAttribute, *serviceNameResourceAttribute},
Tags: []iampolicymanagementv1.ResourceTag{*policyResourceTag},
}
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))
如需更多資訊,請參閱「建立政策」。