プロジェクト、フォルダ、組織に対するアクセス権の管理

このページでは、プロジェクト、フォルダ、組織へのアクセス権の付与、変更、取り消しを行う方法について説明します。プロジェクト、フォルダ、組織へのアクセス権を付与すると、その内部のリソースへのアクセス権も付与されます。

他のリソースへのアクセスを管理する方法については、次のガイドをご覧ください。

Identity and Access Management(IAM)では、許可ポリシー(IAM ポリシー)によってアクセス権が付与されます。許可ポリシーはTrusted Cloud by S3NS リソースに適用されます。各許可ポリシーには、ユーザーやサービス アカウントなどの 1 つ以上のプリンシパルを IAM ロールに関連付けるロール バインディングのコレクションが含まれています。ロール バインディングは、許可ポリシーが接続されているリソースと、そのリソースのすべての子孫の両方のプリンシパルに、指定されたロールを付与します。許可ポリシーの詳細については、許可ポリシーについてをご覧ください。

プロジェクト、フォルダ、組織へのアクセスは、Trusted Cloud コンソール、Google Cloud CLI、REST API、または Resource Manager クライアント ライブラリを使用して管理できます。

始める前に

必要な IAM のロール

プロジェクト、フォルダ、または組織を作成すると、そのリソースのアクセスを管理できるロールが自動的に付与されます。詳細については、デフォルト ポリシーをご覧ください。

プロジェクト、フォルダ、または組織を作成していない場合は、そのリソースへのアクセスの管理に必要なロールがあることを確認してください。

プロジェクト、フォルダまたは組織へのアクセスを管理するために必要な権限を取得するには、アクセスを管理するリソース(プロジェクト、フォルダ、または組織)に対し、次の IAM ロールを付与するよう管理者に依頼してください。

  • プロジェクトへのアクセスを管理する: プロジェクトの IAM 管理者roles/resourcemanager.projectIamAdmin
  • フォルダへのアクセスを管理する: フォルダ管理者roles/resourcemanager.folderAdmin
  • プロジェクト、フォルダ、組織へのアクセスを管理する: 組織管理者roles/resourcemanager.organizationAdmin
  • ほぼすべての Trusted Cloud リソースへのアクセスを管理する: セキュリティ管理者roles/iam.securityAdmin

これらの事前定義ロールには、プロジェクト、フォルダ、組織へのアクセスの管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

プロジェクト、フォルダ、組織へのアクセスを管理するには、次の権限が必要です。

  • プロジェクトへのアクセスを管理する:
    • resourcemanager.projects.getIamPolicy
    • resourcemanager.projects.setIamPolicy
  • フォルダへのアクセスを管理する:
    • resourcemanager.folders.getIamPolicy
    • resourcemanager.folders.setIamPolicy
  • 組織へのアクセスを管理する:
    • resourcemanager.organizations.getIamPolicy
    • resourcemanager.organizations.setIamPolicy

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

現在のアクセス権を確認する

プロジェクト、フォルダ、組織にアクセスできるユーザーを表示するには、 Trusted Cloud コンソール、gcloud CLI、REST API、または Resource Manager クライアント ライブラリを使用します。

コンソール

  1. Trusted Cloud コンソールで、[IAM] ページに移動します。

    [IAM] に移動

  2. プロジェクト、フォルダ、または組織を選択します。

    Trusted Cloud コンソールには、プロジェクト、フォルダ、または組織のロールを付与されたすべてのプリンシパルが表示されます。このリストには、リソースに対するロールを親リソースから継承したプリンシパルも含まれています。ポリシー継承の詳細については、ポリシーの継承とリソース階層をご覧ください。

  3. 省略可: サービス エージェントに付与されたロールを表示するには、[ S3NS提供のロール付与を含みます] チェックボックスをオンにします。

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. プロジェクト、フォルダ、組織にアクセスできるユーザーを確認するには、リソースの許可ポリシーを取得します。許可ポリシーの解釈方法については、許可ポリシーについてをご覧ください。

    リソースの許可ポリシーを取得するには、リソースの get-iam-policy コマンドを実行します。

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    次の値を指定します。

    • RESOURCE_TYPE: アクセス権を表示するリソースのタイプ。projectsresource-manager foldersorganizations のいずれかの値を使用します。

    • RESOURCE_ID: Trusted Cloud プロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。

    • FORMAT: ポリシーの形式。json または yaml を使用します。

    • PATH: ポリシーの新しい出力ファイルのパス。

    たとえば、次のコマンドはプロジェクト my-project のポリシーを取得し、JSON 形式でホーム ディレクトリに保存します。

    gcloud projects get-iam-policy my-project --format=json > ~/policy.json
  3. C#

    Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

    Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

    プロジェクト、フォルダ、組織にアクセスできるユーザーを確認するには、リソースの許可ポリシーを取得します。許可ポリシーの解釈方法については、許可ポリシーについてをご覧ください。

    次の例は、プロジェクトの許可ポリシーを取得する方法を示しています。フォルダまたは組織の許可ポリシーを取得する方法については、ご使用のプログラミング言語の Resource Manager クライアント ライブラリのドキュメントをご覧ください。

    
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.CloudResourceManager.v1;
    using Google.Apis.CloudResourceManager.v1.Data;
    
    public partial class AccessManager
    {
        public static Policy GetPolicy(string projectId)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
            var service = new CloudResourceManagerService(
                new CloudResourceManagerService.Initializer
                {
                    HttpClientInitializer = credential
                });
    
            var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
                projectId).Execute();
            return policy;
        }
    }
    

    Java

    Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

    Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

    プロジェクト、フォルダ、組織にアクセスできるユーザーを確認するには、リソースの許可ポリシーを取得します。許可ポリシーの解釈方法については、許可ポリシーについてをご覧ください。

    次の例は、プロジェクトの許可ポリシーを取得する方法を示しています。フォルダまたは組織の許可ポリシーを取得する方法については、ご使用のプログラミング言語の Resource Manager クライアント ライブラリのドキュメントをご覧ください。

    import com.google.cloud.resourcemanager.v3.ProjectsClient;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.v1.GetIamPolicyRequest;
    import com.google.iam.v1.Policy;
    import java.io.IOException;
    
    public class GetProjectPolicy {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // TODO: Replace with your project ID.
        String projectId = "your-project-id";
    
        getProjectPolicy(projectId);
      }
    
      // Gets a project's policy.
      public static Policy getProjectPolicy(String projectId) throws IOException {
        // Initialize client that will be used to send requests.
        // This client only needs to be created once, and can be reused for multiple requests.
        try (ProjectsClient projectsClient = ProjectsClient.create()) {
          GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
                  .setResource(ProjectName.of(projectId).toString())
                  .build();
          return projectsClient.getIamPolicy(request);
        }
      }
    }

    Python

    Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

    Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

    プロジェクト、フォルダ、組織にアクセスできるユーザーを確認するには、リソースの許可ポリシーを取得します。許可ポリシーの解釈方法については、許可ポリシーについてをご覧ください。

    次の例は、プロジェクトの許可ポリシーを取得する方法を示しています。フォルダまたは組織の許可ポリシーを取得する方法については、ご使用のプログラミング言語の Resource Manager クライアント ライブラリのドキュメントをご覧ください。

    from google.cloud import resourcemanager_v3
    from google.iam.v1 import iam_policy_pb2, policy_pb2
    
    
    def get_project_policy(project_id: str) -> policy_pb2.Policy:
        """Get policy for project.
    
        project_id: ID or number of the Google Cloud project you want to use.
        """
    
        client = resourcemanager_v3.ProjectsClient()
        request = iam_policy_pb2.GetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
    
        policy = client.get_iam_policy(request)
        print(f"Policy retrieved: {policy}")
    
        return policy

    REST

    プロジェクト、フォルダ、組織にアクセスできるユーザーを確認するには、リソースの許可ポリシーを取得します。許可ポリシーの解釈方法については、許可ポリシーについてをご覧ください。

    Resource Manager API の getIamPolicy メソッドは、プロジェクト、フォルダ、または組織の許可ポリシーを取得します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • API_VERSION: 使用する API のバージョン。プロジェクトと組織の場合は、v1 を使用します。フォルダの場合は、v2 を使用します。
    • RESOURCE_TYPE: ポリシーを管理するリソースタイプ。値 projectsfolders、または organizations を使用します。
    • RESOURCE_ID: Trusted Cloudプロジェクト、組織、またはフォルダ ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
    • POLICY_VERSION: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。

    HTTP メソッドと URL:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

    リクエストの本文(JSON):

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    レスポンスには、リソースの許可ポリシーが含まれます。次に例を示します。

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

単一の IAM ロールを付与するまたは取り消す

Trusted Cloud コンソールまたは gcloud CLI では、リソースの許可ポリシーを直接編集することなく、1 つのプリンシパルに対して 1 つのロールをすぐに付与または取り消すことができます。一般的なタイプのプリンシパルには、サービス アカウント、Workforce Identity プールの ID、Workload Identity プールの ID があります。すべてのプリンシパル タイプの一覧については、プリンシパル タイプをご覧ください。

通常、ポリシーの変更は 2 分以内に有効になります。ただし、システム全体に変更が反映されるまでに 7 分以上かかることがあります。

最も適切な事前定義ロールを特定する必要がある場合は、適切な事前定義ロールを見つけるをご覧ください。

単一の IAM ロールを付与する

プリンシパルに 1 つのロールを付与する方法は次のとおりです。

コンソール

  1. Trusted Cloud コンソールで、[IAM] ページに移動します。

    [IAM] に移動

  2. プロジェクト、フォルダ、または組織を選択します。

  3. ロールを付与するプリンシパルを選択します。

    • リソースに対する他のロールをすでに持っているプリンシパルにロールを付与するには、プリンシパルを含む行を見つけて、その行で [プリンシパルを編集] をクリックし、[別のロールを追加] をクリックします。

      サービス エージェントにロールを付与するには、[S3NS提供のロール付与を含みます] チェックボックスをオンにして、メールアドレスを表示します。

    • リソースに対する既存のロールを持たないプリンシパルにロールを付与するには、 [アクセスを許可] をクリックし、プリンシパル ID//iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com//iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com など)を入力します。

  4. 付与するロールをプルダウン リストから選択します。最善のセキュリティを得るため、プリンシパルが必要とする権限のみを含むロールを選択してください。

  5. (省略可)ロールに条件を追加します。

  6. [保存] をクリックします。リソースのロールがプリンシパルに付与されます。

複数のプロジェクト、フォルダ、組織のプリンシパルにロールを付与するには、次のようにします。

  1. Trusted Cloud コンソールで [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. 権限を付与するプロジェクトをすべて選択します。

  3. 情報パネルが表示されていない場合は、[情報パネルを表示] をクリックします。次に、[権限] をクリックします。

  4. ロールを付与するプリンシパルを選択します。

    • 他のロールをすでに持っているプリンシパルにロールを付与するには、プリンシパルを含む行を見つけて、その行で [プリンシパルを編集] をクリックし、[別のロールを追加] をクリックします。
    • 他のロールを持たないプリンシパルにロールを付与するには、 [プリンシパルを追加] をクリックし、プリンシパル ID//iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com//iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com など)を入力します。
  5. 付与するロールをプルダウン リストから選択します。

  6. (省略可)ロールに条件を追加します。

  7. [保存] をクリックします。選択した各リソースで、選択したロールがプリンシパルに付与されます。

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. add-iam-policy-binding コマンドを使用すると、プリンシパルにロールをすばやく付与できます。

    後述のコマンドデータを使用する前に、次のように置き換えます。

    • RESOURCE_TYPE: アクセスを管理するリソースタイプ。projectsresource-manager folders、または organizations を使用します。

    • RESOURCE_ID: Trusted Cloud プロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。

    • PRINCIPAL: プリンシパルまたはメンバーの識別子。通常、PRINCIPAL_TYPE:ID の形式で指定します。 例: principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com または principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.comPRINCIPAL に使用できる値の一覧については、プリンシパル ID をご覧ください。

    • ROLE_NAME: 取り消すロールの名前。次のいずれかの形式で指定してください。

      • 事前定義ロール: roles/SERVICE.IDENTIFIER
      • プロジェクト レベルのカスタムロール: projects/PROJECT_ID/roles/IDENTIFIER
      • 組織レベルのカスタムロール: organizations/ORG_ID/roles/IDENTIFIER

      事前定義ロールのリストについては、ロールについてをご覧ください。

    • CONDITION: ロール バインディングに追加する条件。条件を追加しない場合は、値 None を使用します。条件の詳細については、条件の概要をご覧ください。

    次のコマンドを実行します。

    Linux、macOS、Cloud Shell

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL --role=ROLE_NAME \
        --condition=CONDITION

    Windows(PowerShell)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID `
        --member=PRINCIPAL --role=ROLE_NAME `
        --condition=CONDITION

    Windows(cmd.exe)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID ^
        --member=PRINCIPAL --role=ROLE_NAME ^
        --condition=CONDITION

    レスポンスには、更新された IAM ポリシーが含まれます。

単一の IAM ロールを取り消す

プリンシパルの 1 つのロールを取り消すには、次の手順を行います。

コンソール

  1. Trusted Cloud コンソールで、[IAM] ページに移動します。

    [IAM] に移動

  2. プロジェクト、フォルダ、または組織を選択します。

  3. アクセス権を取り消すプリンシパルを含む行を探します。その行の [プリンシパルを編集します] をクリックします。

  4. 取り消すロールの [削除] ボタンをクリックし、[保存] をクリックします。

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. ユーザーのロールをすばやく取り消すには、remove-iam-policy-binding コマンドを実行します。

    gcloud RESOURCE_TYPE remove-iam-policy-binding RESOURCE_ID 
    --member=PRINCIPAL --role=ROLE_NAME

    次の値を指定します。

    • RESOURCE_TYPE: アクセスを管理するリソースタイプ。projectsresource-manager folders、または organizations を使用します。

    • RESOURCE_ID: Trusted Cloud プロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。

    • PRINCIPAL: プリンシパルまたはメンバーの識別子。通常、PRINCIPAL_TYPE:ID の形式で指定します。 たとえば、principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.comprincipalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com です。

    • ROLE_NAME: 取り消すロールの名前。次のいずれかの形式で指定してください。

      • 事前定義ロール: roles/SERVICE.IDENTIFIER
      • プロジェクト レベルのカスタムロール: projects/PROJECT_ID/roles/IDENTIFIER
      • 組織レベルのカスタムロール: organizations/ORG_ID/roles/IDENTIFIER

      事前定義ロールのリストについては、ロールについてをご覧ください。

    たとえば、プロジェクト example-project のサービス アカウント example-service-account@example-project.s3ns.iam.gserviceaccount.com のプロジェクト作成者のロールを取り消すには、次のコマンドを使用します。

    gcloud projects remove-iam-policy-binding example-project 
    --member=serviceAccount:example-service-account@example-project.s3ns.iam.gserviceaccount.com
    --role=roles/resourcemanager.projectCreator

必要なロールを取り消さないように、変更リスクの推奨事項を有効にできます。変更リスクの推奨事項により、Trusted Cloud で重要とされているプロジェクト レベルのロールを取り消そうとすると、警告が生成されます。

Trusted Cloud コンソールで複数の IAM ロールを付与するまたは取り消す

Trusted Cloud コンソールを使用して、1 つのプリンシパルに複数のロールを付与したり、ロールを取り消したりすることができます。

  1. Trusted Cloud コンソールで、[IAM] ページに移動します。

    [IAM] に移動

  2. プロジェクト、フォルダ、または組織を選択します。

  3. ロールを変更するプリンシパルを選択します。

    • リソースに対するロールをすでに持っているプリンシパルのロールを変更するには、プリンシパルを含む行を見つけて、その行で [ プリンシパルを編集] をクリックし、[ 別のロールを追加] をクリックします。

      サービス エージェントのロールを変更する場合は、[ S3NS提供のロール付与を含みます] チェックボックスをオンにして、メールアドレスを表示します。

    • リソースに対するロールを持たないプリンシパルにロールを付与するには、 [アクセスを許可] をクリックし、プリンシパル ID//iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com//iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com など)を入力します。

  4. プリンシパルのロールを変更します。

    • リソースに対する既存のロールのないプリンシパルにロールを付与するには、[ロールを選択] をクリックし、プルダウン リストから付与するロールを選択します。
    • プリンシパルに追加のロールを付与するには、[別のロールを追加] をクリックして、プルダウン リストから付与するロールを選択します。
    • プリンシパルのロールの 1 つを別のロールに置き換えるには、既存のロールをクリックして、プルダウン リストから付与する別のロールを選択します。
    • プリンシパルのロールの 1 つを取り消すには、取り消すロールの [削除] ボタンをクリックします。

    ロールに条件を追加したり、ロールの条件の変更ロールの条件の削除を行うこともできます。

  5. [保存] をクリックします。

プログラムでの複数の IAM ロールの付与または取り消し

複数のプリンシパルに対する複数ロールの付与と取り消しを伴う大幅なアクセス権の変更を行うには、read-modify-write のパターンを使用して、リソースの許可ポリシーを更新します。

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

gcloud CLI、REST API、Resource Manager クライアント ライブラリを使用して許可ポリシーを更新できます。

通常、ポリシーの変更は 2 分以内に有効になります。ただし、システム全体に変更が反映されるまでに 7 分以上かかることがあります。

現在の許可ポリシーを取得する

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. リソースの許可ポリシーを取得するには、リソースの get-iam-policy コマンドを実行します。

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    次の値を指定します。

    • RESOURCE_TYPE: 許可ポリシーを取得するリソースのタイプ。projectsresource-manager foldersorganizations のいずれかを使用します。

    • RESOURCE_ID: Trusted Cloud プロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。

    • FORMAT: 許可ポリシーの形式。json または yaml を使用します。

    • PATH: 許可ポリシーの新しい出力ファイルのパス。

    たとえば、次のコマンドはプロジェクト my-project の許可ポリシーを取得し、JSON 形式でホーム ディレクトリに保存します。

    gcloud projects get-iam-policy my-project --format json > ~/policy.json
  3. C#

    Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

    Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

    次の例は、プロジェクトの許可ポリシーを取得する方法を示しています。フォルダまたは組織の許可ポリシーを取得する方法については、ご使用のプログラミング言語の Resource Manager クライアント ライブラリのドキュメントをご覧ください。

    
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.CloudResourceManager.v1;
    using Google.Apis.CloudResourceManager.v1.Data;
    
    public partial class AccessManager
    {
        public static Policy GetPolicy(string projectId)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
            var service = new CloudResourceManagerService(
                new CloudResourceManagerService.Initializer
                {
                    HttpClientInitializer = credential
                });
    
            var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
                projectId).Execute();
            return policy;
        }
    }
    

    Java

    Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

    Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

    次の例は、プロジェクトの許可ポリシーを取得する方法を示しています。フォルダまたは組織の許可ポリシーを取得する方法については、ご使用のプログラミング言語の Resource Manager クライアント ライブラリのドキュメントをご覧ください。

    import com.google.cloud.resourcemanager.v3.ProjectsClient;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.v1.GetIamPolicyRequest;
    import com.google.iam.v1.Policy;
    import java.io.IOException;
    
    public class GetProjectPolicy {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // TODO: Replace with your project ID.
        String projectId = "your-project-id";
    
        getProjectPolicy(projectId);
      }
    
      // Gets a project's policy.
      public static Policy getProjectPolicy(String projectId) throws IOException {
        // Initialize client that will be used to send requests.
        // This client only needs to be created once, and can be reused for multiple requests.
        try (ProjectsClient projectsClient = ProjectsClient.create()) {
          GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
                  .setResource(ProjectName.of(projectId).toString())
                  .build();
          return projectsClient.getIamPolicy(request);
        }
      }
    }

    Python

    Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

    Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

    次の例は、プロジェクトの許可ポリシーを取得する方法を示しています。フォルダまたは組織の許可ポリシーを取得する方法については、ご使用のプログラミング言語の Resource Manager クライアント ライブラリのドキュメントをご覧ください。

    from google.cloud import resourcemanager_v3
    from google.iam.v1 import iam_policy_pb2, policy_pb2
    
    
    def get_project_policy(project_id: str) -> policy_pb2.Policy:
        """Get policy for project.
    
        project_id: ID or number of the Google Cloud project you want to use.
        """
    
        client = resourcemanager_v3.ProjectsClient()
        request = iam_policy_pb2.GetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
    
        policy = client.get_iam_policy(request)
        print(f"Policy retrieved: {policy}")
    
        return policy

    REST

    Resource Manager API の getIamPolicy メソッドは、プロジェクト、フォルダ、または組織の許可ポリシーを取得します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • API_VERSION: 使用する API のバージョン。プロジェクトと組織の場合は、v1 を使用します。フォルダの場合は、v2 を使用します。
    • RESOURCE_TYPE: ポリシーを管理するリソースタイプ。値 projectsfolders、または organizations を使用します。
    • RESOURCE_ID: Trusted Cloudプロジェクト、組織、またはフォルダ ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
    • POLICY_VERSION: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。

    HTTP メソッドと URL:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

    リクエストの本文(JSON):

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    レスポンスには、リソースの許可ポリシーが含まれます。次に例を示します。

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

    レスポンスを適切なタイプ(json または yaml)のファイルに保存します。

許可ポリシーを変更する

ロールの付与または取り消しを反映するには、プログラムまたはテキスト エディタを使用して、リソースの許可ポリシーのローカルコピーを変更します。

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

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

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

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

  • ROLE_NAME: 付与するロールの名前。次のいずれかの形式で指定してください。

    • 事前定義ロール: roles/SERVICE.IDENTIFIER
    • プロジェクト レベルのカスタムロール: projects/PROJECT_ID/roles/IDENTIFIER
    • 組織レベルのカスタムロール: organizations/ORG_ID/roles/IDENTIFIER

    事前定義ロールのリストについては、ロールについてをご覧ください。

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

    通常、プリンシパル ID の形式は PRINCIPAL-TYPE:ID です。 たとえば、principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.comprincipalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com です。 PRINCIPAL に使用できる値の一覧については、プリンシパル ID をご覧ください。

  • CONDITIONS: 省略可。アクセスが許可されるタイミングを指定する条件

IAM ロールを付与する

プリンシパルにロールを付与するには、許可ポリシーのロール バインディングを変更します。付与できるロールについては、ロールについてまたはリソースに対して付与可能なロールの表示をご覧ください。最も適切な事前定義ロールを特定する必要がある場合は、適切な事前定義ロールを見つけるをご覧ください。

必要に応じて、条件を使用して特定の要件が満たされた場合にのみロールを付与できます。

すでに許可ポリシーに含まれているロールを付与するには、既存のロール バインディングにプリンシパルを追加します。

gcloud

プリンシパルを既存のロール バインディングに追加して、返された許可ポリシーを編集します。この変更は、更新された許可ポリシーを設定するまで有効になりません。

たとえば、許可ポリシーに次のロール バインディングが含まれていて、Kai にセキュリティ審査担当者ロール(roles/iam.securityReviewer)が付与されているとします。

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "principal://iam.googleapis.com/locations/global/workforcePools/example-pool/subject/kai@example.com"
  ]
}

同じロールを Raha に付与するには、Raha のプリンシパル ID を既存のロール バインディングに追加します。

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "principal://iam.googleapis.com/locations/global/workforcePools/example-pool/subject/kai@example.com",
    "principal://iam.googleapis.com/locations/global/workforcePools/example-pool/subject/raha@example.com"
  ]
}

C#

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddMember(Policy policy, string role, string member)
    {
        var binding = policy.Bindings.First(x => x.Role == role);
        binding.Members.Add(member);
        return policy;
    }
}

Go

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

import (
	"fmt"
	"io"

	"google.golang.org/api/iam/v1"
)

// addMember adds a member to a role binding.
func addMember(w io.Writer, policy *iam.Policy, role, member string) {
	for _, binding := range policy.Bindings {
		if binding.Role != role {
			continue
		}
		for _, m := range binding.Members {
			if m != member {
				continue
			}
			fmt.Fprintf(w, "Role %q found. Member already exists.\n", role)
			return
		}
		binding.Members = append(binding.Members, member)
		fmt.Fprintf(w, "Role %q found. Member added.\n", role)
		return
	}
	fmt.Fprintf(w, "Role %q not found. Member not added.\n", role)
}

Java

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import java.util.ArrayList;
import java.util.List;

public class AddMember {
  public static void main(String[] args) {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();
    // TODO: Replace with your role.
    String role = "roles/existing-role";
    // TODO: Replace with your principal.
    // For examples, see https://cloud.google.com/iam/docs/principal-identifiers
    String member = "principal-id";

    addMember(policy, role, member);
  }

  // Adds a principal to a pre-existing role.
  public static Policy addMember(Policy policy, String role, String member) {
    List<Binding> newBindingsList = new ArrayList<>();

    for (Binding b : policy.getBindingsList()) {
      if (b.getRole().equals(role)) {
        newBindingsList.add(b.toBuilder().addMembers(member).build());
      } else {
        newBindingsList.add(b);
      }
    }

    // Update the policy to add the principal.
    Policy updatedPolicy = policy.toBuilder()
            .clearBindings()
            .addAllBindings(newBindingsList)
            .build();

    System.out.println("Added principal: " + updatedPolicy.getBindingsList());

    return updatedPolicy;
  }
}

Python

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

from google.iam.v1 import policy_pb2
from snippets.get_policy import get_project_policy
from snippets.set_policy import set_project_policy


def modify_policy_add_principal(
    project_id: str, role: str, principal: str
) -> policy_pb2.Policy:
    """Add a principal to certain role in project policy.

    project_id: ID or number of the Google Cloud project you want to use.
    role: role to which principal need to be added.
    principal: The principal requesting access.

    For principal ID formats, see https://cloud.google.com/iam/docs/principal-identifiers
    """
    policy = get_project_policy(project_id)

    for bind in policy.bindings:
        if bind.role == role:
            bind.members.append(principal)
            break

    return set_project_policy(project_id, policy)

REST

プリンシパルを既存のロール バインディングに追加して、返された許可ポリシーを編集します。この変更は、更新された許可ポリシーを設定するまで有効になりません。

たとえば、許可ポリシーに次のロール バインディングが含まれていて、Kai にセキュリティ審査担当者ロール(roles/iam.securityReviewer)が付与されているとします。

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "principal://iam.googleapis.com/locations/global/workforcePools/example-pool/subject/kai@example.com"
  ]
}

同じロールを Raha に付与するには、Raha のプリンシパル ID を既存のロール バインディングに追加します。

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "principal://iam.googleapis.com/locations/global/workforcePools/example-pool/subject/kai@example.com",
    "principal://iam.googleapis.com/locations/global/workforcePools/example-pool/subject/raha@example.com"
  ]
}

まだ許可ポリシーに含まれていないロールを付与するには、新しいロール バインディングを追加します。

gcloud

プリンシパルにロールを付与する新しいロール バインディングを追加して、許可ポリシーを編集します。この変更は、更新された許可ポリシーを設定するまで有効になりません。

たとえば、Compute ストレージ管理者ロール(roles/compute.storageAdmin)を Raha に付与するには、許可ポリシーの bindings 配列に次のロール バインディングを追加します。

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "principal://iam.googleapis.com/locations/global/workforcePools/example-pool/subject/raha@example.com"
  ]
}

C#

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C# API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。


using System.Collections.Generic;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddBinding(Policy policy, string role, string member)
    {
        var binding = new Binding
        {
            Role = role,
            Members = new List<string> { member }
        };
        policy.Bindings.Add(binding);
        return policy;
    }
}

Java

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。


import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import java.util.Collections;
import java.util.List;

public class AddBinding {
  public static void main(String[] args) {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your policy: GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();
    // TODO: Replace with your role.
    String role = "roles/role-to-add";
    // TODO: Replace with your principals.
    // For examples, see https://cloud.google.com/iam/docs/principal-identifiers
    List<String> members = Collections.singletonList("principal-id");

    addBinding(policy, role, members);
  }

  // Adds a principals to a role.
  public static Policy addBinding(Policy policy, String role, List<String> members) {
    Binding binding = Binding.newBuilder()
            .setRole(role)
            .addAllMembers(members)
            .build();

    // Update bindings for the policy.
    Policy updatedPolicy = policy.toBuilder().addBindings(binding).build();

    System.out.println("Added binding: " + updatedPolicy.getBindingsList());

    return updatedPolicy;
  }
}

Python

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

def modify_policy_add_role(policy: dict, role: str, principal: str) -> dict:
    """Adds a new role binding to a policy."""

    binding = {"role": role, "members": [principal]}
    policy["bindings"].append(binding)
    print(policy)
    return policy

REST

プリンシパルにロールを付与する新しいロール バインディングを追加して、許可ポリシーを編集します。この変更は、更新された許可ポリシーを設定するまで有効になりません。

たとえば、Compute ストレージ管理者ロール(roles/compute.storageAdmin)を Raha に付与するには、許可ポリシーの bindings 配列に次のロール バインディングを追加します。

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "principal://iam.googleapis.com/locations/global/workforcePools/example-pool/subject/raha@example.com"
  ]
}

アクティブ化された API サービスに関連するロールのみを付与できます。Compute Engine などのサービスが有効でない場合は、Compute Engine のみに関連する役割を付与することはできません。詳細については、API を有効または無効にするをご覧ください。

プロジェクトに権限を付与する場合、特にオーナーロール(roles/owner)を付与するときには、いくつかの制約があります。詳細については、projects.setIamPolicy() リファレンス ドキュメントをご覧ください。

IAM ロールを取り消す

ロールを取り消すには、ロール バインディングからプリンシパルを削除します。ロール バインディングに他のプリンシパルがない場合は、ロール バインディング全体を削除します。

gcloud

get-iam-policy コマンドで返された JSON または YAML 許可ポリシーを編集して、ロールを取り消します。この変更は、更新された許可ポリシーを設定するまで有効になりません。

プリンシパルのロールを取り消すには、許可ポリシーの bindings 配列からプリンシパルまたはバインディングを削除します。

C#

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM C# API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy RemoveMember(Policy policy, string role, string member)
    {
        try
        {
            var binding = policy.Bindings.First(x => x.Role == role);
            if (binding.Members.Count != 0 && binding.Members.Contains(member))
            {
                binding.Members.Remove(member);
            }
            if (binding.Members.Count == 0)
            {
                policy.Bindings.Remove(binding);
            }
            return policy;
        }
        catch (System.InvalidOperationException e)
        {
            System.Diagnostics.Debug.WriteLine("Role does not exist in policy: \n" + e.ToString());
            return policy;
        }
    }
}

Go

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

import (
	"fmt"
	"io"

	"google.golang.org/api/iam/v1"
)

// removeMember removes a member from a role binding.
func removeMember(w io.Writer, policy *iam.Policy, role, member string) {
	bindings := policy.Bindings
	bindingIndex, memberIndex := -1, -1
	for bIdx := range bindings {
		if bindings[bIdx].Role != role {
			continue
		}
		bindingIndex = bIdx
		for mIdx := range bindings[bindingIndex].Members {
			if bindings[bindingIndex].Members[mIdx] != member {
				continue
			}
			memberIndex = mIdx
			break
		}
	}
	if bindingIndex == -1 {
		fmt.Fprintf(w, "Role %q not found. Member not removed.\n", role)
		return
	}
	if memberIndex == -1 {
		fmt.Fprintf(w, "Role %q found. Member not found.\n", role)
		return
	}

	members := removeIdx(bindings[bindingIndex].Members, memberIndex)
	bindings[bindingIndex].Members = members
	if len(members) == 0 {
		bindings = removeIdx(bindings, bindingIndex)
		policy.Bindings = bindings
	}
	fmt.Fprintf(w, "Role %q found. Member removed.\n", role)
}

// removeIdx removes arr[idx] from arr.
func removeIdx[T any](arr []T, idx int) []T {
	return append(arr[:idx], arr[idx+1:]...)
}

Java

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class RemoveMember {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();
    // TODO: Replace with your role.
    String role = "roles/existing-role";
    // TODO: Replace with your principal.
    // For examples, see https://cloud.google.com/iam/docs/principal-identifiers
    String member = "principal-id";

    removeMember(policy, role, member);
  }

  // Removes principal from a role; removes binding if binding contains no members.
  public static Policy removeMember(Policy policy, String role, String member) {
    // Creating new builder with all values copied from origin policy
    Policy.Builder policyBuilder = policy.toBuilder();

    // Getting binding with suitable role.
    Binding binding = null;
    for (Binding b : policy.getBindingsList()) {
      if (b.getRole().equals(role)) {
        binding = b;
        break;
      }
    }

    if (binding != null && binding.getMembersList().contains(member)) {
      List<String> newMemberList = new ArrayList<>(binding.getMembersList());
      // Removing principal from the role
      newMemberList.remove(member);

      System.out.println("Member " + member + " removed from " + role);

      // Adding all remaining principals to create new binding
      Binding newBinding = binding.toBuilder()
              .clearMembers()
              .addAllMembers(newMemberList)
              .build();

      List<Binding> newBindingList = new ArrayList<>(policyBuilder.getBindingsList());

      // Removing old binding to replace with new one
      newBindingList.remove(binding);

      // If binding has no more members, binding will not be added
      if (!newBinding.getMembersList().isEmpty()) {
        newBindingList.add(newBinding);
      }

      // Update the policy to remove the principal.
      policyBuilder.clearBindings()
              .addAllBindings(newBindingList);
    }

    Policy updatedPolicy = policyBuilder.build();

    System.out.println("Exising principals: " + updatedPolicy.getBindingsList());

    return updatedPolicy;
  }
}

Python

IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。

IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

コードサンプルを実行する前に、GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境変数を s3nsapis.fr に設定します。

Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

from google.iam.v1 import policy_pb2
from snippets.get_policy import get_project_policy
from snippets.set_policy import set_project_policy


def modify_policy_remove_principal(
    project_id: str, role: str, principal: str
) -> policy_pb2.Policy:
    """Remove a principal from certain role in project policy.

    project_id: ID or number of the Google Cloud project you want to use.
    role: role to revoke.
    principal: The principal to revoke access from.

    For principal ID formats, see https://cloud.google.com/iam/docs/principal-identifiers
    """
    policy = get_project_policy(project_id)

    for bind in policy.bindings:
        if bind.role == role:
            if principal in bind.members:
                bind.members.remove(principal)
            break

    return set_project_policy(project_id, policy, False)

REST

get-iam-policy コマンドで返された JSON または YAML 許可ポリシーを編集して、ロールを取り消します。この変更は、更新された許可ポリシーを設定するまで有効になりません。

プリンシパルのロールを取り消すには、許可ポリシーの bindings 配列からプリンシパルまたはバインディングを削除します。

許可ポリシーを設定する

ロールを付与または取り消すように許可ポリシーを変更した後、setIamPolicy() を呼び出して更新します。

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. リソースの許可ポリシーを設定するには、リソースの set-iam-policy コマンドを実行します。

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    次の値を指定します。

    • RESOURCE_TYPE: 許可ポリシーを設定するリソースのタイプ。projectsresource-manager foldersorganizations のいずれかを使用します。

    • RESOURCE_ID: Trusted Cloud プロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。

    • PATH: 新しい許可ポリシーを含むファイルのパス。

    レスポンスには、更新された許可ポリシーが含まれます。

    たとえば、次のコマンドは、policy.json に保存されている許可ポリシーをプロジェクト my-project の許可ポリシーとして設定します。

    gcloud projects set-iam-policy my-project ~/policy.json
  3. C#

    
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.CloudResourceManager.v1;
    using Google.Apis.CloudResourceManager.v1.Data;
    
    public partial class AccessManager
    {
        public static Policy SetPolicy(string projectId, Policy policy)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
            var service = new CloudResourceManagerService(
                new CloudResourceManagerService.Initializer
                {
                    HttpClientInitializer = credential
                });
    
            return service.Projects.SetIamPolicy(new SetIamPolicyRequest
            {
                Policy = policy
            }, projectId).Execute();
        }
    }
    

    Java

    Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

    Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

    次の例は、プロジェクトの許可ポリシーを設定する方法を示しています。フォルダまたは組織の許可ポリシーを設定する方法については、ご使用のプログラミング言語の Resource Manager クライアント ライブラリのドキュメントをご覧ください。

    import com.google.cloud.resourcemanager.v3.ProjectsClient;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.v1.Policy;
    import com.google.iam.v1.SetIamPolicyRequest;
    import com.google.protobuf.FieldMask;
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.List;
    
    public class SetProjectPolicy {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // TODO: Replace with your project ID.
        String projectId = "your-project-id";
        // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
        Policy policy = Policy.newBuilder().build();
    
        setProjectPolicy(policy, projectId);
      }
    
      // Sets a project's policy.
      public static Policy setProjectPolicy(Policy policy, String projectId)
              throws IOException {
    
        // Initialize client that will be used to send requests.
        // This client only needs to be created once, and can be reused for multiple requests.
        try (ProjectsClient projectsClient = ProjectsClient.create()) {
          List<String> paths = Arrays.asList("bindings", "etag");
          SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
                  .setResource(ProjectName.of(projectId).toString())
                  .setPolicy(policy)
                  // A FieldMask specifying which fields of the policy to modify. Only
                  // the fields in the mask will be modified. If no mask is provided, the
                  // following default mask is used:
                  // `paths: "bindings, etag"`
                  .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
                  .build();
    
          return projectsClient.setIamPolicy(request);
        }
      }
    }

    Python

    Resource Manager に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

    Resource Manager 用のクライアント ライブラリをインストールして使用する方法については、Resource Manager クライアント ライブラリをご覧ください。

    次の例は、プロジェクトの許可ポリシーを設定する方法を示しています。フォルダまたは組織の許可ポリシーを設定する方法については、ご使用のプログラミング言語の Resource Manager クライアント ライブラリのドキュメントをご覧ください。

    from google.cloud import resourcemanager_v3
    from google.iam.v1 import iam_policy_pb2, policy_pb2
    
    
    def set_project_policy(
        project_id: str, policy: policy_pb2.Policy, merge: bool = True
    ) -> policy_pb2.Policy:
        """
        Set policy for project. Pay attention that previous state will be completely rewritten.
        If you want to update only part of the policy follow the approach read->modify->write.
        For more details about policies check out https://cloud.google.com/iam/docs/policies
    
        project_id: ID or number of the Google Cloud project you want to use.
        policy: Policy which has to be set.
        merge: The strategy to be used forming the request. CopyFrom is clearing both mutable and immutable fields,
        when MergeFrom is replacing only immutable fields and extending mutable.
        https://googleapis.dev/python/protobuf/latest/google/protobuf/message.html#google.protobuf.message.Message.CopyFrom
        """
        client = resourcemanager_v3.ProjectsClient()
    
        request = iam_policy_pb2.GetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
        current_policy = client.get_iam_policy(request)
    
        # Etag should as fresh as possible to lower chance of collisions
        policy.ClearField("etag")
        if merge:
            current_policy.MergeFrom(policy)
        else:
            current_policy.CopyFrom(policy)
    
        request = iam_policy_pb2.SetIamPolicyRequest()
        request.resource = f"projects/{project_id}"
    
        # request.etag field also will be merged which means you are secured from collision,
        # but it means that request may fail and you need to leverage exponential retries approach
        # to be sure policy has been updated.
        request.policy.CopyFrom(current_policy)
    
        policy = client.set_iam_policy(request)
        return policy
    
    

    REST

    Resource Manager API の setIamPolicy メソッドを使用して、プロジェクト、フォルダまたは組織の新しい許可ポリシーとしてリクエストのポリシーを設定します。

    リクエストのデータを使用する前に、次のように置き換えます。

    • API_VERSION: 使用する API のバージョン。プロジェクトと組織の場合は、v1 を使用します。フォルダの場合は、v2 を使用します。
    • RESOURCE_TYPE: ポリシーを管理するリソースタイプ。値 projectsfolders、または organizations を使用します。
    • RESOURCE_ID: Trusted Cloudプロジェクト、組織、またはフォルダ ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
    • POLICY: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。

    HTTP メソッドと URL:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

    リクエストの本文(JSON):

    {
      "policy": POLICY
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    レスポンスには、更新された許可ポリシーが含まれます。

次のステップ