管理 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> |
| Image Service for VPC | imageId:<image-id> |
| Load Balancer for VPC | loadBalancerId: <load-balancer-id> |
| Network ACL | networkAclId: <nacl-id> |
| VPC 的放置群組 | placementGroupId: <placement-group-id> |
| VPC 的 Private Path 服務 | 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> |
| Snapshot | snapshotId: <snapshot-id> |
| SSH Key for VPC | keyId:<key-id> |
| 子網路 | subnetId: <subnet-id> |
| 虛擬網路介面 | virtualNetworkInterfaceId:<virtual-network-interface-id> |
| Virtual Private Endpoint for VPC | endpointGatewayId:<endpoint-gateway-id> |
| Virtual Private Cloud | 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 | 如果您需要將存取權指派給已配置使用者 ID 及通行碼鑑別的 VPN 用戶端,則只需要選取此角色。 如果您需要配置使用者 ID 和密碼鑑別,請參閱 配置使用者 ID 和密碼。 |
| 裸機進階網路操作員 | 您有權在裸機介面上修改 IP 盜用及基礎架構 NAT。 |
| 裸機主控台管理者 | 您可以存取裸機伺服器主控台。 |
| IP 盜用操作員 | 您可以在虛擬伺服器實例上啟用或停用 IP 盜用檢查。 僅在必要時授與此角色。 |
| 主控台管理者 | 您可以存取虛擬伺服器實例主控台。 此角色僅提供主控台存取權,且必須與對虛擬伺服器具有操作員存取權的另一個角色 (例如「操作員」、「編輯者」或「管理者」) 結合。 |
如需對映至每一個角色之確切動作的相關資訊,請參閱 IAM 角色及動作頁面上的 Infrastructure Services。
下列鏈結會直接將您帶至 IAM 角色及動作頁面上的特定基礎架構服務。
網路 IAM 角色與動作
計算 IAM 角色與操作
儲存 IAM 角色與動作
- Block Storage for VPC
- Block Storage Snapshots for VPC
- Block Storage VPC 的多磁區 Snapshot
- 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 指派存取權資源。
下列範例顯示為 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 作為服務名稱,並參閱「角色 ID 值」表格,以確保您使用 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 中的「專案」。
僅當建立資源時,才能將該資源指派給資源群組。 建立資源後,即不能變更資源所屬的資源群組。
如果您想使用多個資源群組,建議事先規劃好如何將組織中的資源和使用者分配至各資源群組。
如需資源群組的相關資訊,請參閱 資源群組。