カスタム役割の作成と管理

このページでは、カスタムの役割を作成し、管理する方法について説明します。

始める前に

  • カスタムの役割の作成に必要な権限とベスト プラクティスに関する情報を含む IAM のカスタムの役割についてをお読みください。
  • gcloud コマンドライン ユーティリティを使用する場合は、バージョン 188.0.0 以降を使用していることを確認してください。gcloud をバージョン 188.0.0 に更新するには、gcloud components update --version 188.0.0 コマンドを実行します。

リソースで使用可能な権限の表示

カスタムの役割を作成する前に、リソースに適用できる権限を確認したい場合があります。リソースとその下位にあるリソースに適用可能な権限を確認するには、gcloud コマンドライン ツール、Cloud Console または IAM API を使用します。たとえば、組織と組織内のプロジェクトに適用できるすべての権限を確認できます。

Console

  1. Cloud Console の [役割] ページに移動します。

    [役割] ページを開く

  2. ページの上部にあるプルダウンからプロジェクトを選択します。
  3. リソースの管理者役割のチェックボックスを選択して、このリソースに適用可能なすべての権限を表示します。たとえば、Compute インスタンス管理者役割を選択すると、Compute Engine インスタンスに適用可能なすべての権限が右側のパネルに表示されます。

gcloud コマンド

gcloud iam list-testable-permissions コマンドを使用して、対象のリソースに適用可能な権限のリストを取得します。返される権限は、このリソースおよび階層内でそれより下のリソースに対してカスタムの役割を作成するのに使用できる権限です。

次の例では、プロジェクト リソースに対してテスト可能な権限を一覧表示する方法を示します。

gcloud iam list-testable-permissions [PROJECT-ID]

[PROJECT-ID] はプロジェクトの ID です。リソース名の完全名(//cloudresourcemanager.googleapis.com/projects/PROJECT-ID)の形式で指定します。例: //cloudresourcemanager.googleapis.com/projects/my-project-id

list-testable-permissions コマンドから何百もの結果が返されることがあります。結果数を制限するために、フィルタ式を指定することもできます。次に、結果が短縮された例を示します。

---
name: appengine.applications.create
stage: GA
---
customRolesSupportLevel: TESTING
name: appengine.applications.disable
stage: GA
---
name: appengine.applications.get
stage: GA
---
customRolesSupportLevel: NOT_SUPPORTED
name: appengine.applications.list
onlyInPredefinedRoles: true
stage: GA
---
name: appengine.applications.update
stage: GA
---
name: appengine.instances.delete
stage: GA
---
name: appengine.instances.get
stage: GA
---

各権限は、カスタムの役割でサポートされるかどうかを示すことに注意してください。サポートされている権限とサポートされていない権限の一覧については、[カスタム役割の権限のサポート](/iam/docs/custom-roles-permissions-support)をご覧ください。

REST API

QueryTestablePermissions は、リソースに適用できるすべての権限を返します。返される権限は、このリソースおよびその下の階層内のリソースでカスタムの役割を作成するのに使用できる権限です。リクエストに必要なパラメータは、//cloudresourcemanager.googleapis.com/projects/my-project` などの完全なリソース名のみです。

リソースに権限の長いリストが含まれる場合、呼び出し元は、必要に応じてページ設定のサポートを提供できます。

full_resource_name: '//cloudresourcemanager.googleapis.com/projects/my-project'

エラーコード

エラーコード ステータス メッセージ
INVALID_ARGUMENT 0〜100 の値にする必要があります。
INVALID_ARGUMENT ページ設定トークンのエンコードが無効です。
INVALID_ARGUMENT ページ設定トークンが無効です。
INVALID_ARGUMENT ページ設定トークンが、指定されたコンテナ用ではありません。
INVALID_ARGUMENT ページ設定トークンの開始点が無効です。
INVALID_ARGUMENT ページ設定トークンの Cookie が無効です。
INVALID_ARGUMENT ページ設定トークンの期限が切れています。
INVALID_ARGUMENT {full_resource_name} を指定する必要があります。
INVALID_ARGUMENT {full_resource_name}//[a-z0-9.-]/.a-z0-9.-]/ と一致しません。

C#

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の C# の設定手順に従ってください。 詳細については、Cloud 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<Permission> QueryTestablePermissions(
        string fullResourceName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var request = new QueryTestablePermissionsRequest
        {
            FullResourceName = fullResourceName
        };
        var response = service.Permissions.QueryTestablePermissions(request)
            .Execute();
        foreach (var p in response.Permissions)
        {
            Console.WriteLine(p.Name);
        }
        return response.Permissions;
    }
}

Go

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

import (
	"context"
	"fmt"
	"io"

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

// queryTestablePermissions lists testable permissions on a resource.
func queryTestablePermissions(w io.Writer, fullResourceName string) ([]*iam.Permission, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", err)
	}

	request := &iam.QueryTestablePermissionsRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Permissions.QueryTestablePermissions(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Permissions.QueryTestablePermissions: %v", err)
	}
	for _, p := range response.Permissions {
		fmt.Fprintf(w, "Found permissions: %v", p.Name)
	}
	return response.Permissions, nil
}

Python

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

def query_testable_permissions(resource):
    """Lists valid permissions for a resource."""

    # pylint: disable=no-member
    permissions = service.permissions().queryTestablePermissions(body={
        'fullResourceName': resource
    }).execute()['permissions']
    for p in permissions:
        print(p['name'])

役割メタデータの取得

カスタムの役割を作成する前に、事前定義済みの役割とカスタムの役割の両方のメタデータを取得したい場合があります。役割メタデータには、その役割の ID と権限が含まれます。メタデータを表示するには、Google Cloud Platform Console または IAM API を使用します。

役割メタデータを表示するには、次のいずれかの方法で行います。

Console

  1. Cloud Console の [役割] ページに移動します。

    [役割] ページを開く

  2. ページの上部にあるプルダウンから組織またはプロジェクトを選択します。
  3. 1 つ以上の役割のチェックボックスを選択して、役割の権限を表示します。役割に含まれている権限があれば、右側のパネルに表示されます。

役割の横にあるアイコンは役割の種類を表します。カスタム役割の場合には、工場のアイコンが、事前定義役割の場合には六角形のアイコンが表示されます。

役割アイコン

特定の権限に含まれる役割をすべて検索するには、[役割] リストの上部にある [フィルタ] ボックスに権限名を入力します。

gcloud コマンド

gcloud iam roles describe コマンドを使用して、事前定義の役割とカスタム役割のメタデータを表示します。

事前定義の役割のメタデータを表示するには、gcloud コマンドを実行します。

gcloud iam roles describe [ROLE-NAME]

[ROLE-NAME] は役割の名前です(たとえば、roles/viewer)。

次の例に、describe が事前定義の役割 roles/iam.roleViewer で実行された場合の出力の例を示します。

gcloud iam roles describe roles/iam.roleViewer
description: Read access to all custom roles in the project.
etag: AA==
includedPermissions:
- iam.roles.get
- iam.roles.list
- resourcemanager.projects.get
- resourcemanager.projects.getIamPolicy
name: roles/iam.roleViewer
stage: GA
title: Role Viewer

カスタムの役割のメタデータを表示するには、まずカスタムの役割が組織レベルで作成されたか、プロジェクト レベルで作成されたかを判断します。組織レベルでカスタムの役割が作成されている場合は、次の gcloud コマンドを実行します。

gcloud iam roles describe --organization [ORGANIZATION-ID] [ROLE-NAME]

[ORGANIZATION-ID] は、1234567 の形式の組織 ID です。[ROLE-NAME] は、カスタム役割の名前です(たとえば、myCustomRole)。

プロジェクト レベルのカスタム役割のメタデータを表示するには、次の gcloud コマンドを実行します。

gcloud iam roles describe --project [PROJECT-ID] [ROLE-NAME]

[PROJECT-ID] は、プロジェクトの ID です(たとえば、my-project-id)。[ROLE-NAME] は、カスタム役割の名前です(たとえば、myCustomRole)。

詳しくは、gcloud iam roles describe のリファレンス ドキュメントをご覧ください。

REST API

表示する役割の役割名がわかっている場合は、roles.get メソッドを使用してカスタムの役割を取得します。役割名がわからない場合は、roles.list メソッドを使用して、組織やプロジェクト内のすべてのカスタムの役割を一覧表示します。

GetRole(), を呼び出すには、GetRoleRequest に次のフィールドを設定します。

  • 役割の名前(roles/{ROLE-NAME}organizations/{ORGANIZATION-ID}/roles/{ROLE-NAME} など)。

ListRoles() を呼び出すには、ListRolesRequest に次のフィールドを設定します。

  • すべてのカスタム役割を取得する親(たとえば、organizations/{ORGANIZATION-ID}projects/{PROJECT-ID})。

エラーコード

エラーコード ステータス メッセージ
PERMISSION_DENIED {path} で役割を取得する権限がありません。
NOT_FOUND {role} という名前の役割が見つかりませんでした。
INVALID_ARGUMENT 役割名は、roles/{role} または organizations/{organization-id}/roles/{role} の形式で指定してください。
PERMISSION_DENIED {path} の役割を一覧表示する権限がありません。
INVALID_ARGUMENT {path} が無効です。親は、organizations/{organization-id} の形式にするか、空白に必要があります。
INVALID_ARGUMENT 役割ビューが無効です。

C#

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


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

public partial class CustomRoles
{
    public static Role GetRole(string name)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var role = service.Roles.Get(name).Execute();
        Console.WriteLine(role.Name);
        Console.WriteLine(String.Join(", ", role.IncludedPermissions));
        return role;
    }
}

Go

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

import (
	"context"
	"fmt"
	"io"

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

// getRole gets role metadata.
func getRole(w io.Writer, name string) (*iam.Role, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", err)
	}

	role, err := service.Roles.Get(name).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.Get: %v", err)
	}
	fmt.Fprintf(w, "Got role: %v\n", role.Name)
	for _, permission := range role.IncludedPermissions {
		fmt.Fprintf(w, "Got permission: %v\n", permission)
	}
	return role, nil
}

Python

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

def get_role(name):
    """Gets a role."""

    # pylint: disable=no-member
    role = service.roles().get(name=name).execute()
    print(role['name'])
    for permission in role['includedPermissions']:
        print(permission)

カスタムの役割の作成

カスタム役割を作成するには、呼び出し元が iam.roles.create 権限を所有している必要があります。デフォルトでは、プロジェクトや組織のオーナーがこの権限を持ち、カスタムの役割を作成し、管理できます。

オーナー以外のユーザー(組織管理者を含む)には、組織の役割の管理者の役割または IAM 役割の管理者の役割のいずれかを割り当てる必要があります。

Console

最初から新しいカスタムの役割を作成するには:

  1. Cloud Console の [役割] ページに移動します。

    [役割] ページを開く

  2. [組織] プルダウンから組織を選択します。
  3. [役割の作成] をクリックします。
  4. 役割の名前、タイトル、説明を入力します。
  5. [権限を追加] をクリックします。
  6. 役割に含める権限を選択し、[権限を追加] をクリックします。[すべてのサービス] と [すべてのタイプ] プルダウンを使用して、サービスとタイプ別に権限をフィルタリングして選択します。

事前定義された既存の役割に基づいてカスタムの役割を作成するには:

  1. Cloud Console の [役割] ページに移動します。

    [役割] ページを開く

  2. [組織] プルダウンから組織を選択します。
  3. 新しいカスタムの役割のベースにする役割を選択します。
  4. [選択から役割を作成] をクリックします。
  5. 役割の名前、タイトル、説明を入力します。
  6. 役割から除外する権限のチェックボックスをオフにします。
  7. [権限を追加] をクリックして権限を追加します。
  8. [作成] をクリックします。

gcloud コマンド

gcloud iam roles create を使用して、新しいカスタム役割を作成します。このコマンドは次の 2 つの方法で使用できます。

  • 役割の定義が含まれる YAML ファイルを使用する
  • フラグを使用して役割の定義を指定する

カスタムの役割を作成するには、--organization [ORGANIZATION-ID] または --project [PROJECT-ID] フラグを指定して、役割を組織レベルまたはプロジェクト レベルに適用するかを指定する必要があります。下の各例では、プロジェクト レベルでカスタムの役割を作成します。

YAML ファイルを使用してカスタムの役割を作成するには:

カスタムの役割の定義が含まれる YAML ファイルを作成します。 ファイルは、アプリをデプロイする際にアップロードする必要があります。

title: [ROLE-TITLE]
description: [ROLE-DESCRIPTION]
stage: [LAUNCH-STAGE]
includedPermissions:
- [PERMISSION-1]
- [PERMISSION-2]

以下では、各プレースホルダ値について説明します。

  • [ROLE-TITLE] は、役割のわかりやすいタイトルです(たとえば、"Role Viewer")。
  • [ROLE-DESCRIPTION] は、役割に関する簡単な説明です(たとえば、"My custom role description")。
  • [LAUNCH-STAGE] は、リリースのライフサイクルにおける役割の段階を示します(たとえば、ALPHABETAGA)。
  • includedPermissions には、カスタム役割に含める 1 つ以上の権限のリストを指定します(たとえば、- iam.roles.get)。

YAML ファイルを保存して、次の gcloud コマンドを実行します。

gcloud iam roles create [ROLE-ID] --project [PROJECT-ID] \
--file [YAML_FILE-PATH]

以下では、各プレースホルダ値について説明します。

  • [ROLE-ID] は役割の名前です(たとえば、viewer)。
  • [PROJECT-ID] はプロジェクトの名前です(たとえば、my-project-id)。
  • [YAML_FILE-PATH] は、カスタムの役割の定義が含まれる YAML ファイルの場所へのパスです。

次の YAML ファイルの例では、役割の定義を作成する方法を示します。

title: "Role Viewer"
description: "My custom role description."
stage: "ALPHA"
includedPermissions:
- iam.roles.get
- iam.roles.list

次の例では、YAML ファイルを使用して役割を作成する方法を示します。

gcloud iam roles create viewer --project my-project-id \
--file my-role-definition.yaml

役割が正常に作成された場合、次のレスポンスが返されます。

Created role [viewer].
description: My custom role description.
etag: BwVkBX0sQD0=
includedPermissions:
- iam.roles.get
- iam.roles.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

フラグを使用してカスタムの役割を作成するには:

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

cloud iam roles create [ROLE-ID] --project [PROJECT-ID] \
--title [ROLE-TITLE] --description [ROLE-DESCRIPTION] \
--permissions [PERMISSIONS-LIST] --stage [LAUNCH-STAGE]

以下では、各プレースホルダ値について説明します。

  • [ROLE-ID] は役割の名前です(たとえば、viewer)。
  • [PROJECT-ID] はプロジェクトの名前です(たとえば、my-project-id)。
  • [ROLE-TITLE] は、役割のわかりやすいタイトルです(たとえば、"Role Viewer")。
  • [ROLE-DESCRIPTION] は、役割に関する簡単な説明です(たとえば、"My custom role description.")。
  • [PERMISSIONS-LIST] には、カスタムの役割に含める権限のカンマ区切りのリストが含まれます。例: iam.roles.get,iam.roles.list
  • [LAUNCH-STAGE] は、リリースのライフサイクルにおける役割の段階を示します(たとえば、ALPHABETAGA)。

次の例では、フラグを使用して役割を作成する方法を示します。

gcloud iam roles create viewer --project my-project-id \
--title "Role Viewer" --description "My custom role description." \
--permissions iam.roles.get,iam.roles.list --stage ALPHA

役割が正常に作成された場合、次のレスポンスが返されます。

Created role [viewer].
description: My custom role description.
etag: BwVkBX0sQD0=
includedPermissions:
- iam.roles.get
- iam.roles.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

REST API

create メソッドを使用して、新しいカスタムの役割を作成します。

リクエストに次の必須パラメータを設定します。

  • 新しいカスタム役割に使用する role_id(たとえば、appengine.myCustomStorageAuditor)。
  • 「この役割は、ストレージ リソース、その容量、アクセス ポリシーを一覧表示できるよう権限を付与します」といったカスタムの役割の説明。
  • この役割に関連付ける権限のリスト。
  • 役割に名前フィールドを設定すると、エラーが発生することに注意してください。

次のオプション パラメータも設定することをおすすめします。

  • 「カスタムの役割編集者の例」などのカスタムの役割のタイトル。
  • stage の値を GA などに設定します。

stage は、ALPHABETAGADEPRECATED または DISABLED の値を使用します。

一部の事前定義済みの役割には、サポートが終了した権限や、カスタムの役割では許可されない権限が含まれています。サポートが終了した権限や制限された権限を含む事前定義済みの役割に基づくカスタムの役割の作成は失敗します。

parent: '[PARENT-NAME]'
role_id: '[ROLE-ID]'
role {
    name: ''
    title: '[ROLE-TITLE]'
    description: '[ROLE-DESCRIPTION]'
    included_permissions: '[PERMISSION]'
    included_permissions: '[PERMISSION]'
})",

ここで

  • [PARENT-NAME] は、カスタム役割を作成する組織の名前(たとえば、organizations/0000000000000001)か、カスタムの役割を作成するプロジェクト ID(たとえば、projects/my-project)です。
  • [ROLE-ID] はカスタムの役割の ID です。例: appengine.myCustomStorageAuditor.
  • [ROLE-TITLE] は役割のタイトルです。例: Storage Auditor
  • [ROLE-DESCRIPTION] は、役割の果たす内容の説明です。
  • [PERMISSION] は、カスタムの役割に含める権限です。

エラーコード

エラーコード ステータス メッセージ
PERMISSION_DENIED {parent} で役割を作成する権限がありません。
ALREADY_EXISTS {parent}{role-id} という名前の役割がすでに存在します。
INVALID_ARGUMENT {parent} が無効です。親は、organizations/{organization-id} 形式にする必要があります。
INVALID_ARGUMENT role_id {role-id} は無効です。パターン {pattern} と一致しません。
INVALID_ARGUMENT 役割内の権限の数が {max} の最大数を超えています。
INVALID_ARGUMENT role.stage {stage} が無効です。

C#

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の C# の設定手順に従ってください。 詳細については、Cloud 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 Role CreateRole(string name, string projectId, string title,
        string description, IList<string> permissions, string stage)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var role = new Role
        {
            Title = title,
            Description = description,
            IncludedPermissions = permissions,
            Stage = stage
        };
        var request = new CreateRoleRequest
        {
            Role = role,
            RoleId = name
        };
        role = service.Projects.Roles.Create(request,
            "projects/" + projectId).Execute();
        Console.WriteLine("Created role: " + role.Name);
        return role;
    }
}

Go

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

import (
	"context"
	"fmt"
	"io"

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

// createRole creates a custom role.
func createRole(w io.Writer, projectID, name, title, description, stage string, permissions []string) (*iam.Role, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", err)
	}

	request := &iam.CreateRoleRequest{
		Role: &iam.Role{
			Title:               title,
			Description:         description,
			IncludedPermissions: permissions,
			Stage:               stage,
		},
		RoleId: name,
	}
	role, err := service.Projects.Roles.Create("projects/"+projectID, request).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Create: %v", err)
	}
	fmt.Fprintf(w, "Created role: %v", role.Name)
	return role, nil
}

Python

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

def create_role(name, project, title, description, permissions, stage):
    """Creates a role."""

    # pylint: disable=no-member
    role = service.projects().roles().create(
        parent='projects/' + project,
        body={
            'roleId': name,
            'role': {
                'title': title,
                'description': description,
                'includedPermissions': permissions,
                'stage': stage
            }
        }).execute()

    print('Created role: ' + role['name'])
    return role

既存のカスタムの役割の編集

Read-Modify-Write

カスタムの役割などのリソースのメタデータの更新では一般に、リソースの現在の状態の読み取り、ローカルでのデータの更新、変更されたデータの送信と書き込みが行われます。このような処理では、2 つ以上の独立したプロセスが一連の操作を同時に試行する場合に競合が発生することがあります。たとえば、プロジェクトの 2 人のオーナーが、1 つの役割に対して相反する変更を同時に行うと、一部の変更が失敗する可能性があります。Cloud IAM では、カスタムの役割の etag プロパティを使用してこの問題を解決します。このプロパティは、カスタムの役割が最後のリクエスト以降に変更されているかどうかを確認するために使用されます。etag 値を保持している Cloud IAM にリクエストを出すと、Cloud IAM はリクエスト内の etag 値と、カスタムの役割に関連付けられている既存の etag 値を比較します。etag 値が一致した場合にのみ変更を書き込みます。

役割を更新する場合は、roles.get() で役割を取得して更新します。その後、roles.patch() を使用して、更新された役割を書き込みます。役割を設定するときに etag 値を使用するのは、roles.get() 内の対応する役割に etag 値が含まれている場合のみです。

Console

  1. Cloud Console の [役割] ページに移動します。

    [役割] ページを開く

  2. [組織] プルダウンから組織を選択します。
  3. カスタムの役割をクリックします。
  4. [役割を編集] をクリックします。
  5. 役割に新しい権限を追加するには、[権限を追加] をクリックします。
  6. 役割から権限を削除する権限のチェックボックスをオフにします。
  7. [更新] をクリックして、編集した役割を保存します。

gcloud コマンド

gcloud iam roles update を使用して、カスタム役割を更新します。このコマンドは次の 2 つの方法で使用できます。

  • 更新された役割の定義が含まれる YAML ファイルを使用する
  • フラグを使用して、更新された役割の定義を指定する

カスタム役割を更新する場合は、--organization [ORGANIZATION-ID] フラグまたは --project [PROJECT-ID] フラグを使用して、組織レベルまたはプロジェクト レベルに役割を適用するかどうかを指定する必要があります。下の各例では、プロジェクト レベルでカスタムの役割を作成します。

YAML ファイルを使用してカスタムの役割を更新するには:

次の gcloud コマンドを実行して、役割の現在の定義を取得します。

gcloud iam roles describe [ROLE-ID] --project [PROJECT-ID]

以下では、各プレースホルダ値について説明します。

  • [ROLE-ID] は、更新する役割の名前です(たとえば、viewer)。
  • [PROJECT-ID] はプロジェクトの名前です(たとえば、my-project-id)。

describe コマンドは役割の定義を返し、その定義には役割の現在のバージョンを一意に特定する etag 値が含まれます。役割の同時変更が上書きされないように、更新された役割の定義に etag 値を指定する必要があります。

describe コマンドは、次の出力を返します。

description: [ROLE-DESCRIPTION]
etag: [ETAG-VALUE]
includedPermissions:
- [PERMISSION-1]
- [PERMISSION-2]
name: [ROLE-ID]
stage: [LAUNCH-STAGE]
title: [ROLE-TITLE]

以下では、各プレースホルダ値について説明します。

  • [ROLE-DESCRIPTION] は、役割に関する簡単な説明です(たとえば、"My custom role description")。
  • [ETAG-VALUE] は、役割の現在のバージョンの一意の識別子です(たとえば、BwVkBkbfr70=)。
  • includedPermissions には、カスタム役割に含める 1 つ以上の権限のリストを指定します(たとえば、- iam.roles.get)。
  • [ROLE-ID] は役割の階層 ID で、プロジェクト レベルで作成されたか、組織レベルで作成されたかに応じて異なります。例: projects/my-project-id/roles/viewer
  • [LAUNCH-STAGE] は、リリースのライフサイクルにおける役割の段階を示します(たとえば、ALPHABETAGA)。
  • [ROLE-TITLE] は、役割のわかりやすいタイトルです(たとえば、"Role Viewer")。

役割を更新するには、出力された役割の定義を YAML ファイルに含めるか、または元の YAML ファイルを出力された etag 値で更新します。

次の YAML ファイルの例を考えてみましょう。このファイルには、describe コマンドからの出力が含まれ、Cloud Storage の 2 つの権限が追加されています。

description: My custom role description.
etag: BwVkBkbfr70=
includedPermissions:
- iam.roles.get
- iam.roles.list
- storage.buckets.get
- storage.buckets.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

YAML ファイルを保存して、次の gcloud コマンドを実行します。

gcloud iam roles update [ROLE-ID] --project [PROJECT-ID] \
--file [YAML_FILE-PATH]

以下では、各プレースホルダ値について説明します。

  • [ROLE-ID] は、更新する役割の名前です(たとえば、viewer)。
  • [PROJECT-ID] はプロジェクトの名前です(たとえば、my-project-id)。
  • [YAML_FILE-PATH] は、更新されたカスタムの役割の定義が含まれる YAML ファイルの場所のパスです。

次の例では、YAML ファイルを使用して役割を更新する方法を示します。

gcloud iam roles update viewer --project my-project-id \
--file my-role-definition.yaml

役割が正常に更新された場合、次のレスポンスが返されます。

description: My custom role description.
etag: BwVkBwDN0lg=
includedPermissions:
- iam.roles.get
- iam.roles.list
- storage.buckets.get
- storage.buckets.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

フラグを使用してカスタムの役割を更新するには:

役割の定義の各部分は、対応するフラグを使用して更新できます。使用可能なすべてのフラグの一覧については、gcloud iam roles update トピックをご覧ください。

次のフラグを使用して、権限を追加または削除できます。

  • --add-permissions [PERMISSIONS]: 権限(複数の場合はカンマで区切る)を役割に追加します。
  • --remove-permissions [PERMISSIONS]: 権限(複数の場合はカンマで区切る)を役割から削除します。

または、--permissions [PERMISSIONS] フラグを使用して新しい権限を指定することもできます。権限のカンマ区切りのリストを指定すると、既存の権限のリストが置き換えられます。

役割定義の他の要素を更新するには、次の gcloud コマンドを実行します。

gcloud iam roles update [ROLE-ID] --project [PROJECT-ID] \
--title [ROLE-TITLE] --description [ROLE-DESCRIPTION] \
--stage [LAUNCH-STAGE]

以下では、各プレースホルダ値について説明します。

  • [ROLE-ID] は役割の名前です(たとえば、viewer)。
  • [PROJECT-ID] はプロジェクトの名前です(たとえば、my-project-id)。
  • [ROLE-TITLE] は、役割のわかりやすいタイトルです(たとえば、"Role Viewer")。
  • [ROLE-DESCRIPTION] は、役割に関する簡単な説明です(たとえば、"My custom role description.")。
  • [LAUNCH-STAGE] は、リリースのライフサイクルにおける役割の段階を示します(たとえば、ALPHABETAGA)。

次の例では、フラグを使用して役割に権限を追加する方法を示します。

gcloud iam roles update viewer --project my-project-id \
--add-permissions storage.buckets.get,storage.buckets.list

役割が正常に更新された場合、次のレスポンスが返されます。

description: My custom role description.
etag: BwVkBwDN0lg=
includedPermissions:
- iam.roles.get
- iam.roles.list
- storage.buckets.get
- storage.buckets.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

REST API

既存のカスタムの役割を編集するには、Role UpdateRole(UpdateRoleRequest) メソッドを使用します。

編集するカスタム役割の ID がわかっている場合は、roles.get() メソッドを使用して役割を取得し、roles.patch() を使用して更新します。

編集するカスタム役割の ID がわからない場合は、ListRoles() を使用してすべての役割を含むリストを取得し、役割を指定します。roles.list() は、リソースを参照している役割の一覧を返します。次に、roles.patch() を使用して役割を更新します。

次の必須パラメータを roles.patch() に設定します。

  • 役割の名前(organizations/{ORGANIZATION-ID}/roles/{ROLE-ID} など)。

必要に応じて、update_mask フィールドを指定して、将来更新可能なフィールドを指定します。

name: '[ROLE-NAME]'
role {
    name: '[ROLE-NAME]'
    title: '[ROLE-TITLE]'
    description: '[ROLE-DESCRIPTION]'
    included_permissions: '[PERMISSION]'
    included_permissions: '[PERMISSION]'
})"

ここで

  • [ROLE-NAME] は役割の名前です。たとえば、organizations/123456/roles/appengine.customRoleEditor. は、roles/{ROLE-NAME}organizations/{ORGANIZATION-ID}/roles/{ROLE-NAME} または projects/{PROJECT-ID}/roles/{ROLE-NAME} の形式にできます。

  • [ROLE-TITLE] は役割のタイトルです。例: New custom editor.

  • [ROLE-DESCRIPTION] は役割の説明です。例: 編集者の新しい詳細な説明。
  • [PERMISSION] は役割に含める権限です。例: storage.objects.update

エラーコード

エラーコード ステータス メッセージ
PERMISSION_DENIED 役割を更新する権限がありません。
INVALID_ARGUMENT 定義済みの役割は更新できません。
INVALID_ARGUMENT リクエスト内の名前([ROLE-NAME])と役割内の名前()は一致する必要があります。
INVALID_ARGUMENT 権限 [PERMISSION] が無効です。
ABORTED etag が一致しなかったため、同時ポリシーが変更されました。読み取り-修正-書き込み全体を指数バックオフで再試行してください。

一部の事前定義済みの役割には、サポートが終了した権限や、カスタムの役割では許可されない権限が含まれています。サポートが終了した権限や制限された権限を含む事前定義済みの役割に基づくカスタムの役割の作成は失敗します。

C#

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の C# の設定手順に従ってください。 詳細については、Cloud 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 Role EditRole(string name, string projectId, string newTitle,
        string newDescription, IList<string> newPermissions, string newStage)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });
        // First, get a Role using List() or Get().
        string resource = $"projects/{projectId}/roles/{name}";
        var role = service.Projects.Roles.Get(resource).Execute();
        // Then you can update its fields.
        role.Title = newTitle;
        role.Description = newDescription;
        role.IncludedPermissions = newPermissions;
        role.Stage = newStage;
        role = service.Projects.Roles.Patch(role, resource).Execute();
        Console.WriteLine("Updated role: " + role.Name);
        return role;
    }
}

Go

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

import (
	"context"
	"fmt"
	"io"

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

// editRole modifies a custom role.
func editRole(w io.Writer, projectID, name, newTitle, newDescription, newStage string, newPermissions []string) (*iam.Role, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", err)
	}

	resource := "projects/" + projectID + "/roles/" + name
	role, err := service.Projects.Roles.Get(resource).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Get: %v", err)
	}
	role.Title = newTitle
	role.Description = newDescription
	role.IncludedPermissions = newPermissions
	role.Stage = newStage
	role, err = service.Projects.Roles.Patch(resource, role).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Patch: %v", err)
	}
	fmt.Fprintf(w, "Updated role: %v", role.Name)
	return role, nil
}

Python

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

def edit_role(name, project, title, description, permissions, stage):
    """Creates a role."""

    # pylint: disable=no-member
    role = service.projects().roles().patch(
        name='projects/' + project + '/roles/' + name,
        body={
            'title': title,
            'description': description,
            'includedPermissions': permissions,
            'stage': stage
        }).execute()

    print('Updated role: ' + role['name'])
    return role

カスタムの役割の無効化

カスタムの役割を無効にすることができます。役割を無効にすると、その役割に関連するポリシー バインディングはすべて無効になります。つまり、ユーザーに役割を付与しても、その役割の権限は付与されません。

Console

  1. Cloud Console の [役割] ページに移動します。

    [役割] ページを開く

  2. ページの上部にある [プロジェクトを選択] プルダウンをクリックします。
  3. 組織またはプロジェクトを選択します。
  4. カスタムの役割を選択し、[無効] をクリックします。

gcloud コマンド

gcloud iam roles update コマンドを使用して、開始ステージを DISABLED に設定し、カスタムの役割を無効にします。既存のカスタムの役割の編集gcloud タブで説明されているように、次の 2 つの方法で既存のカスタムの役割を更新できます。

  • 更新された役割の定義が含まれる YAML ファイルを使用する
  • フラグを使用して、更新された役割の定義を指定する

既存のカスタム役割を無効にする最も簡単な方法は、--stage フラグを DISABLED に設定する方法です。次の gcloud コマンドを実行します。

gcloud iam roles update [ROLE-ID] --project [PROJECT-ID] \
--stage DISABLED

以下では、各プレースホルダ値について説明します。

  • [ROLE-ID] は役割の名前です(たとえば、viewer)。
  • [PROJECT-ID] はプロジェクトの名前です(たとえば、my-project-id)。また、役割が組織レベルで作成された場合(たとえば、1234567)、--organization [ORGANIZATION-ID] フラグを使用することもできます。

次の例では、役割を無効にする方法を示します。

gcloud iam roles update viewer --project my-project-id \
--stage DISABLED

役割が正常に更新された場合、次のレスポンスが返されます。

description: My custom role description.
etag: BwVkB5NLIQw=
includedPermissions:
- iam.roles.get
- iam.roles.list
name: projects/my-project-id/roles/viewer
stage: DISABLED
title: Role Viewer

REST API

roles.patch() メソッドを使用して、カスタムの役割を無効にします。

無効にするカスタムの役割の ID がわかっている場合は、roles.get() メソッドで役割を取得します。役割の stage プロパティを DISABLED に変更して、roles.patch() メソッドを呼び出して役割を更新します。

無効にするカスタム役割の ID がわからない場合は、roles.list() を使用して役割の一覧を取得し、役割を特定します。roles.list() は、リソースを参照している役割の一覧を返します。無効にする役割を特定し、その rolelaunchstage プロパティを DISABLED, に変更します。その後、roles.patch() メソッドを呼び出し、役割を更新します。

役割を無効にするには、次のフィールドを設定します。

  • name に役割の完全名(organizations/{organization-id}/roles/{role}.)を設定します。
  • Role,stageDISABLED. に設定します。
  • update_mask を 'paths: stage' に設定します。

役割を再度有効にするには、上記の役割の無効化と同じプロセスを行いますが、役割の stage プロパティを ALPHA、\、BETAGA のいずれかに設定します。

name: 'organizations/123456/roles/appengine.customRoleEditor'
role {
    name: 'organizations/123456/roles/appengine.customRoleEditor'`
    stage: 'DISABLED'
}
update_mask {
    paths:  stage
}

エラーコード

エラーコード ステータス メッセージ
PERMISSION_DENIED 役割を更新する権限がありません。
INVALID_ARGUMENT キュレートされた役割を更新できません。
INVALID_ARGUMENT リクエスト内の名前([ROLE-NAME])と役割内の名前()は一致する必要があります。
INVALID_ARGUMENT 権限 [PERMISSION] が無効です。
ABORTED 同時ポリシーが変更されました。読み取り-修正-書き込みを指数バックオフで再試行してください。

C#

役割の stage フィールドを DISABLED更新します。

Go

役割の stage フィールドを DISABLED更新します。

Python

役割の stage フィールドを DISABLED更新します。

役割の一覧表示

Console

  1. Cloud Console の [役割] ページに移動します。

    [役割] ページを開く


    プロジェクトのすべてのカスタムの役割がページに一覧表示されます。

gcloud コマンド

gcloud iam roles list コマンドを使用して、プロジェクトまたは組織のカスタムの役割と事前定義の役割を一覧表示します。

次の gcloud コマンドを実行して、プロジェクト レベルまたは組織レベルのカスタム役割を指定してカスタム役割を一覧表示します。

gcloud iam roles list --project [PROJECT-ID]

[PROJECT-ID] はプロジェクトの名前です(たとえば、my-project-id)。また、役割が組織レベルで作成されている場合(1234567 など)は、--organization [ORGANIZATION-ID] フラグを使用できます。

削除された役割を一覧表示するには、--show-deleted フラグを指定します。

次の gcloud コマンドを実行して、事前定義の役割を一覧表示します。

gcloud iam roles list

REST API

組織やプロジェクトで定義されているすべてのカスタムの役割を一覧表示するには、roles.list() メソッドを使用します。また、このメソッドを使用し、リクエストの親フィールドを "" に設定することで、事前定義済みの役割を一覧表示することもできます。

roles.list() を呼び出すには、リクエストに次のフィールドを設定します。

  • すべてのカスタムの役割を取得するために使用する次のような親。
    • projects/{PROJECT-ID}
    • organizations/{ORGANIZATION-ID}

結果に各役割の権限が含まれるようにするには、view フィールドを RoleView::FULL に設定します。

最近削除された役割を結果に含める場合は、showDeleted フィールドを true に設定します。

事前定義の役割の一覧を取得するには、親を ""(空の文字列)に設定します。

エラーコード

エラーコード ステータス メッセージ
PERMISSION_DENIED {path} の役割を一覧表示する権限がありません。
INVALID_ARGUMENT {path} が無効です。親は、organizations/{organization-id} または projects/{project-id} の形式にするか、空白に必要があります。
INVALID_ARGUMENT 役割ビューが無効です。

C#

このサンプルを試す前に、Cloud IAM クイックスタート: クライアント ライブラリの使用の C# の設定手順に従ってください。 詳細については、Cloud 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> ListRoles(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var response = service.Projects.Roles.List("projects/" + projectId)
            .Execute();
        foreach (var role in response.Roles)
        {
            Console.WriteLine(role.Name);
        }
        return response.Roles;
    }
}

Go

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

import (
	"context"
	"fmt"
	"io"

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

// listRoles lists a project's roles.
func listRoles(w io.Writer, projectID string) ([]*iam.Role, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", err)
	}

	response, err := service.Projects.Roles.List("projects/" + projectID).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.List: %v", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Listing role: %v\n", role.Name)
	}
	return response.Roles, nil
}

Python

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

def list_roles(project_id):
    """Lists roles."""

    # pylint: disable=no-member
    roles = service.roles().list(
        parent='projects/' + project_id).execute()['roles']
    for role in roles:
        print(role['name'])

カスタムの役割の削除

Console

  1. Cloud Console の [役割] ページに移動します。

    [役割] ページを開く

  2. 削除する役割を選択し、ページ上部のゴミ箱アイコンをクリックします。

gcloud コマンド

gcloud iam roles delete コマンドを使用して、カスタム役割を削除します。役割は停止され、新しい IAM ポリシー バインドの作成には使用できません。

次の gcloud コマンドを実行して、カスタム役割を削除します。

gcloud iam roles delete [ROLE-ID] --project [PROJECT-ID]

以下では、各プレースホルダ値について説明します。

  • [ROLE-ID] は役割の名前です(たとえば、viewer)。
  • [PROJECT-ID] はプロジェクトの名前です(たとえば、my-project-id)。また、役割が組織レベルで作成されている場合(1234567 など)は、--organization [ORGANIZATION-ID] フラグを使用します。

--show-deleted フラグが含まれていない場合は、gcloud iam roles list に役割が含まれません。削除された役割は、次のように、list レスポンスの deleted: true ブロックに示されます。

---
deleted: true
description: My custom role description.
etag: BwVkB5NLIQw=
name: projects/my-project-id/roles/viewer
title: Role Viewer
---

REST API

roles.delete で役割を削除します。役割は停止され、新しい IAM ポリシー バインドの作成には使用できません。

name は、次の形式になります。

  • organizations/{ORGANIZATION-ID}/roles/{ROLE-NAME}
  • projects/{PROJECT-ID}/roles/{ROLE-NAME}

エラーコード

エラーコード ステータス メッセージ
PERMISSION_DENIED {path} で役割を削除する権限がありません。
FAILED_PRECONDITION すでに削除されているため、{ROLE-NAME} は削除できません。
FAILED_PRECONDITION 役割 {ROLE-NAME} は予約されているため削除できません。
INVALID_ARGUMENT キュレートされた役割は削除状態にはできません。

C#

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


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

public partial class CustomRoles
{
    public static void DeleteRole(string name, string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        service.Projects.Roles.Delete(
            $"projects/{projectId}/roles/{name}").Execute();
        Console.WriteLine("Deleted role: " + name);
    }
}

Go

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

import (
	"context"
	"fmt"
	"io"

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

// deleteRole deletes a custom role.
func deleteRole(w io.Writer, projectID, name string) error {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return fmt.Errorf("iam.New: %v", err)
	}

	_, err = service.Projects.Roles.Delete("projects/" + projectID + "/roles/" + name).Do()
	if err != nil {
		return fmt.Errorf("Projects.Roles.Delete: %v", err)
	}
	fmt.Fprintf(w, "Deleted role: %v", name)
	return nil
}

Python

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

def delete_role(name, project):
    """Deletes a role."""

    # pylint: disable=no-member
    role = service.projects().roles().delete(
        name='projects/' + project + '/roles/' + name).execute()

    print('Deleted role: ' + name)
    return role

役割が削除されると、そのバインディングは残りますが、非アクティブです。役割は 7 日以内であれば削除を取り消すことができます。この 7 日間、役割は Cloud Console で [削除済み] と表示され、プログラムの list コマンドでは表示されません(リクエストで showDeleted が設定されている場合を除く)。

役割は 7 日後に完全削除が予定されています。このプロセスには 30 日かかります。この 30 日間の間に、役割と、その役割に関連付けられているすべてのバインディングが完全に削除されます。同じ役割 ID を使用して新しい役割を作成することはできません。

最初の削除リクエストの 37 日後に役割が完全に削除された後、同じ役割 ID を使用して新しい役割を作成できます。

カスタムの役割の削除の取り消し

Console

  1. Cloud Console の [役割] ページに移動します。

    [役割] ページを開く

  2. 削除を取り消す役割を見つけ、行の最後にあるその他アイコンをクリックして [削除を取り消す] をクリックします。

役割の削除は、削除から 7 日以内に限って取り消すことができます。7 日が経過すると、役割は完全に削除され、役割に関連付けられたすべてのバインドが除去されます。

gcloud コマンド

gcloud iam roles undelete を使用して、カスタム役割の削除を取り消します。役割の削除を取り消すと、以前の状態に戻ります。

役割の削除は、削除から 7 日以内に限って取り消すことができます。7 日が経過すると、役割は完全に削除され、役割に関連付けられたすべてのバインドが除去されます。

次の gcloud コマンドを実行して、カスタム役割の削除を取り消します。

gcloud iam roles undelete [ROLE-ID] --project [PROJECT-ID]

以下では、各プレースホルダ値について説明します。

  • [ROLE-ID] は役割の名前です(たとえば、viewer)。
  • [PROJECT-ID] はプロジェクトの名前です(たとえば、my-project-id)。また、役割が組織レベルで作成された場合(たとえば、1234567)、--organization [ORGANIZATION-ID] フラグを使用することもできます。

次の例では、カスタムの役割の削除を取り消す方法を示します。

gcloud iam roles undelete viewer --project my-project-id

役割の削除が正常に取り消された場合、次のレスポンスが返されます。

description: My custom role description.
etag: BwVkCAx9W6w=
includedPermissions:
- iam.roles.get
- iam.roles.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

REST API

roles.undelete は役割を以前の状態に戻します。

name は、次の形式になります。

  • organizations/{ORGANIZATION-ID}/roles/{ROLE-NAME}
  • projects/{PROJECT-ID}/roles/{ROLE-NAME}

役割の削除は、削除から 7 日以内に限って取り消すことができます。7 日が経過すると、役割は完全に削除され、役割に関連付けられたすべてのバインドが除去されます。

エラーコード

エラーコード ステータス メッセージ
PERMISSION_DENIED {path} での役割の削除を取り消す権限がありません。
FAILED_PRECONDITION 削除されていない役割の削除を取り消すことはできません。
FAILED_PRECONDITION 予約済みの役割 {ROLE-NAME} の削除を取り消すことはできません。
INVALID_ARGUMENT 定義済みの役割の削除は取り消すことはできません。

C#

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


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

public partial class CustomRoles
{
    public static Role UndeleteRole(string name, string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        string resource = $"projects/{projectId}/roles/{name}";
        var role = service.Projects.Roles.Undelete(
            new UndeleteRoleRequest(), resource).Execute();
        Console.WriteLine("Undeleted role: " + role.Name);
        return role;
    }
}

Go

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

import (
	"context"
	"fmt"
	"io"

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

// undeleteRole restores a deleted custom role.
func undeleteRole(w io.Writer, projectID, name string) (*iam.Role, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", err)
	}

	resource := "projects/" + projectID + "/roles/" + name
	request := &iam.UndeleteRoleRequest{}
	role, err := service.Projects.Roles.Undelete(resource, request).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Undelete: %v", err)
	}
	fmt.Fprintf(w, "Undeleted role: %v", role.Name)
	return role, nil
}

Python

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

def undelete_role(name, project):
    """Undeletes a role."""

    # pylint: disable=no-member
    role = service.projects().roles().patch(
        name='projects/' + project + '/roles/' + name,
        body={
            'stage': 'DISABLED'
        }).execute()

    print('Disabled role: ' + role['name'])
    return role