管理 VPC 基础架构服务的 IAM 访问权
您账户中用户对 IBM Cloud® Virtual Private Cloud 服务实例的访问由 Cloud Identity and Access Management (IAM) 控制。 访问 VPC Infrastructure Services
服务的每个用户都必须分配一个具有 IAM 角色的访问策略。 查看以下角色,操作和更多信息,以帮助确定分配对 VPC Infrastructure Services
的访问权的最佳方法。
您在帐户中为用户分配的访问策略确定用户可以在所选服务或特定实例的上下文中执行哪些操作。 允许的操作由 VPC Infrastructure Services
定制并定义为允许您对服务执行的操作。 每个操作都映射到您可以分配给用户的 IAM 平台或服务角色。
如果特定角色及其操作不符合您要处理的用例,那么可以 创建定制角色 并选取要包含的操作。
IAM 访问策略支持在不同级别授予访问权。 以下是包含的一些选项:
- 对帐户中所有服务实例的访问权
- 对帐户中单个服务实例的访问权
- 对实例中特定资源 (例如
vpcId
或instanceId
) 的访问权。
下表列出了 VPC 资源属性。 有关更多信息,请参阅 VPC 资源属性。
资源 | 资源属性 |
---|---|
针对 VPC 的自动缩放 | instanceGroupId:<instance-group-id> |
备份服务 | backupPolicyId: <backup-policy-id> |
Block Storage for VPC | volumeId: <volume-id> |
Bare metal server | bareMetalServerId: <bare-metal-server-id> |
VPC 群集网络 | clusterNetworkId: <cluster-network-id> |
Dedicated Host for VPC | dedicatedHostId:<dedicated-host-id> |
File Storage | shareId: <share-id> |
Floating IP for VPC | floatingIpId: <fip-id> |
Flow Logs for VPC | flowLogCollectorId: <flc-id> |
VPC 的映像服务 | imageId:<image-id> |
VPC 的负载均衡器 | loadBalancerId: <load-balancer-id> |
Network ACL | networkAclId: <nacl-id> |
VPC 的放置组 | placementGroupId: <placement-group-id> |
VPC 专用路径服务 | privatePathServiceGatewayId: <private-path-service-gateway-id> |
VPC 的公共地址范围 | publicAddressRangeId: <public-address-range-id> |
Public Gateway for VPC | publicGatewayId: <pgw-id> |
VPC 的预留 | reservationId: <reservation-id> |
Security Group for VPC | securityGroupId: <default-sec-grp-id> |
快照 | snapshotId: <snapshot-id> |
SSH Key for VPC | keyId:<key-id> |
Subnet | subnetId: <subnet-id> |
虚拟网络接口 | virtualNetworkInterfaceId:<virtual-network-interface-id> |
Virtual Private Endpoint for VPC | endpointGatewayId:<endpoint-gateway-id> |
虚拟私有云 | vpcId: <vpc-id> |
Virtual Server for VPC | instanceId: <instance-id> |
VPN for VPC | vpnGatewayID: <vpn-gateway-id> |
查看以下各表,其中概述了在使用 VPC Infrastructure Services
服务时每个角色所允许的任务类型。 平台管理角色支持用户对平台级别的服务资源执行任务。 例如,为服务分配用户访问权限、创建或删除实例,以及将实例绑定到应用程序。 服务访问角色使用户能够访问 VPC Infrastructure Services
并能够调用 VPC Infrastructure Services
API。
平台角色 | 操作描述 |
---|---|
查看者 | 您可以查看服务实例,但不能修改它们。 |
运算符 | 您可以执行配置和操作服务实例所需的平台操作,例如查看服务仪表板。 |
编辑者 | 除管理账户和分配访问策略外,您可以执行所有平台操作。 |
管理员 | 您可以根据为该角色分配的资源执行所有平台操作,包括为其他用户分配访问策略。 |
服务角色 | 操作描述 |
---|---|
读者 | 您可以在服务中执行只读操作,例如查看特定于服务的资源。 |
写入者 | 您拥有读者角色以外的权限,包括创建和编辑特定服务资源。 |
管理者 | 您拥有超出写入者角色的权限,允许您完成服务定义的特权操作。 此外,您还可以创建和编辑服务特定资源。 |
VPNClient | 如果需要分配对配置了用户标识和验证码认证的 VPN 客户端的访问权,那么仅需要选择此角色。 如果需要配置用户标识和验证码认证,请参阅 配置用户标识和验证码。 |
裸机高级网络操作员 | 您有权修改裸机接口上的 IP 电子欺骗和基础架构 NAT。 |
裸机控制台管理员 | 您可以访问裸机服务器控制台。 |
IP 电子欺骗操作员 | 您可以在虚拟服务器实例上启用或禁用 IP 电子欺骗检查。 仅在必要时授予此角色。 |
控制台管理员 | 您可以访问虚拟服务器实例控制台。 此角色仅提供控制台访问权,并且必须与对虚拟服务器具有操作员访问权的其他角色 (例如,操作员,编辑者或管理员) 组合。 |
有关映射到每个角色的确切操作的更多信息,请参阅 IAM 角色和操作页面上的 Infrastructure Services
。
以下链接可将您直接转至 IAM 角色和操作页面上的特定基础架构服务。
网络 IAM 作用和行动
计算 IAM 角色和操作
存储 IAM 角色和操作
- Block Storage for VPC
- Block Storage Snapshots for VPC
- Block Storage VPC 的多卷快照
- 备份即服务(Backup as a Service for VPC)
- File Storage for VPC
某些 VPC 任务需要多个 IAM 操作的授权。 例如,创建虚拟服务器实例不仅需要 is.instance.instance.create
,还需要 is.vpc.vpc.operate
,is.subnet.subnet.operate
,is.security-group.security-group.operate
和 is.volume.volume.create
。
可能需要其他条件操作。 例如,如果在专用主机上供应实例,那么需要 is.dedicated-host.dedicated-host-group.operate
和 is.dedicated-host.dedicated-host.operate
。 Virtual Private Cloud API 参考包含每个 API 调用的“授权”部分,例如 创建实例。
在控制台中分配对 VPC 基础架构服务的访问权
您可以通过两种常见方法在控制台中分配访问权:
- 每个用户的访问策略。 您可以从控制台中的“管理 > 访问权 (IAM) > 用户”页面管理每个用户的访问策略。 有关分配 IAM 访问权的步骤的更多信息,请参阅 管理对资源的访问权。
- 访问组。 访问组用于简化访问管理,方法是一次性分配对组的访问权,然后您可以根据需要在组中添加或除去用户以控制其访问权。 您可以从控制台中的“管理 > 访问权 (IAM) > 访问组”页面管理访问组及其访问权。 有关更多信息,请参阅 在控制台中分配对组的访问权。
在 CLI 中分配对 VPC 基础架构服务的访问权
有关分配,除去和复审访问权的逐步指示信息,请参阅 使用 CLI 分配访问 ro 资源。
以下示例显示了用于为 VPC Infrastructure Services
分配 Viewer
角色的命令:
使用 is
作为服务名称。 此外,请使用引号将角色名称括起,这些名称是多个单词,如此处的示例中所示。
ibmcloud iam user-policy-create USER@EXAMPLE.COM --service-name is --roles "Viewer"
使用 API 分配对 VPC 基础架构服务的访问权
有关分配,除去和复审访问权的逐步指示信息,请参阅 使用 API 分配对资源的访问权 或 创建策略 API。 下表中的角色云资源名称 (CRN) 用于分配对 API 的访问权。
角色名称 | 角色 CRN |
---|---|
查看者 | crn:v1:bluemix:public:iam::::role:Viewer |
运算符 | crn:v1:bluemix:public:iam::::role:Operator |
编辑者 | crn:v1:bluemix:public:iam::::role:Editor |
管理员 | crn:v1:bluemix:public:iam::::role:Administrator |
读者 | crn:v1:bluemix:public:iam::::serviceRole:Reader |
写入者 | crn:v1:bluemix:public:iam::::serviceRole:Writer |
管理者 | crn:v1:bluemix:public:iam::::serviceRole:Manager |
VPNClient | crn:v1:bluemix:public:iam::::serviceRole:VPNClient |
裸机高级网络操作员 | crn:v1:bluemix:public:iam::::serviceRole:BareMetalAdvancedNetworkOperator |
裸机控制台管理员 | crn:v1:bluemix:public:iam::::serviceRole:BareMetalConsoleAdmin |
IP 电子欺骗操作员 | crn:v1:bluemix:public:iam::::serviceRole:IPSpoofingOperator |
控制台管理员 | crn:v1:bluemix:public:iam::::serviceRole:VirtualServerConsoleAdmin |
以下示例用于为 VPC Infrastructure Services
分配 Viewer
角色:
使用 is
作为服务名称,并参阅“角色标识值”表以确保您使用的是正确的 CRN 值。
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Object Writer role for Cloud Object Storage",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "IBMid-123453user"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam::::role:Viewer"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "is"
}
]
}
]
}
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
.name("iam_id")
.value("IBMid-123453user")
.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("ACCOUNT_ID")
.operator("stringEquals")
.build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
.name("serviceName")
.value("is")
.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: 'IBMid-123453user',
},
],
},
];
const policyRoles = [
{
role_id: 'crn:v1:bluemix:public:iam::::role:Viewer',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: 'ACCOUNT_ID',
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceName',
value: 'is',
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='IBMid-123453user')])
policy_roles = PolicyRole(
role_id='crn:v1:bluemix:public:iam::::role:Viewer')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value='ACCOUNT_ID')
service_name_resource_attribute = ResourceAttribute(
name='serviceName', value='is')
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("IBMid-123453user"),
}
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("ACCOUNT_ID"),
Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("serviceName"),
Value: core.StringPtr("is"),
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))
使用 Terraform 分配对 VPC 基础架构服务的访问权
以下示例用于为 VPC Infrastructure Services
分配 Viewer
角色:
使用 is
作为服务名称。
resource "ibm_iam_user_policy" "policy" {
ibm_id = "test@example.com"
roles = ["Viewer"]
resources {
service = "is"
}
}
有关更多信息,请参阅 ibm_iam_user_policy。
提示
- 对容器资源的访问权不会自动授予对其子资源的访问权。 例如,授予对 VPC 的访问权并不会授予对该 VPC 中子网的访问权。
- 与此类似,对子资源的访问权不会授予对其容器资源的访问权。 例如,授予对子网的访问权并不会授予对该子网的 VPC 的访问权。
- 通常,要更改多个资源之间的关系,用户必须有权访问每个资源。 例如,要将网络接口连接到安全组,用户必须有权访问网络接口和安全组。
有关在控制台中分配用户角色的更多信息,请参阅 管理 VPC 资源的用户权限。
您还可以使用 IBM Cloud® 命令行界面 (CLI) 来分配用户角色。 您可以使用资源属性来选择资源。 有关更多信息,请参阅 VPC 资源属性。
资源组
_资源组是_资源的集合,如整个 VPC 或单个子网,这些资源被关联起来以建立授权和使用。 你可以把资源组看作一个项目、一个部门或一个团队可能使用的基础架构资源的集合。
大型企业可能会将 VPC 划分为各种资源组,而较小的公司可能只需要一个资源组,因为所有团队成员都有权访问整个 VPC。 如果您熟悉 OpenStack,资源组的概念类似于_项目_。OpenStack Keystone.
仅当创建资源时,才能将该资源分配给资源组。 创建资源后,即不能更改资源所属的资源组。
如果要使用多个资源组,最好计划好如何将资源和组织中的用户分配到每个资源组。
有关资源组的更多信息,请参阅 资源组。