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の役割と行動
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
を使用します。 また、1語以上のロール名については、この例のように引用符で囲んでください。
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 の_プロジェクト_に似ているとも言えます。
リソースの作成時にしか、リソースをリソース・グループに割り当てることはできません。 リソースを作成した後に、リソース・グループを変更することはできません。
複数のリソースグループを使用する場合は、リソースと組織内のユーザーを各リソースグループにどのように割り当てるかを計画しておくとよいでしょう。
リソース・グループについて詳しくは、 リソース・グループ を参照してください。