管理 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 存取原則可讓您在不同層次授與存取權。 以下是包含的部分選項:

  • 在您的帳戶中跨所有服務實例存取
  • 帳戶中個別服務實例的存取權
  • 對實例內特定資源的存取權,例如 vpcIdinstanceId

下表列出了 VPC 資源的屬性。 如需相關資訊,請參閱 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。

IAM VPC 基礎結構服務平台角色
平台角色 動作的說明
檢視者 您可以檢視服務實例,但無法修改它們。
操作員 您可以執行配置和運作服務實例所需的平臺操作,例如檢視服務儀表板。
編輯者 您可以執行所有平台操作,唯獨無法管理帳戶及指派存取政策。
管理者 您可以根據此角色所指派的資源,執行所有平台操作,包括將存取政策指派給其他使用者。
IAM VPC 基礎結構服務存取角色
服務角色 動作的說明
讀者 您可以在服務內執行唯讀操作,例如檢視該服務專屬的資源。
撰寫者 您的權限已超出「讀取者」角色的範圍,包括建立和編輯特定服務的資源。
管理員 您擁有超出「撰寫者」角色的權限,可據此執行服務所定義的特權操作。 此外,您可以建立及編輯服務特定的資源。
VPNClient 如果您需要將存取權指派給已配置使用者 ID 及通行碼鑑別的 VPN 用戶端,則只需要選取此角色。 如果您需要配置使用者 ID 和密碼鑑別,請參閱 配置使用者 ID 和密碼
裸機進階網路操作員 您有權在裸機介面上修改 IP 盜用及基礎架構 NAT。
裸機主控台管理者 您可以存取裸機伺服器主控台。
IP 盜用操作員 您可以在虛擬伺服器實例上啟用或停用 IP 盜用檢查。 僅在必要時授與此角色。
主控台管理者 您可以存取虛擬伺服器實例主控台。 此角色僅提供主控台存取權,且必須與對虛擬伺服器具有操作員存取權的另一個角色 (例如「操作員」、「編輯者」或「管理者」) 結合。

如需對映至每一個角色之確切動作的相關資訊,請參閱 IAM 角色及動作頁面上的 Infrastructure Services

下列鏈結會直接將您帶至 IAM 角色及動作頁面上的特定基礎架構服務。

網路 IAM 角色與動作

計算 IAM 角色與操作

儲存 IAM 角色與動作

部分 VPC 作業需要多個 IAM 動作的授權。 例如,建立虛擬伺服器實例不僅需要 is.instance.instance.create,還需要 is.vpc.vpc.operateis.subnet.subnet.operateis.security-group.security-group.operateis.volume.volume.create。 可能需要其他條件式動作。 例如,如果您在專用主機上佈建實例,則需要 is.dedicated-host.dedicated-host-group.operateis.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 指派存取權。

用於 API 使用的 VPC 基礎架構服務角色 ID 值
角色名稱 角色 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 中的「專案」。

僅當建立資源時,才能將該資源指派給資源群組。 建立資源後,即不能變更資源所屬的資源群組。

如果您想使用多個資源群組,建議事先規劃好如何將組織中的資源和使用者分配至各資源群組。

如需資源群組的相關資訊,請參閱 資源群組

存取管理標籤

存取管理標籤 是新增至資源的 meta 資料,可協助組織存取控制關係。 標籤會建立彈性資源分組,供您管理。

當您使用標籤來控制對資源的存取權時,您團隊的專案可以成長,而不需要更新 IAM 原則。 您可以將「存取管理標籤」附加至「VPC 基礎架構資源」,並且可以根據標籤來定義那些資源的存取層次。

VPC 基礎架構資源具有複雜的授權模型,其中單一 API 呼叫可能會檢查多個資源的授權。 對於此類 API,標籤必須附加至 API 需要存取的所有資源。 如需必要 API 授權的相關資訊,請參閱 VPC API 參考資料

如果 API 呼叫針對資源群組名稱傳回 UNKNOWN,請在建立存取管理標籤原則時新增資源群組的「檢視者」存取權。

如需使用存取管理標籤的相關資訊,請參閱下列資源:

限制

  1. 現行實作與 API 規格之間存在一些間隙,如 這裡 所記載。

  2. 實例範本及專用主機群組不支援存取管理標籤。 因此,您無法使用這些標籤來完全管理 自動調整專用主機 存取權。

  3. 站台對站台 VPN 中使用的「網際網路金鑰交換 (IKE)」及 IPsec 原則資源不支援存取管理標籤。

指派服務定義角色的使用者介面限制

不支援使用使用者介面將「服務定義」角色指派給具有存取權管理標籤的存取原則。 僅透過 API 和 CLI 支援此特性。

使用 API 來指派服務定義的角色

不支援使用使用者介面將「服務定義」角色指派給具有存取權管理標籤的存取原則。 僅透過 API 和 CLI 支援此特性。 針對 API 使用下列範例。

curl --location --request POST 'https://iam.cloud.ibm.com/v1/policies' \
--header 'Content-Type: application/json' \
--header 'Authorization: <your token>' \
--data-raw '{
    "description": "useful description here",
    "type": "access",
    "subjects": [
        {
            "attributes": [
                {
                    "name": "iam_id",
                    "value": "<user iam-id>"
                }
            ]
        }
    ],
    "roles": [
        {
            "role_id": "crn:v1:bluemix:public:is::::serviceRole:VPNClient"
        }
    ],
    "resources": [
        {
            "attributes": [
                {
                            "name": "serviceName",
                            "value": "is",
                            "operator": "stringEquals"
                        },
                        {
                            "name": "accountId",
                            "value": "<your account id>"
                        }
            ],
            "tags":[
                {
                    "name": "abc",
                    "value": "test"
                }
            ]
        }
    ]
}'

使用 CLI 來指派服務定義的角色

不支援使用使用者介面將「服務定義」角色指派給具有存取權管理標籤的存取原則。 僅透過 API 和 CLI 支援此特性。 對於 CLI,請使用下列範例。

ic iam access-group-policy-create Developers_MyApp --roles Viewer --service-name kms --tags abc:test