このページでは、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 ロールを付与するよう管理者に依頼してください。
-
インスタンス IAM ロールを付与する:
Secure Source Manager インスタンス オーナー (
roles/securesourcemanager.instanceOwner) Secure Source Manager インスタンスに対する -
リポジトリ IAM ロールを付与する:
リポジトリに対する Secure Source Manager Repo 管理者 (
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 で、ユーザー user@example.com にインスタンス アクセサー ロール(roles/securesourcemanager.instanceAccessor)を付与します。
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
Workforce Identity プール内のユーザーまたはグループには、 ID プロバイダ(IdP)属性に基づいて権限を付与できます。また、 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.com。ROLE_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.com。ROLE_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@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" ] } ] } }選択したロールを付与または取り消すように許可ポリシーを変更した後、
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 に移動します。
- [マイ リポジトリ] ページで、リポジトリを選択します。
- [権限] タブをクリックします。
- [ユーザーと権限] セクションで、[ユーザーを追加] をクリックします。
- [プリンシパルを追加] フィールドに、ロールを付与するユーザーまたはサービス アカウントのメールアドレスを入力します。
- [ロールを割り当てる] メニューで、割り当てるロールを選択します。
- [保存] をクリックします。
ロールを追加するには、 [編集]アイコンをクリックし、 ロールを [ロールを割り当てる]メニューを使用して追加します。
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@appspot.gserviceaccount.comに付与されます。{ "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" ] } ] } }編集した
/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。
次のステップ
- Secure Source Manager での IAM によるアクセス制御の詳細を確認する。