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 リソース属性を参照してください。
| リソース | リソースの属性 |
|---|---|
| Auto Scale for VPC | instanceGroupId:<instance-group-id> |
| バックアップ・サービス | backupPolicyId: <backup-policy-id> |
| Block Storage for VPC | volumeId: <volume-id> |
| ベアメタル・サーバー | 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> |
| Placement Group for 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> |
| サブネット | 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 スプーフィング・チェックを有効または無効にすることができます。 このロールは、必要な場合にのみ付与してください。 |
| コンソール管理者 | 仮想サーバー・インスタンス・コンソールにアクセスできます。 このロールではコンソールへのアクセス権のみが提供されるため、「Operator」、「Editor」、または「Administrator」など、仮想サーバーへのオペレーターアクセス権を持つ別のロールと組み合わせて使用する必要があります。 |
各役割にマップされる正確なアクションについて詳しくは、「 Infrastructure Services 」の IAM 役割とアクションのページを参照してください。
以下のリンクをクリックすると、IAM の役割とアクションのページにある特定のインフラストラクチャー・サービスに直接アクセスできます。
ネットワーク IAM のロールとアクション
- VPC用クラスタ・ネットワーク
- Floating IP for VPC
- Flow Logs for VPC
- VPC 用のロード・バランサー
- Network ACL
- プライベート・パス・サービス
- パブリック・アドレス範囲
- Public Gateway
- ルーティング テーブル (仮想プライベート クラウドのセクション > [アクション] タブを参照)
- Security Group for VPC
- サブネット
- Virtual Private Cloud
- Virtual Private Endpoint for VPC
- VPN for VPC
- VPC用VPNクライアント
- 仮想ネットワーク・インターフェース
IAMロールとアクションの算出
ストレージのIAMロールとアクション
- Block Storage for VPC
- Block Storage Snapshots for VPC
- Block Storage VPC用マルチボリュームスナップショット
- VPC の Backup as a Service
- 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 が必要です。 仮想プライベート・クラウド API
リファレンスには、各 API 呼び出しの許可セクション (例えば、 インスタンスの作成) が含まれています。
コンソールでの VPC インフラストラクチャー・サービスへのアクセス権限の割り当て
コンソールでアクセス権を割り当てるには、主に2つの方法があります:
- ユーザー別のアクセス・ポリシー。 コンソールで**「管理」>「アクセス (IAM)」>「ユーザー」**ページから、ユーザー別のアクセス・ポリシーを管理できます。 IAM アクセス権限を割り当てる手順の詳細については、リソースに対するアクセス権限の管理を参照してください。
- アクセス・グループ。 アクセス・グループは、アクセス権限をグループに 1 回割り当てることによってアクセス管理を簡素化するために使用されます。その後、ユーザーのアクセス権限を制御するために、必要に応じてグループにユーザーを追加したり、グループからユーザーを削除したりすることができます。 コンソールの**「管理」>「アクセス (IAM)」>「アクセス・グループ」**ページから、アクセス・グループと各グループのアクセス権限を管理します。 詳しくは、コンソールでのグループへのアクセス権限の割り当てを参照してください。
CLI での VPC インフラストラクチャー・サービスへのアクセス権限の割り当て
アクセス権限の割り当て、削除、および確認のステップバイステップの手順については、CLI を使用したアクセス・ロー・リソースの割り当てを参照してください。
以下の例は、 VPC Infrastructure Services の Viewer 役割を割り当てるコマンドを示しています。
サービス名には is を使用します。 また、こちらの例のように、2語以上のロール名には引用符を付けてください。
ibmcloud iam user-policy-create USER@EXAMPLE.COM --service-name is --roles "Viewer"
API を使用した VPC インフラストラクチャー・サービスへのアクセス権限の割り当て
アクセス権の割り当て、削除、および確認に関する手順については、 「API を使用したリソースへのアクセス権の割り当て 」または「 ポリシー API の作成 」を参照してください。 API でアクセス権限を割り当てるには、以下の表に記載している役割のクラウド・リソース名 (CRN) を使用します。
| 役割名 | 役割の 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には正しい値が指定されていることを確認するために、ロールID値の表を参照してください。
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 全体を利用するような中小企業では、1 つのリソース・グループだけで十分かもしれません。 OpenStack を使い慣れているユーザー向けには、リソース・グループの概念は、OpenStack Keystone の_プロジェクト_に似ているとも言えます。
リソースの作成時にしか、リソースをリソース・グループに割り当てることはできません。 リソースを作成した後に、リソース・グループを変更することはできません。
複数のリソースグループを使用する場合は、組織内のリソースやユーザーを各リソースグループにどのように割り当てるかを事前に計画しておくことをお勧めします。
リソース・グループについて詳しくは、 リソース・グループ を参照してください。