IBM Cloud Docs
IBM Cloud Direct Link に対する IAM アクセスの管理

IBM Cloud Direct Link に対する IAM アクセスの管理

IBM Cloud®Identity and Access Management(IAM)はアクセスを制御しますDirect Linkアカウント内のユーザー用のゲートウェイ。 アカウント内の Direct Link サービスにアクセスするユーザーごとに、IAM 役割を持つアクセス・ポリシーを割り当てる必要があります。 以下のロール、アクションなどを確認して、Direct Linkへのアクセスを割り当てる最適な方法を決定してください。

IBM Cloud® Direct Link によって、お客様のオンプレミスのリソースと、クラシック・インフラストラクチャーおよび仮想プライベートクラウド (VPC) インフラストラクチャーでホストされる IBM Cloud リソースとの間の接続が可能になります。

アカウント内のユーザーに割り当てるアクセス・ポリシーによって、サービスのコンテキスト内で、または選択する特定のインスタンスでユーザーが実行できるアクションが決まります。 直接リンクは、サービスで実行できる操作として、許可されるアクションをカスタマイズおよび定義します。 各アクションは、IAM プラットフォーム、またはユーザーに割り当てることのできるサービス役割にマップされます。

特定のロールとそのアクションが、アドレスを探すユースケースに適合しない場合は、カスタム・ロールを作成して、含めるアクションを選択できます。

IAM アクセス・ポリシーによって、さまざまなレベルでアクセス権限を付与できます。 オプションには以下のものがあります。

  • アカウント内の Direct Link サービスのインスタンス全体に対するアクセス権限
  • アカウント内の個別のサービス・インスタンスに対するアクセス権限
  • インスタンス内の特定のリソースに対するアクセス権限

以下の表に、Direct Linkサービスを使用しているときに、各ロールでどのような種類のタスクが可能かを示します。 プラットフォーム管理ロールは、ユーザーがプラットフォーム・レベルでサービス・リソースに対してタスクを実行することを可能にします。たとえば、サービスへのユーザー・アクセスを割り当てたり、インスタンスを作成または削除したりできます。

Direct Linkにはサービスアクセスロールがありません。サービスアクセスロールを使用すると、ユーザーはDirect Linkにアクセスし、Direct LinkAPIを呼び出すことができます。 各ロールにマッピングされる正確なアクションについては、'Direct Linkコネクト と'Direct Link専用 を参照のこと。

IAMプラットフォーム-アクセスユーザーの役割とアクション
プラットフォーム役割 アクションの説明 アクション例
管理者 ユーザーが Direct Link IAM アクセス・ポリシーを他のユーザーに割り当てることができるようにします。 ゲートウェイの作成
ゲートウェイの削除
ゲートウェイの編集
ゲートウェイへの仮想接続の追加*
ゲートウェイからの仮想接続の削除*
仮想接続の編集 (API のみ)
サービスのユーザー・アクセス・ポリシーの更新
エディター ゲートウェイや仮想接続の管理を含む、すべてのアクションを実行します。 ゲートウェイの作成
ゲートウェイの削除
ゲートウェイの編集
ゲートウェイへの仮想接続の追加*
ゲートウェイからの仮想接続の削除*
仮想接続の編集 (API のみ)
ビューアー/オペレーター リソースの状態を変更しないアクションを実行します。 ゲートウェイ一覧
ゲートウェイの取得
ゲートウェイの仮想接続の一覧
ゲートウェイの仮想接続の表示
ゲートウェイ関連情報(認可完了通知)の取得
着信接続要求の表示*

* VPC への仮想接続を追加または削除する、あるいは接続要求への同意または却下をする場合、ユーザーには、VPC に対するエディターまたは管理者のプラットフォーム・アクセス役割も必要です。 詳しくは、VPC: IAM 入門を参照してください。

注記:

  • すべての Direct Link リソースは 1 つのリソース・グループに含まれています。 Direct Linkリソースを作成するには、選択したリソースグループへのエディタアクセスが必要です。
  • コンソールでのユーザー役割の割り当てについては、リソースに対するアクセス権限の管理を参照してください。

コンソールでDirect Linkへのアクセスを割り当てる

コンソールでアクセスを割り当てる一般的な方法:

  • ユーザー別のアクセス・ポリシー。 コンソールで**「管理」>「アクセス (IAM)」>「ユーザー」**ページから、ユーザー別のアクセス・ポリシーを管理できます。 IAM アクセス権限を割り当てる手順については、リソースに対するアクセス権限の管理を参照してください。
  • アクセス・グループ。 アクセス・グループは、アクセス権限をグループに 1 回割り当てることによってアクセス管理を簡素化するために使用されます。その後、ユーザーのアクセス権限を制御するために、必要に応じてグループにユーザーを追加したり、グループからユーザーを削除したりすることができます。 コンソールの**「管理」>「アクセス (IAM)」>「アクセス・グループ」**ページから、アクセス・グループと各グループのアクセス権限を管理します。 詳しくは、コンソールでのグループへのアクセス権限の割り当てを参照してください。

アカウント間仮想接続の許可についての考慮事項

以下の表は、アカウント間の仮想接続の許可についての変更内容を示しています。

アカウント間の仮想接続とは、ある IBM Cloud アカウント内にゲートウェイが存在し、そのゲートウェイ内の仮想接続が別の IBM Cloud アカウント内の VPC に接続していることを意味しています。 このセットアップでは、オブジェクト(ダイレクト・リンクとVPC)とそのリソース・グループが両方のアカウントに存在しないため、特別な権限に関する考慮が必要です。

クロスアカウント仮想接続の認証変更
関連アカウント 機能 必要な許可
ゲートウェイ・アカウント この表で言及されていないすべての機能。 許可の変更はありません。
ゲートウェイ・アカウント アカウント間の仮想接続の作成と削除。 directlink.dedicated.edit または 'directlink.connect.edit'
作成時または削除時に必要な VPC 認証はありません。
ネットワーク・アカウント 読み取り専用のゲートウェイと仮想接続の表示。 サービス・レベルの directlink.dedicated.view または directlink.connect.view
ネットワーク・アカウント 保留中の接続の受け入れと拒否。 サービス・レベルの directlink.dedicated.view または directlink.connect.view
接続している VPC に対する許可を更新します。
ネットワーク・アカウント アタッチされている仮想接続の DELETE サービス・レベルの directlink.dedicated.view または directlink.connect.view
接続している VPC に対する許可を更新します。

CLIでDirect Linkへのアクセスを割り当てる

アクセスの割り当て、削除、レビューの手順については、CLIを使用したアクセスリソースの割り当て を参照してください。 以下の例は、 Editor 役割をユーザーに割り当てるコマンドを示しています。

サービス名には directlink を使用します。 また、以下の例のように、複数の単語で構成されるロール名を引用符で囲みます。

ibmcloud iam user-policy-create USER@EXAMPLE.COM --service-name directlink --roles Editor

APIを使用したDirect Linkへのアクセス権の割り当て

アクセスの割り当て、削除、レビューのステップバイステップの手順については、APIを使用したリソースへのアクセスの割り当て、または ポリシーのAPIドキュメント の作成を参照してください。 API でアクセス権限を割り当てるには、以下の表に記載している役割のクラウド・リソース名 (CRN) を使用します。

APIで使用するロールIDの値
役割の名前 役割の CRN
ビューアー crn:v1:bluemix:public:directlink::::serviceRole:Viewer
オペレーター crn:v1:bluemix:public:directlink::::serviceRole:Operator
エディター crn:v1:bluemix:public:directlink::::serviceRole:Editor
管理者 crn:v1:bluemix:public:directlink::::serviceRole:Administrator
リーダー crn:v1:bluemix:public:directlink::::serviceRole:Reader
ライター crn:v1:bluemix:public:directlink::::serviceRole:Writer
マネージャー crn:v1:bluemix:public:directlink::::serviceRole:Manager

サービス名には'directlink を使用し、CRNに正しい値を使用していることを確認するためにRole ID values tableを参照してください。

以下のポリシーは、アカウント内のすべての serviceName=directlink リソースにユーザー・ライター役割を割り当てます。

curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
  "type": "access",
  "description": "Writer role for Direct Link",
  "subjects": [
   {
    "attributes": [{
        "name": "iam_id",
        "value": "IBMid-123453user"
    }]
  }],
  "roles": [{
    "roles_id": "crn:v1:bluemix:public:directlink::::serviceRole:Writer"
   }],
  "resources": [{
    "attributes": [
    {
        "name": "accountId",
        "value": "1234567890987654321"
    },
    {
        "name": "serviceName",
        "value": "directlink"
    }]
}]
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:directlink::::serviceRole:Writer")
      .build();

ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
      .name("accountId")
      .value("ACCOUNT_ID")
      .operator("stringEquals")
      .build();

ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
      .name("serviceName")
      .value("directlink")
      .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);
policy_subjects = PolicySubject(
  attributes=[SubjectAttribute(name='iam_id', value='IBMid-123453user')])
policy_roles = PolicyRole(
  role_id='crn:v1:bluemix:public:directlink::::serviceRole:Writer')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value='ACCOUNT_ID')
service_name_resource_attribute = ResourceAttribute(
  name='serviceName', value='directlink')
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:directlink::::serviceRole:Writer"),
}
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("directlink"),
  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))
const policySubjects = [
  {
    attributes: [
      {
        name: 'iam_id',
        value: 'IBMid-123453user',
      },
    ],
  },
];
const policyRoles = [
  {
    role_id: 'crn:v1:bluemix:public:directlink::::serviceRole:Writer',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: 'ACCOUNT_ID',
  operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
  name: 'serviceName',
  value: 'directlink',
  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)
  });

Curl の例 2

以下のポリシーは、アカウント内のタイプ dedicated のすべての serviceName=directlink リソースにユーザー・ライター役割を割り当てます。

curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
  "type": "access",
  "description": "Writer role for Direct Link Dedicated",
  "subjects": [
  {
    "attributes": [{
        "name": "iam_id",
        "value": "IBMid-123453user"
  }]
}],
"roles": [{
    "roles_id": "crn:v1:bluemix:public:directlink::::serviceRole:Writer"
}],
"resources": [{
    "attributes": [
    {
        "name": "accountId",
        "value": "1234567890987654321"
    },
    {
        "name": "serviceName",
        "value": "directlink"
    },
    {
        "name": "dedicatedId",
        "value": "*"
    }]
}]

Terraformを使って「directlink」にアクセス権を割り当てる

次の例は、'Editor ロールを'directlink に割り当てるものである:

サービス名には directlink を使用します。

resource "ibm_iam_user_policy" "policy" {
  ibm_id = "test@example.com"
  roles  = ["Editor"]

  resources {
    service = "directlink"
  }
}

詳しくは、 ibm_iam_user_policyを参照してください。