IAM ロールの付与および取り消し

このページでは、Secure Source Manager リソースのプリンシパルに Identity and Access Management(IAM)ロールを付与する方法について説明します。他の Google Cloud リソースに対するロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

Secure Source Manager のインスタンスとリポジトリには、それぞれ独自のロールがあります。プロジェクトでインスタンス ロールを初めて付与する場合は、gcloud CLI ツールまたは REST API を使用する必要があります。リポジトリのロールは、gcloud CLI ツール、REST API、または Secure Source Manager ウェブ インターフェースを使用して付与できます。

gcloud CLI、ウェブ インターフェース、または REST API を使用して Secure Source Manager ロールを付与すると、そのロールが Google Cloud コンソールのプロジェクトに表示されます。

必要なロール

インスタンスまたはリポジトリの IAM ポリシーを更新するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

Secure Source Manager のロールの付与については、IAM によるアクセス制御ユーザーにインスタンスへのアクセス権を付与するをご覧ください。

プリンシパルを指定する

プリンシパルは、リソースにアクセスできる ID を表します。各プリンシパルには、固有の識別子があります。プリンシパル ID の形式は次のとおりです。

PRINCIPAL-TYPE:ID

たとえば、「user:my-user@example.com」のようになります。プリンシパルの詳細については、IAM の仕組みをご覧ください。

プリンシパル タイプが user の場合、Workforce Identity 連携を使用している場合を除き、識別子に含まれるドメイン名は Google Workspace ドメインまたは Cloud Identity ドメインである必要があります。Cloud Identity ドメインの設定方法については、Cloud Identity の概要をご覧ください。

Workforce Identity 連携のプリンシパル

Workforce Identity 連携を使用して Secure Source Manager にアクセスする場合、プリンシパルは異なる方法で表されます。ID グループを表すプリンシパルにアクセス権を付与する方法については、IAM ポリシーで Workforce プールユーザーを表すをご覧ください。

たとえば、次のコマンドは、us-central1 リージョンのプロジェクト my-project のインスタンス my-instance のワークフォース プール my-pool で、ユーザー user@example.com にインスタンス アクセサー ロール(roles/securesourcemanager.instanceAccessor)を付与します。

  gcloud beta source-manager instances add-iam-policy-binding my-instance \
      --project=my-project \
      --region=us-central1 \
      --member=principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com \
      --role=roles/securesourcemanager.instanceAccessor

Workforce Identity プール内のユーザーまたはグループに、ID プロバイダ(IdP)の属性に基づいて権限を付与できます。また、Common Expression Language(CEL)を使用して OIDC 属性をカスタム属性にマッピングし、IAM ポリシーで認可戦略を定義することもできます。属性マッピングの詳細については、属性マッピングをご覧ください。

インスタンス ロールを付与または取り消す

インスタンス ロールを付与または取り消すには、読み取り、変更、書き込みのパターンを使用して、リソースの許可ポリシーを更新します。

  1. getIamPolicy() を呼び出して、現在の許可ポリシーを読み取ります。
  2. テキスト エディタまたはプログラムで許可ポリシーを編集し、プリンシパルまたはロール バインディングの追加や削除を行います。
  3. setIamPolicy() を呼び出して、更新された許可ポリシーを作成します。

gcloud

  1. 現在の許可ポリシーを読み取って /tmp/instances.json に保存するには、次のコマンドを実行します。

    gcloud beta source-manager instances get-iam-policy INSTANCE_ID \
        --project=PROJECT_ID \
        --region=REGION \
        --format=json > /tmp/instance.json
    

    次のように置き換えます。

    • INSTANCE_ID はインスタンス ID に置き換えます。
    • PROJECT_ID: インスタンスのプロジェクト ID またはプロジェクト番号。
    • REGION は、インスタンスが配置されているリージョンに置き換えます。使用可能な Secure Source Manager リージョンについては、ロケーションのドキュメントをご覧ください。

    出力には既存のバインディングが含まれます。バインディングが存在しない場合は、次のような etag 値が含まれます。

    {
        "etag": "BwUjHYKJUiQ="
    }
    
  2. ロールの付与または取り消しを反映するには、プログラムまたはテキスト エディタを使用して、インスタンスの許可ポリシーのローカルコピーを変更します。

    他の変更を上書きしないようにするため、許可ポリシーの etag フィールドは編集または削除しないでください。etag フィールドは、許可ポリシーの現在の状態を示します。更新した許可ポリシーを設定すると、IAM はリクエスト内の etag 値と既存の etag を比較し、値が一致する場合にのみ許可ポリシーを書き込みます。

    許可ポリシーで付与するロールを編集するには、許可ポリシーのロール バインディングを編集する必要があります。ロール バインディングの形式は次のとおりです。

    {
      "role": "ROLE_NAME",
      "members": [
        "PRINCIPAL_1",
        "PRINCIPAL_2",
        ...
        "PRINCIPAL_N"
      ]
    }
    

    プレースホルダの値は次のとおりです。

    • ROLE_NAME: 付与するロールの名前。形式は次のようにします。 roles/securesourcemanager.IDENTIFIER

    • PRINCIPAL_1PRINCIPAL_2...PRINCIPAL_N: ロールを付与するプリンシパルの ID。

    たとえば、次のポリシーでは、instanceOwner ロールが user1@gmail.com に付与され、instanceManager ロールがユーザー user2@gmail.comuser3@gmail.com、サービス アカウント my-other-app@appspot.gserviceaccount.com に付与されます。

    {
        "etag": "BwUjHYKJUiQ=",
        "bindings": [
        {
            "role": "roles/securesourcemanager.instanceOwner",
            "members": [
                "user:user1@gmail.com"
            ]
        },
        {
            "role": "roles/resourcemanager.instanceManager",
            "members": [
                "user:user2@gmail.com",
                "user:user3@gmail.com",
                "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
        }
        ]
    }
    
  3. 保存した許可ポリシーを変更して、選択したロールを付与または取り消した後、次のコマンドを実行してインスタンスの許可ポリシーを更新します。

    gcloud beta source-manager instances set-iam-policy INSTANCE_ID  \
        --project=PROJECT_ID \
        --region=REGION \
        /tmp/instance.json
    

    次のように置き換えます。

    • INSTANCE_ID はインスタンス ID に置き換えます。
    • PROJECT_ID: インスタンスのプロジェクト ID またはプロジェクト番号。
    • REGION は、インスタンスが配置されているリージョンに置き換えます。使用可能な Secure Source Manager リージョンについては、ロケーションのドキュメントをご覧ください。

API

  1. 次の instances.getIamPolicy コマンドを実行して、現在のポリシーを読み取ります。

    curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://securesourcemanager.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/instances/INSTANCE_ID:getIamPolicy > /tmp/instance.json
    

    次のように置き換えます。

    • PROJECT_ID: インスタンスのプロジェクト ID またはプロジェクト番号。
    • REGION インスタンスが配置されているリージョン。使用可能な Secure Source Manager リージョンについては、ロケーションのドキュメントをご覧ください。
    • INSTANCE_ID: インスタンス ID。

    出力には既存のバインディングが含まれます。バインディングが存在しない場合は、次のような etag 値が含まれます。

    {
        "etag": "BwUjHYKJUiQ="
    }
    
  2. ロールの付与または取り消しを反映するには、プログラムまたはテキスト エディタを使用して、インスタンスの許可ポリシーのローカルコピーを変更します。

    他の変更を上書きしないようにするため、許可ポリシーの etag フィールドは編集または削除しないでください。etag フィールドは、許可ポリシーの現在の状態を示します。更新した許可ポリシーを設定すると、IAM はリクエスト内の etag 値と既存の etag を比較し、値が一致する場合にのみ許可ポリシーを書き込みます。

    許可ポリシーで付与するロールを編集するには、許可ポリシーのロール バインディングを編集する必要があります。ロール バインディングの形式は次のとおりです。

    {
      "role": "ROLE_NAME",
      "members": [
        "PRINCIPAL_1",
        "PRINCIPAL_2",
        ...
        "PRINCIPAL_N"
      ]
    }
    

    プレースホルダの値は次のとおりです。

    • ROLE_NAME: 付与するロールの名前。形式は次のようにします。 roles/securesourcemanager.IDENTIFIER

    • PRINCIPAL_1PRINCIPAL_2...PRINCIPAL_N: ロールを付与するプリンシパルの ID。

    たとえば、次のポリシーでは、instanceOwner ロールが user1@gmail.com に付与され、instanceManager ロールがユーザー user2@gmail.comuser3@gmail.com、サービス アカウント my-other-app@appspot.gserviceaccount.com に付与されます。

    {
    "policy": {
        "etag": "BwUjHYKJUiQ=",
        "bindings": [
        {
            "role": "roles/securesourcemanager.instanceOwner",
            "members": [
                "user:user1@gmail.com"
            ]
        },
        {
            "role": "roles/resourcemanager.instanceManager",
            "members": [
                "user:user2@gmail.com",
                "user:user3@gmail.com",
                "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
        }
        ]
    }
    }
    
  3. 選択したロールを付与または取り消すように許可ポリシーを変更した後、instances.setIamPolicy() を呼び出して更新します。

    次の instances.setIamPolicy コマンドを使用して、インスタンスに新しいポリシーを設定します。

    curl \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://securesourcemanager.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/instances/INSTANCE_ID:setIamPolicy \
        -d @/tmp/instance.json
    

    次のように置き換えます。

    • PROJECT_ID: インスタンスのプロジェクト ID またはプロジェクト番号。
    • REGION インスタンスが配置されているリージョン。使用可能な Secure Source Manager リージョンについては、ロケーションのドキュメントをご覧ください。
    • INSTANCE_ID: インスタンス ID。

リポジトリ ロールを付与または取り消す

ユーザーとサービス アカウントにリポジトリロールを付与または取り消すには、Secure Source Manager ウェブ インターフェースから割り当てるか、Secure Source Manager API を使用してリポジトリ許可ポリシーを更新します。グループにリポジトリ ロールを付与するには、Secure Source Manager API を使用する必要があります。

ユーザーにリポジトリ ロールを付与するには、その前にインスタンス ロールを付与する必要があります。インスタンス ロールの付与については、インスタンス ロールを付与または取り消すをご覧ください。

ウェブ インターフェース

ウェブ インターフェースを使用してユーザーまたはサービス アカウントにリポジトリ レベルのロールを付与するには:

  1. Google の担当者から提供されたインスタンス URL に移動します。
  2. [マイ リポジトリ] ページで、リポジトリを選択します。
  3. [権限] タブをクリックします。
  4. [ユーザーと権限] セクションで、[ユーザーを追加] をクリックします。
  5. [プリンシパルの追加] フィールドに、ロールを付与するユーザーまたはサービス アカウントのメールアドレスを入力します。
  6. [ロールを割り当てる] メニューで、割り当てるロールを選択します。
  7. [保存] をクリックします。

ロールを追加するには、編集 編集アイコンをクリックし、[ロールを割り当てる] メニューを使用してロールを追加します。

API

Secure Source Manager API の repositories.getIamPolicy メソッドは、リポジトリの許可ポリシーを取得します。

  1. 次の repositories.getIamPolicy コマンドを実行して、現在のポリシーを読み取り、/tmp/repository.json に保存します。
curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://securesourcemanager.googleapis.com/v1/projects/REPOSITORY_PROJECT/locations/REGION/repositories/REPOSITORY_ID:getIamPolicy > /tmp/repository.json

次のように置き換えます。

  • REPOSITORY_PROJECT: リポジトリのプロジェクト ID またはプロジェクト番号。
  • REGION: リポジトリが配置されているリージョン。
  • REPOSITORY_ID: リポジトリ ID。

出力には既存のバインディングが含まれます。バインディングが存在しない場合は、次のような etag 値が含まれます。

{
    "etag": "BwUjHYKJUiQ="
}
  1. 付与または取り消しを行うロールを反映するには、プログラムまたはテキスト エディタを使用して、/tmp/repository.json に保存されているリポジトリの許可ポリシーのローカルコピーを変更します。

    他の変更を上書きしないようにするため、許可ポリシーの etag フィールドは編集または削除しないでください。etag フィールドは、許可ポリシーの現在の状態を示します。更新した許可ポリシーを設定すると、IAM はリクエスト内の etag 値と既存の etag を比較し、値が一致する場合にのみ許可ポリシーを書き込みます。

    許可ポリシーで付与するロールを編集するには、許可ポリシーのロール バインディングを編集する必要があります。ロール バインディングの形式は次のとおりです。

    {
      "role": "ROLE_NAME",
      "members": [
        "PRINCIPAL_1",
        "PRINCIPAL_2",
        ...
        "PRINCIPAL_N"
      ]
    }
    

    プレースホルダの値は次のとおりです。

    • ROLE_NAME: 付与するロールの名前。形式は次のようにします。 roles/securesourcemanager.<var>IDENTIFIER</var>

    • PRINCIPAL_1PRINCIPAL_2...PRINCIPAL_N: ロールを付与するプリンシパルの ID。

    次の例では、ユーザー email1@gmail.comrepoAdmin ロールを付与し、ユーザー email2@gmail.comgroup1@gmail.com、サービス アカウント my-other-app@appspot.gserviceaccount.comrepoWriter ロールを付与します。

    {
    "policy": {
        "etag": "BwUjHYKJUiQ=",
        "bindings": [
        {
            "role": "roles/securesourcemanager.repoAdmin",
            "members": [
                "user:email1@gmail.com"
            ]
        },
        {
            "role": "roles/resourcemanager.repoWriter",
            "members": [
                "user:email2@gmail.com",
                "group:group1@gmail.com",
                "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
        }
        ]
    }
    }
    
  2. 編集した /tmp/repository.json ファイルを保存します。

  3. setIamPolicy コマンドを使用して新しいポリシーを設定します。

    curl \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://securesourcemanager.googleapis.com/v1/projects/REPOSITORY_PROJECT/locations/REGION/repositories/REPOSITORY_ID:setIamPolicy \
        -d @/tmp/repository.json
    

    次のように置き換えます。

    • REPOSITORY_PROJECT: リポジトリのプロジェクト ID またはプロジェクト番号。
    • REGION: リポジトリが配置されているリージョン。使用可能な Secure Source Manager リージョンについては、ロケーションのドキュメントをご覧ください。
    • REPOSITORY_ID: リポジトリ ID。

次のステップ