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

このページでは、プロジェクト、フォルダ、組織へのアクセス権の付与、変更、取り消しを行う方法について説明します。他のリソースへのアクセスを管理する方法については、次のガイドをご覧ください。

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

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

始める前に

  • Enable the Resource Manager API.

    Enable the API

  • 認証を設定する。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google 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.

    C#

    ローカル開発環境でこのページの .NET サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    詳細については、Google Cloud の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。

    Java

    ローカル開発環境でこのページの Java サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    詳細については、Google Cloud の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。

    Python

    ローカル開発環境でこのページの Python サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    詳細については、Google Cloud の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

必要なロール

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

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

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

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

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

必要な権限

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

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

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

現在のアクセス権を表示する

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

Console

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

    [IAM] に移動

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

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

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

gcloud

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

    Activate Cloud Shell

    At the bottom of the Google 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: Google 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

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: Google 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": [
        "user:my-user@example.com"
      ]
    }
  ]
}

単一ロールの付与または取り消し

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

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

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

単一ロールの付与

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

Console

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

    [IAM] に移動

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

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

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

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

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

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

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

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

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

  1. Google Cloud Console で、[リソースの管理] ページに移動します。

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

  2. 権限を付与するリソースをすべて選択します。

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

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

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

    • 他のロールを持たないプリンシパルにロールを付与するには、[ プリンシパルを追加] をクリックし、プリンシパルの ID(my-user@example.com など)を入力します。

  5. 付与するロールをプルダウン リストから選択します。

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

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

gcloud

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

    Activate Cloud Shell

    At the bottom of the Google 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: Google Cloud プロジェクト、フォルダ、または組織 ID。プロジェクト ID は英数字です(例: my-project)。 フォルダ ID と組織 ID は数値です(例: 123456789012)。

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

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

    • 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 ポリシーが含まれます。

単一ロールの取り消し

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

Console

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

    IAM に移動

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

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

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

gcloud

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

    Activate Cloud Shell

    At the bottom of the Google 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: Google Cloud プロジェクト、フォルダ、または組織 ID。プロジェクト ID は英数字です(例: my-project)。 フォルダ ID と組織 ID は数値です(例: 123456789012)。

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

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

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

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

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

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

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

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

Google Cloud コンソールでの複数のロールの付与または取り消し

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

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

    IAM に移動

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

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

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

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

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

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

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

    また、ロールへの条件の追加や、ロールの条件の変更ロールの条件の削除を行うことができます。

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

プログラムによる複数ロールの付与または取り消し

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

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

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

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

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

gcloud

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

    Activate Cloud Shell

    At the bottom of the Google 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: Google 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

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: Google 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": [
        "user: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。

    通常、プリンシパル識別子は、PRINCIPAL-TYPE:ID の形式になります。例: user:my-user@example.comPRINCIPAL に使用できる値の一覧については、プリンシパル識別子をご覧ください。

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

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

ロールを付与する

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

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

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

gcloud

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

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

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com"
  ]
}

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

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com",
    "user: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 member.
    String member = "user:member-to-add@example.com";

    addMember(policy, role, member);
  }

  // Adds a member 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 member.
    Policy updatedPolicy = policy.toBuilder()
            .clearBindings()
            .addAllBindings(newBindingsList)
            .build();

    System.out.println("Added member: " + 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_member(
    project_id: str, role: str, member: str
) -> policy_pb2.Policy:
    """
    Add a member to certain role in project policy.

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

    Possible format for member:
        * user:{emailid}
        * serviceAccount:{emailid}
        * group:{emailid}
        * deleted:user:{emailid}?uid={uniqueid}
        * deleted:serviceAccount:{emailid}?uid={uniqueid}
        * deleted:group:{emailid}?uid={uniqueid}
        * domain:{domain}
    """
    policy = get_project_policy(project_id)

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

    return set_project_policy(project_id, policy)

REST

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

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

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com"
  ]
}

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

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

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

gcloud

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

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

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

C#

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

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

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

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 members.
    List<String> members = Collections.singletonList("user:member-to-add@example.com");

    addBinding(policy, role, members);
  }

  // Adds a member 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 で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。

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

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

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

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

REST

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

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

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

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

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

ロールを取り消す

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

gcloud

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

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

C#

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

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

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

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

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 member.
    String member = "user:member-to-add@example.com";

    removeMember(policy, role, member);
  }

  // Removes member 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 member from a role
      newMemberList.remove(member);

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

      // Adding all remaining members 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 member.
      policyBuilder.clearBindings()
              .addAllBindings(newBindingList);
    }

    Policy updatedPolicy = policyBuilder.build();

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

    return updatedPolicy;
  }
}

Python

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

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

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_member(
    project_id: str, role: str, member: str
) -> policy_pb2.Policy:
    """
    Remove a member from certain role in project policy.

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

    Possible format for member:
        * user:{emailid}
        * serviceAccount:{emailid}
        * group:{emailid}
        * deleted:user:{emailid}?uid={uniqueid}
        * deleted:serviceAccount:{emailid}?uid={uniqueid}
        * deleted:group:{emailid}?uid={uniqueid}
        * domain:{domain}
    """
    policy = get_project_policy(project_id)

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

    return set_project_policy(project_id, policy, False)

REST

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

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

許可ポリシーを設定する

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

gcloud

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

    Activate Cloud Shell

    At the bottom of the Google 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: Google Cloud プロジェクト、フォルダ、または組織 ID。プロジェクト ID は英数字です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。

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

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

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

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

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: Google 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
}

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

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

次のステップ

使ってみる

Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。

無料で開始