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

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

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

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

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

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

付与できるロールの一覧表示

付与可能なロールを一覧表示する前に、プロジェクトでサービスが有効になっていることを確認してください。サービスが有効になっていない場合、そのロールは返されません。

Console

  1. Cloud Console で [IAM] ページに移動します。

    [IAM] ページに移動

  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...

REST API

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."
    }
  ]
}

C#

このサンプルを試す前に、IAM クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、IAM C# API のリファレンス ドキュメントをご覧ください。


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 クイックスタート: クライアント ライブラリの使用の Go の手順に従って設定を行ってください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。

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: %v", err)
	}

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

Java

このサンプルを試す前に、IAM クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。

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 クイックスタート: クライアント ライブラリの使用の Python の手順に従って設定を行ってください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。

def view_grantable_roles(full_resource_name):
    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(' ')

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

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

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

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

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

次のステップ