IBM Cloud Docs
サービス間の許可の確立

サービス間の許可の確立

異なるアカウント上のハブ VPC と DNS 共有 VPC 間の VPE ゲートウェイの DNS 共有を構成するには、ハブ VPC 管理者が IAM サービス間 (s2s) 許可ポリシーを設定する必要があります。 詳しくは、許可を使用した、サービス間のアクセス権限の付与を参照してください。

注:

  • DNS 共有 VPC とハブ VPC がハブ VPC 管理者と同じアカウントまたは異なるアカウントを使用している場合は、この DNS 共有 VPC にハブ VPC に対する DNSBindingConnector 権限を付与する IAM のサービス間許可ポリシーを作成する必要があります。
  • 現在、UI では、ハブ VPC に対する DNSBindingConnector 権限を持つことができるのは すべての VPC インスタンス のみです。 「特定の」VPC を示すには、CLI で使用するために、API を使用するか、JSON ファイルで API 要求をラップする必要があります。 サンプル・コードは、 CLI および API で使用するために提供されています。

コンソール、CLI、API、Terraformを使って、 s2s 認証を確立できる。

コンソールで IAM s2s 認証ポリシーを作成する

コンソールで IAM s2s 認証ポリシーを作成するには、以下の手順に従う:

  1. IBM Cloud コンソールで、「 管理 > アクセス(IAM) 」に進む。 IBM Cloud® Identity and Access Management ページが表示されます。

  2. サイド・パネルから、権限を選択します。

  3. Manage authorizationsページで、 Createをクリックします。

  4. サービスの承認ページで、ソース・アカウントを選択します。

    • アカウントで許可をセットアップする場合は、 「このアカウント」 を選択します。
    • エンタープライズ・アカウントで許可をセットアップする場合は、 「その他のアカウント」 を選択します。
  5. ソース・サービスとして、リストから 「VPC インフラストラクチャー・サービス」 を選択します。

  6. 有効範囲を選択します。 「特定のリソース」 を選択します。

  7. **「リソース・タイプ」**を選択します。 リストから 「仮想プライベート・クラウド」 を選択します。

  8. ソースサービスインスタンスを選択します。 「すべてのインスタンス」 を選択します。

    特定のインスタンスを選択するには、 CLI または API の説明を使用する必要があります。 これは既知の制限事項です。

  9. ターゲット・サービスについて、リストから 「VPC インフラストラクチャー・サービス」 を選択します。

  10. 有効範囲を選択します。 「特定のリソース」 を選択します。

  11. 「リソース・タイプ」 をクリックします。 リストから 「仮想プライベート・クラウド」 を選択します。

  12. 「サービス・アクセス」の下の「役割」セクションで、 DNSBindingConnector を選択します。

  13. 「許可」 をクリックします。

  14. 「許可の管理 (Manage authorizations)」 ページに戻ったら、再度 「作成」 をクリックし、同じステップに従って他の 2 つのサービスの許可をセットアップします。

CLI からの IAM s2s 許可ポリシーの作成

CLI から IAM s2s 許可ポリシーを作成するには、以下の手順を実行します。

  1. CLI 環境をセットアップします。

  2. CLIでアカウントにログインします。 パスワードを入力すると、使用するアカウントとリージョンの入力を求めるプロンプトが表示されます。

    ibmcloud login --sso
    
  3. IAM s2s 許可ポリシーを作成します。

    ibmcloud iam authorization-policy-create is DNSBindingConnector --source-resource-type vpc --target-resource-type vpc
    

CLI からの特定の VPC インスタンスの指定

DNS 共有 VPC とハブ VPC がハブ VPC 管理者と同じアカウントを使用している場合は、この DNS 共有 VPC にハブ VPC に対する DNSBindingConnector 権限を付与する IAM サービス間許可ポリシーを作成する必要があります。

現在、UI Source service instance では、ハブ VPC に対する DNSBindingConnector 権限を持つことができるのは すべての VPC インスタンス のみです。

CLI から特定の VPC を示すには、API 要求コンテンツを含む JSON ファイルを使用する必要があります。 以下に例を示します。

ibmcloud iam authorization-policy-create --file JSON_FILE

ここで、 JSON_FILE の内容は次のとおりです。

{"type":"authorization","subjects":[{"attributes":[{"name":"accountId","value":"e38cfd44b6e44b249ac75dd5de0cc8aa"},{"name":"serviceName","value":"is"},{"name":"resourceType","value":"vpc"},{"name":"resource","value":"r006-fd189c4f-52a0-4694-abfd-186cb6011a3c"}]}],"roles":[{"role_id":"crn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector"}],"resources":[{"attributes":[{"name":"accountId","value":"e38cfd44b6e44b249ac75dd5de0cc8aa"},{"name":"serviceName","value":"is"},{"name":"vpcId","value":"r006-ffaedf75-4f44-4ead-989d-cd37816a13d2"}]}]}

API を使用した IAM s2s 許可ポリシーの作成

API を使用して IAM s2s 許可ポリシーを作成するには、以下の手順を実行します。

  1. API 環境をセットアップします。

  2. APIコマンドで使用する変数に以下の値を格納する:

    export dns_shared_account_id=<dns_shared_vpc_account_id>
    export hub_account_id=<hub_vpc_account_id>
    export dns_shared_vpc_id=<dns_shared_vpc_id>
    export hub_vpc_id=<hub_vpc_id>
    
  3. 異なるアカウント間でハブとDNS共有VPC間のDNS解決バインディングを作成および削除するには、 s2sポリシーはハブ VPC アカウントに存在する必要があります。 これにより、DNS 共有 VPC にハブ VPC に対する DNSBindingConnector 役割が付与されます。 を作成するにはs2sポリシーについては、policies 方法 IAM ポリシー管理 API

要求の例

{
  "type": "authorization",
  "subjects": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "'$dns_shared_account_id'"
        },
        {
          "name": "serviceName",
          "value": "is"
        },
        {
          "name": "resourceType",
          "value": "vpc"
        },
        {
          "name": "resource",
          "value": "'$dns_shared_vpc_id'"
        }
      ]
    }
  ],
  "roles": [
    {
      "role_id": "crn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector"
    }
  ],
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "'$hub_account_id'"
        },
        {
          "name": "serviceName",
          "value": "is"
        },
        {
          "name": "vpcId",
          "value": "'$hub_vpc_id'"
        }
      ]
    }
  ]
}

コマンド例

curl -sX POST "$iam_api_endpoint/v1/policies" -H "Authorization: Bearer ${iam_token}" -d '$request_body'

API を使用した特定の VPC インスタンスの指定

DNS 共有 VPC とハブ VPC がハブ VPC 管理者と同じアカウントを使用している場合は、この DNS 共有 VPC にハブ VPC に対する DNSBindingConnector 権限を付与する IAM サービス間許可ポリシーを作成する必要があります。

現在、UI Source service instance では、ハブ VPC に対する DNSBindingConnector 権限を持つことができるのは すべての VPC インスタンス のみです。

ハブ VPC に対する DNSBindingConnector 権限を DNS 共有 VPC に付与するためのサンプル API を以下に示します。 role_idcrn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector であることに注意してください。

{
"type": "authorization",
"subjects": [
{
"attributes": [
{ "name": "accountId", "value": "Account S (Spoke)" }
 ,
   { "name": "serviceName", "value": "is" }
 ,
{ "name": "resourceType", "value": "vpc" }
 ,
{ "name": "resource", "value": "Spoke VPC ID" }
 ]
}
],
"roles": [
{ "role_id": "crn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector" }
 ],
"resources": [
{
"attributes": [
{ "name": "accountId", "value": "Account H (Hub)" }
 ,
{ "name": "serviceName", "value": "is" }
 ,
{ "name": "vpcId", "value": "Hub VPC ID" }
 ]
}
]
}

Terraform を使用した IAM s2s 許可ポリシーの作成

Terraform を使用して、IAM s2s 許可ポリシーを作成できます。

Terraform を使用するには、Terraform CLI をダウンロードし、 IBM Cloud Provider プラグインを構成します。 詳しくは、 Terraform の概要 を参照してください。

VPC インフラストラクチャー・サービスは、デフォルトで us-south をターゲットとする地域固有のエンドポイントを使用します。 別のリージョンに VPC を作成する場合は、 provider.tf ファイルのプロバイダー・ブロックで適切なリージョンをターゲットにしてください。

デフォルトの us-south 以外の地域をターゲットにする例を以下に示します。

resource "ibm_iam_authorization_policy" "policy" {

  #"DNSBindingConnector",

  roles = [

    "DNS Binding Connector",

  ]

    subject_attributes {

        name  = "accountId"

        value = "var.accountId1"

    }

    subject_attributes {

        name  = "serviceName"

        value = "is"

    }

     subject_attributes {

        name  = "resourceType"

        value = "vpc"

    }

    subject_attributes {

        name  = "resource"

        value = ibm_is_vpc.spoke_vpc.id

    }

    resource_attributes {

        name     = "accountId"

        value    =  "var.accountId2"

    }

    resource_attributes {

        name     = "serviceName"

        value    = "is"

    }

   resource_attributes {

      name  =  "vpcId"

      value =  ibm_is_vpc.hub_vpc.id

   }

}