このページでは、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 ロールを少なくとも 1 回付与すると、プロジェクト レベルのアクセス権を付与するときに、 Google Cloud コンソールでロールを選択できるようになります。ただし、特定のインスタンス レベルとリポジトリ レベルのロール割り当て(バインディング)は、プロジェクト レベルの Google Cloud コンソールの IAM ページのプリンシパル リストには表示されません。
必要なロール
インスタンスまたはリポジトリの IAM ポリシーを更新するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
インスタンスの IAM ロールを付与する: Secure Source Manager インスタンスに対する Secure Source Manager インスタンス オーナー(
roles/securesourcemanager.instanceOwner) -
リポジトリの IAM ロールを付与する: リポジトリに対する Secure Source Manager リポジトリ管理者(
roles/securesourcemanager.repoAdmin)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
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 の Workforce プール my-pool のインスタンス アクセサー ロール(roles/securesourcemanager.instanceAccessor)をユーザー user@example.com に付与します。
gcloud 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
ID プロバイダ(IdP)属性に基づいて Workforce Identity プール内のユーザーまたはグループに権限を付与できます。また、Common Expression Language(CEL)を使用して OIDC 属性をカスタム属性にマッピングし、IAM ポリシーで認可戦略を定義することもできます。属性マッピングの詳細については、属性マッピングをご覧ください。
インスタンス ロールを付与または取り消す
プリンシパルにインスタンス ロールを付与または取り消すには、gcloud CLI ツールまたは Secure Source Manager API を使用します。
gcloud
インスタンスのプリンシパルにロールを付与するには、次のコマンドを実行します。
gcloud source-manager instances add-iam-policy-binding INSTANCE_ID \ --project=PROJECT_ID \ --region=REGION \ --member=PRINCIPAL \ --role=ROLE_NAME次のように置き換えます。
INSTANCE_IDはインスタンス ID に置き換えます。PROJECT_IDは、インスタンスのプロジェクト ID またはプロジェクト番号に置き換えます。REGIONは、インスタンスが配置されているリージョンに置き換えます。利用可能な Secure Source Manager リージョンについては、ロケーションのドキュメントをご覧ください。PRINCIPAL: ロールを付与するプリンシパル。例:user:my-user@example.comROLE_NAMEは、付与するロールの名前に置き換えます。例:roles/securesourcemanager.instanceOwner
インスタンスのプリンシパルからロールを取り消すには、次のコマンドを実行します。
gcloud source-manager instances remove-iam-policy-binding INSTANCE_ID \ --project=PROJECT_ID \ --region=REGION \ --member=PRINCIPAL \ --role=ROLE_NAME次のように置き換えます。
INSTANCE_IDはインスタンス ID に置き換えます。PROJECT_IDは、インスタンスのプロジェクト ID またはプロジェクト番号に置き換えます。REGIONは、インスタンスが配置されているリージョンに置き換えます。PRINCIPAL: ロールを取り消すプリンシパル。例:user:my-user@example.comROLE_NAMEは、取り消すロールの名前に置き換えます。例:roles/securesourcemanager.instanceOwner
API
次の
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=" }ロールの付与または取り消しを反映するには、プログラムまたはテキスト エディタを使用して、インスタンスの許可ポリシーのローカルコピーを変更します。
他の変更を上書きしないようにするため、許可ポリシーの
etagフィールドは編集または削除しないでください。etagフィールドは、許可ポリシーの現在の状態を示します。更新した許可ポリシーを設定すると、IAM ではリクエスト内のetag値と既存のetagを比較し、値が一致する場合にのみ許可ポリシーを書き込みます。許可ポリシーで付与するロールを編集するには、許可ポリシーのロール バインディングを編集する必要があります。ロール バインディングの形式は次のとおりです。
{ "role": "ROLE_NAME", "members": [ "PRINCIPAL_1", "PRINCIPAL_2", ... "PRINCIPAL_N" ] }プレースホルダの値は次のとおりです。
ROLE_NAME: 付与するロールの名前。形式は次のようにします。roles/securesourcemanager.IDENTIFIERPRINCIPAL_1、PRINCIPAL_2、...PRINCIPAL_N: ロールを付与するプリンシパルの ID。
たとえば、次のポリシーでは、
instanceOwnerロールをuser1@gmail.comに付与し、instanceManagerロールをユーザーuser2@gmail.com、user3@gmail.com、サービス アカウントmy-other-app@に付与します。{ "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@" ] } ] } }選択したロールを付与または取り消すように許可ポリシーを変更した後、
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 を使用する必要があります。
ユーザーにリポジトリ ロールを付与するには、インスタンス ロールを付与する必要があります。インスタンス ロールの付与については、インスタンス ロールの付与または取り消しをご覧ください。
ウェブ インターフェース
ウェブ インターフェースを使用してユーザーまたはサービス アカウントにリポジトリ レベルのロールを付与するには:
- Google の担当者から提供されたインスタンスの URL に移動します。
- [My repositories] ページで、リポジトリを選択します。
- [権限] タブをクリックします。
- [ユーザーと権限] セクションで、[ユーザーを追加] をクリックします。
- [プリンシパルを追加] フィールドに、ロールを付与するユーザーまたはサービス アカウントのメールアドレスを入力します。
- [ロールを割り当てる] メニューで、割り当てるロールを選択します。
- [保存] をクリックします。
ロールを追加するには、編集 編集アイコンをクリックし、[ロールを割り当てる] メニューを使用してロールを追加します。
API
Secure Source Manager API の repositories.getIamPolicy メソッドは、リポジトリの許可ポリシーを取得します。
- 次の
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="
}
プログラムまたはテキスト エディタを使用して、
/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_1、PRINCIPAL_2、...PRINCIPAL_N: ロールを付与するプリンシパルの ID。
次の例では、
repoAdminロールをユーザーemail1@gmail.comに付与し、repoWriterロールをユーザーemail2@gmail.com、group1@gmail.com、サービス アカウントmy-other-app@に付与します。{ "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@" ] } ] } }編集した
/tmp/repository.jsonファイルを保存します。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 です。