IBM Cloud Docs
バケットへのアクセスを許可S2Sの作成

バケットへのアクセスを許可S2Sの作成

IBM Cloud® Identity and Access Management (IAM) を使用して、 IBM Cloud Activity Tracker Event Routing IBM Cloud Object Storageへのアクセス権を付与する認証を作成します。

バケットが配置されている IBM Cloudで、サービス間 S2S 認証を設定する必要があります。

開始前に

  • サービス間のアクセス権付与の管理 についてお読みください。

  • サービス間の認証を管理するには、対象のサービスにアクセスできる必要があります。 詳細は、 権限管理の権限 を参照してください。

  • IBM Cloud Activity Tracker Event Routingに対して定義する権限には、 IBM Cloud Object Storageに対して Administrator のロールを持っていることが必要です。

  • バケットが配置されているアカウントで権限を定義していることを確認してください。

  • 別のアカウントのサービスと現在のアカウントのターゲット・サービスの間に許可を作成する場合は、ターゲット・リソースへのアクセス権限のみが必要です。 ソースアカウントについては、アカウントIDのみが必要です。

サービス・アクセス役割

Object Writer にロールを付与し、バケットにオブジェクトを書き込むことのみを許可する権限を付与する必要があります。

コンソールから認証を作成する

次の手順を完了して IBM Cloud Activity Tracker Event Routing IBM Cloud Object Storageへのアクセス権を付与します

  1. IBM Cloud コンソールで、「管理」 > **「アクセス (IAM)」をクリックし、「許可」**を選択します。

  2. 「作成」 をクリックします。

  3. ソース・アカウントを選択します。

    IBM Cloud Activity Tracker Event Routing とバケットが、権限を定義しているアカウントと同じである場合は、 このアカウントを選択します。

    IBM Cloud Activity Tracker Event Routing とバケットが異なるアカウントにある場合は 、「その他のアカウント」 を選択します。 次に、ソースアカウントのID、つまり、バケットにデータを送信IBM Cloud Activity Tracker Event Routingを入力します。

  4. Activity Tracker Event Routing をソースサービスとして選択します。 次に、アクセス範囲を 「すべてのリソース」 に設定します。

  5. 対象サービスとして Cloud Object Storage を選択します。 次に、アクセス範囲を設定します。

    アカウント内のすべてのCOSインスタンスとリソースへのアクセスを許可するには 、「すべてのリソース」 を選択します。

    特定の COS インスタンスへのアクセスを許可するには、 選択した属性に基づいてリソース > サービス インスタンスを構成して、単一のインスタンスを選択します。

    単一のバケットへのアクセスを許可するには、 選択した属性に基づくリソースの設定で 「サービスインスタンス」 を選択し、単一インスタンスを選択します。 次に、 リソースID をバケットの名前に設定し、 リソースタイプ をバケットに設定します。

  6. [サービスアクセス]セクション[オブジェクトライター] を選択し、バケットに IBM Cloud Activity Tracker Event Routing アクセスを割り当てます。

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

許可の作成

IBM Cloud Activity Tracker Event Routingが同じアカウントにある場合、次のコマンドを実行して IBM Cloud Activity Tracker Event Routingの認証を作成します

ibmcloud iam authorization-policy-create atracker cloud-object-storage "Object Writer" [--target-service-instance-name TARGET_SERVICE_INSTANCE_NAME | --target-service-instance-id TARGET_SERVICE_INSTANCE_ID] [--target-resource-type RESOURCE_TYPE]

以下のパラメータを設定して、単一のバケットへのアクセスを許可することができます

  • TARGET_SERVICE_INSTANCE_NAME: IBM Cloud Object Storageの CRN。
  • RESOURCE_TYPEバケットに設定する必要があります。
  • RESOURCE:バケット名に設定する

このコマンドで利用可能なすべてのパラメーターについて詳しくは、ibmcloud iam authorization-policy-create を参照してください。

CLIを使用してアカウント間の承認を作成する

IBM Cloud Activity Tracker Event Routingと対象サービスが異なるアカウントにある場合、対象サービスが配置されているアカウントで認証を作成するには、次のコマンドを実行します

ibmcloud iam authorization-policy-create atracker cloud-object-storage "Object Writer" [--target-service-instance-name TARGET_SERVICE_INSTANCE_NAME | --target-service-instance-id TARGET_SERVICE_INSTANCE_ID] [--target-resource-type RESOURCE_TYPE] [--target-resource RESOURCE] [--source-service-account SOURCE_SERVICE_ACCOUNT_GUID ]

以下のパラメータを設定して、単一のバケットへのアクセスを許可することができます

  • TARGET_SERVICE_INSTANCE_NAME: IBM Cloud Object Storageの CRN。
  • RESOURCE_TYPEバケットに設定する必要があります。
  • RESOURCE:バケット名に設定する
  • SOURCE_SERVICE_ACCOUNT_GUID: ターゲットサービスにデータを送信するように設定されているアカウントのGUID IBM Cloud Activity Tracker Event Routing に設定します。 このオプションは、ソースサービスが他のアカウントからのものである場合のみ使用してください。

このコマンドで利用可能なすべてのパラメーターについて詳しくは、ibmcloud iam authorization-policy-create を参照してください。

Terraform を使用した許可の作成

Terraformを使用して認証を作成する前に、以下の作業が完了していることを確認してください

  • Terraform CLIをインストールし、Terraform用の IBM Cloudを設定します。 詳細は IBM Cloudの Terraform入門 チュートリアルをご覧ください。 このプラグインは、以下のタスクを実行するために使用される IBM Cloud API を抽象化します。
  • main.tfという名前の Terraform 構成ファイルを作成します。 このファイルでは、 HashiCorp を使用してリソースを定義します。 詳細については 、Terraformのドキュメントを参照してください。

Terraformを使用して認証を作成するには、以下の手順に従います

  1. main.tf ファイルで ibm_iam_authorization_policy リソース引数を使用して、サービス間の認証ポリシーを作成します。

    次の例では、2つのサービス間の認証を作成します

    resource "ibm_iam_authorization_policy" "policy" {
     source_service_name = "atracker"
     target_service_name = "cloud-object-storage"
     roles               = ["Object Writer"]
     description         = "Authorization Policy"
     transaction_id     = "terraformAuthorizationPolicy"
    }
    

    次の例では、2つの特定のサービスインスタンス間の認証を作成します

    resource "ibm_iam_authorization_policy" "policy" {
      source_service_name         = "atracker"
      source_resource_instance_id = ibm_resource_instance.instance1.guid
      target_service_name         = "cloud-object-storage"
      target_resource_instance_id = ibm_resource_instance.instance2.guid
      roles                       = ["Object Writer"]
    }
    

    ibm_iam_authorization_policy リソースには、ソースサービス、ターゲットサービス、およびロールが必要です。 ソースサービスはターゲットサービスへのアクセス権限が与えられ、役割はアクセスが許可する権限のレベルです。 オプションとして、認証に関する説明とトランザクションIDを追加することができます。

  2. 構成ファイルの作成が完了したら、Terraform CLI を初期化します。 詳細は 、「作業ディレクトリの初期化 」を参照してください。

    terraform init
    
  3. main.tf ファイルからリソースを準備します。 詳細については 、「Terraformによるインフラストラクチャのプロビジョニング 」を参照してください。

    1. terraform plan を実行して、提案されたアクションのプレビューを表示するための Terraform 実行計画を生成します。

      terraform plan
      
    2. terraform apply を実行して、計画で定義されたリソースを作成します。

      terraform apply
      

API を使用した許可の作成

ソース・サービスからターゲット・サービスへのアクセスを許可するには、IAM Policy Management API を使用します。 cloud-object-storage バケットをターゲットとして指定した type=authorization を使用してポリシーメソッドを作成するAPIの例は、以下を参照してください。

許可ポリシーの作成でサポートされる属性は、それぞれのサービスが何をサポートしているかによって異なります。

curl --request POST \
  --url https://iam.cloud.ibm.com/v1/policies \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "type": "authorization",
    "subjects": [
        {
            "attributes": [
                {
                    "name": "accountId",
                    "value": "<account-id>"
                },
                {
                    "name": "serviceName",
                    "value": "atracker"
                }
            ]
        }
    ],
    "roles": [
        {
            "role_id": "crn:v1:bluemix:public:iam::::serviceRole:ObjectWriter"
        }
    ],
    "resources": [
        {
            "attributes": [
                {
                    "name": "serviceName",
                    "value": "cloud-object-storage"
                },
                {
                    "name": "serviceInstance",
                    "value": "$COS_INSTANCE_CRN",
                    "operator": "stringEquals"
                },
                {
                    "name": "resourceType",
                    "value": "bucket",
                    "operator": "stringEquals"
                },
                {
                    "name": "resource",
                    "value": "$BUCKET_NAME",
                    "operator": "stringEquals"
                }
            ]
        }
    ]
}'