リソースに対して付与可能なロールの表示

リソースのユーザーに Identity and Access Management(IAM)のロールを付与する前に、特定のリソースに関して付与できるロールの種類について確認することをおすすめします。

始める前に

  • Enable the IAM 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 の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。

    C++

    ローカル開発環境でこのページの C++ サンプルを使用するには、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 の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。

    Go

    ローカル開発環境でこのページの Go サンプルを使用するには、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 を使用して認証するをご覧ください。

必要なロール

付与可能なロールを一覧表示するために必要な権限を取得するには、付与可能な権限を一覧表示するリソースに対するセキュリティ審査担当者roles/iam.securityReviewer)IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。

この事前定義ロールには、すべてのリソースタイプに対する getIamPolicy 権限が含まれています。付与可能なロールを一覧表示するには、付与可能なロールを一覧表示するリソースに対して getIamPolicy 権限が必要です。たとえば、プロジェクトに付与可能なロールを一覧表示するには、resourcemanager.projects.getIamPolicy 権限が必要です。

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

付与できるロールについて

該当するリソースタイプに関する権限がロールに含まれている場合は、そのリソースまたはそのリソースの上位に関するロールを付与できます。たとえば、storage.admin ロールでは storage.buckets.get API と storage.objects.get API に対する権限が付与されるため、このロールはストレージ バケットとストレージ オブジェクトのリソースタイプに関しても付与できます。

ロールは、そのロールに含まれる権限の定義対象となるリソースタイプの「上位」にも付与できます。つまり、下位レベルのリソースに対するロールは、Google Cloud のリソース階層でより上位のリソースに関しても付与できます。たとえば、storage.admin ロールはストレージ バケットに対してだけでなく、プロジェクト レベルまたは組織レベルでも付与できます。

ロールによって付与される権限は、指定したレベルとそれよりも下位のリソースにのみ影響します。上位レベルのリソースやピアリソースには影響しません。また、リソースにロールを付与する場合は、ロールの名前、説明、ロールに含まれるその他の権限にかかわらず、対象のリソースに該当する権限だけが付与されます。たとえば、ロール resourcemanager.organizationAdmin(権限 resourcemanager.projects.list を付与する)をプロジェクト レベルでユーザーに割り当てた場合、そのプロジェクトに対応する権限だけが付与されます。組織内のすべてのプロジェクトの一覧表示または管理を行うことはできません。同様に、特定の Compute Engine インスタンスに関する compute.admin ロールを割り当てた場合は、そのインスタンスに対応する権限だけが付与され、プロジェクト内の他のインスタンスに対する権限は付与されません。

付与可能なロールの一覧表示

付与可能なロールを一覧表示するには、Google Cloud コンソール、Google Cloud CLI、IAM API、または IAM クライアント ライブラリを使用します。

Google Cloud コンソールには、表示しているリソースに付与できるすべてのロールが常に表示されます。Google Cloud CLI、IAM API、クライアント ライブラリには、有効な API に付与できるロールのみが表示されます。

コンソール

プロジェクト、フォルダ、または組織に付与できるロールを表示するには、次の操作を行います。

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

    [IAM] ページに移動

  2. ページの上部にある [プロジェクトを選択] をクリックします。

  3. 付与可能なロールを表示するプロジェクト、フォルダ、または組織を選択します。

  4. [アクセスを許可] をクリックします。

  5. [ロールを選択] をクリックします。このメニューには、このリソースに関して付与可能なすべてのロール(カスタムロールを含む)が表示されます。

他のリソースタイプの付与可能なロールを表示するには、次の操作を行います。

  1. Google Cloud コンソールで、付与可能なロールを表示するリソースの一覧が表示されるページに移動します。

    たとえば、Compute Engine インスタンスへのアクセスを管理するには、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 付与可能なロールを表示するリソースの横にあるチェックボックスをオンにします。

  3. 情報パネルが表示されていることを確認します。表示されていない場合は、[情報パネルを表示] をクリックします。

  4. [プリンシパルを追加] をクリックします。

  5. [ロールを選択] をクリックします。このメニューには、このリソースに関して付与可能なすべてのロール(カスタムロールを含む)が表示されます。

gcloud

gcloud iam list-grantable-roles コマンドを使用すると、特定のリソースに適用可能なロールのリストが返されます。

gcloud iam list-grantable-roles full-resource-name

目的のリソースに応じて、多数のロールが返される可能性があります。結果数を制限するには、フィルタ式を指定できます。

出力は、以下のようになります。

description: Full control of all Compute Engine resources.
name: roles/compute.admin
title: Compute Admin
---
description: Full control of Compute Engine instance resources.
name: roles/compute.instanceAdmin
title: Compute Instance Admin

# Additional results here...

C++

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

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

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& resource) {
  iam::IAMClient client(iam::MakeIAMConnection());
  int count = 0;
  for (auto& role : client.QueryGrantableRoles(resource)) {
    if (!role) throw std::move(role).status();
    std::cout << "Role successfully retrieved: " << role->name() << "\n";
    ++count;
  }
  if (count == 0) {
    std::cout << "No grantable roles found in resource: " << resource << "\n";
  }
}

C#

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

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


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static IList<Role> ViewGrantableRoles(string fullResourceName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var request = new QueryGrantableRolesRequest
        {
            FullResourceName = fullResourceName
        };
        var response = service.Roles.QueryGrantableRoles(request).Execute();
        foreach (var role in response.Roles)
        {
            Console.WriteLine("Title: " + role.Title);
            Console.WriteLine("Name: " + role.Name);
            Console.WriteLine("Description: " + role.Description);
            Console.WriteLine();
        }
        return response.Roles;
    }
}

Go

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

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

import (
	"context"
	"fmt"
	"io"

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

// viewGrantableRoles lists roles grantable on a resource.
func viewGrantableRoles(w io.Writer, fullResourceName string) ([]*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	request := &iam.QueryGrantableRolesRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Roles.QueryGrantableRoles(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.QueryGrantableRoles: %w", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Found grantable role: %v\n", role.Name)
	}
	return response.Roles, err
}

Java

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

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

QueryGrantableRolesRequest request = new QueryGrantableRolesRequest();
request.setFullResourceName(fullResourceName);

QueryGrantableRolesResponse response = service.roles().queryGrantableRoles(request).execute();

for (Role role : response.getRoles()) {
  System.out.println("Title: " + role.getTitle());
  System.out.println("Name: " + role.getName());
  System.out.println("Description: " + role.getDescription());
  System.out.println();
}

Python

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

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

def view_grantable_roles(full_resource_name: str) -> None:
    roles = (
        service.roles()
        .queryGrantableRoles(body={"fullResourceName": full_resource_name})
        .execute()
    )

    for role in roles["roles"]:
        if "title" in role:
            print("Title: " + role["title"])
        print("Name: " + role["name"])
        if "description" in role:
            print("Description: " + role["description"])
        print(" ")

REST

roles.queryGrantableRoles メソッドは、あるリソースに対して付与可能なすべてのロールのリストを返します。

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

  • FULL_RESOURCE_NAME: サービス名とリソースへのパスで構成される URI。例については、完全なリソース名をご覧ください。

HTTP メソッドと URL:

POST https://iam.googleapis.com/v1/roles:queryGrantableRoles

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

{
  "fullResourceName": "FULL_RESOURCE_NAME"
}

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

次のような JSON レスポンスが返されます。

{
  "roles": [
    {
      "name": "roles/compute.admin",
      "title": "Compute Admin",
      "description": "Full control of all Compute Engine resources."
    },
    {
      "name": "roles/compute.instanceAdmin",
      "title": "Compute Instance Admin (beta)",
      "description": "Full control of Compute Engine instance resources."
    }
  ]
}

上の例では、完全リソース名は DNS と互換性のある API サービス名とリソースパスで構成される、スキームのない URI です。

たとえば、プロジェクトに関して付与できるすべてのロールを返すには、次のように入力します。

//cloudresourcemanager.googleapis.com/projects/project-id

下位レベルのリソースについては、さらに詳細な完全修飾名を指定することになります。たとえば、Compute Engine インスタンスに関して付与できるすべてのロールを返すには、次のように入力します。

//compute.googleapis.com/projects/project-id/zones/zone-name/instances/instance-id

次のステップ