授予用户对标记资源和服务标识的访问权
作为账户所有者,您可能希望委托他人负责标记资源和服务 ID。 要使用户将标记附加到资源或服务标识,您必须授予他们相应的访问权。 使用 IBM Cloud® Identity and Access Management (IAM) 访问策略来授予用户对资源组中资源的访问权。
标记是可见的帐户范围内的标记,可跨地理区域复制。 由于标记是不受监管的信息,因此请避免创建使用个人信息的标记,例如您的姓名,地址,电话号码,电子邮件地址或其他标识或专有信息。
标记许可权
帐户中的任何用户都可以查看标记。 标记资源时,对该资源具有 read
访问权的所有用户都可以查看该标记。 要在资源或服务标识上附加或拆离标记,需要特定访问角色或许可权,具体取决于资源类型和标记类型。 请参阅下表了解每种资源类型需要什么角色。
资源类型 | 角色 |
---|---|
支持 IAM | 要在资源上附加或拆离用户标记,编辑者或管理员 要在资源上附加或拆离访问权管理标记,管理员 要在具有附加的访问权管理标记的资源上查看分配的策略,查看者角色 |
经典基础架构上的裸机 | 查看硬件详细信息以及对一组特定服务或所有裸机服务器的访问权 |
经典基础架构上的专用主机 | 查看虚拟专用主机详细信息以及对一组特定服务或所有专用主机的访问权 |
经典基础架构上的虚拟服务器 | 查看虚拟服务器详细信息以及对一组特定服务或所有虚拟服务器的访问权 |
经典基础架构上的 Cloud Object Storage S3 | 存储管理许可权 |
经典基础架构上的 File Storage | 存储管理许可权 |
经典基础架构上的 Evault 备份 | 存储管理许可权 |
经典基础架构上的 Content Delivery Network | 管理 CDN 帐户许可权 |
经典基础架构上的 Direct Link | 帐户成员 |
Hardware Firewall | 管理防火墙 |
FortiGate Security Appliance | 管理防火墙 |
IBM Cloud Load Balancer | 管理负载均衡器 |
Gateway Appliance | 管理网关 |
服务标识 | 要在 IAM 身份服务上附加或拆离用户标记,编辑者或管理员 要附加或拆离访问权管理标记,请在 IAM 身份服务上附加或拆离管理员 |
允许用户访问启用了 IAM 的标记资源
完成以下步骤为用户分配“编辑者”角色,以标记支持 IAM 的资源:
- 从IBM Cloud控制台,单击管理 > 访问 (IAM),然后选择访问组。
- 单击创建。
- 输入组名和说明,然后单击创建。
- 通过单击 添加用户,从表中选择一个或多个用户,然后单击 添加到组,将用户添加到访问组。
- 单击访问>分配访问权限。
- 选择 所有启用身份和访问权的服务 或特定服务。
- 选择特定位置。
- 从平台访问角色列表中选择 编辑者,然后单击 复审。
- 单击 添加 以将策略配置添加到策略摘要。
- 单击分配。
使用 API 授予用户对支持 IAM 的标记资源的访问权
要为用户分配编辑者角色以标记启用 IAM 的资源,请调用 IAM 策略管理 API,如以下示例请求中所示。 将变量替换为目标服务和资源名称。
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:Editor")
.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();
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:Editor',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: exampleAccountId,
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceType',
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:Editor')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
name='serviceType', 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: &exampleUserID,
}
policySubjects := &iampolicymanagementv1.PolicySubject{
Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Editor"),
}
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"),
}
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))
允许用户访问标记的经典基础设施资源
经典基础架构的可标记资源包括虚拟客户、虚拟专用主机、网络应用交付控制器、网关成员、子网、VLAN 和 VLAN 防火墙(专用)。 完成以下步骤为用户分配“管理者”服务访问角色,以标记经典基础架构服务:
- 单击管理 > 访问权 (IAM),然后选择用户。
- 点击表格中的用户名。
- 单击经典基础架构。
- 在许可权选项卡中,展开设备类别。
- 选择查看硬件详细信息和查看虚拟服务器详细信息。 如果需要分配Cloud Object Storage S3、File Storage或 Evault 备份的访问权限,请分配存储管理权限。 如果需要分配对 Content Delivery Network的访问权,请分配 管理 CDN 帐户 许可权。
- 单击保存。
- 单击设备选项卡。
- 根据您希望用户能够标记的资源,选择 所有裸机服务器 或 所有虚拟服务器。
授予用户对标记服务标识的访问权
完成以下步骤,为用户分配 IAM Identity Service 上的管理员角色:
- 单击管理 > 访问权 (IAM),然后选择用户。
- 点击表格中的用户名。
- 选择 IAM Identity 服务,然后单击下一步。
- 选择 所有资源,然后单击 下一步。
- 选择管理员角色。
- 单击 复审 > 添加。
- 单击分配。
使用 API 授予用户对标记服务标识的访问权
要为用户分配 IAM Identity Service 上的管理员角色,请调用 IAM 策略管理 API,如以下示例请求中所示。 将值替换为目标用户的 IAM 标识和帐户标识。
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 the IAM Identity Service so that user can tag service IDs",
"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": "iam-identity"
}
]
}
]
}'
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("serviceType")
.value("iam-identity")
.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: 'serviceType',
value: 'iam-identity',
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='serviceType', value='iam-identity')
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: &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("serviceType"),
Value: core.StringPtr("iam-identity"),
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))