IAM を使用したアクセス制御

このページでは、Identity and Access Management(IAM)を使用して Memorystore for Redis プロジェクトへのアクセスと権限を制御する方法について説明します。

概要

Google Cloud には Cloud IAM 機能があります。これにより、特定の Google Cloud リソースに対するアクセス権を詳細に設定し、他のリソースへの不要なアクセスを防止できます。このページでは、Memorystore for Redis の IAM のロールと権限について説明します。ロールと権限の詳細については、IAM のドキュメントをご覧ください。

Memorystore for Redis には、Redis リソースへのアクセスを簡単に制御できるように、事前定義された一連のロールが用意されています。必要な権限が事前定義された役割で提供されていない場合は、カスタムの役割を独自に作成することもできます。また、以前からある基本ロール(編集者、閲覧者、オーナー)も引き続き使用できますが、Memorystore for Redis のロールと同じような細かい制御はできません。特に、基本ロールでは Memorystore for Redis だけではなく、Google Cloud 全体のリソースへのアクセスが提供されます。基本ロールの詳細については、基本ロールをご覧ください。

権限と役割

このセクションでは、Memorystore for Redis でサポートされる権限とロールについて簡単に説明します。

事前定義されたロール

Memorystore for Redis には、プリンシパルにきめ細かい権限を付与するために使用できる事前定義ロールがいくつか用意されています。プリンシパルにロールを付与することで、プリンシパルが行えるアクションを制御できます。プリンシパルは、個人、グループ、またはサービス アカウントのいずれかです。

同じプリンシパルに複数のロールを付与できます。または、そうする権限を持っている場合、プリンシパルに付与されているロールを、いつでも変更できます。

広範囲な役割には、より限定的に定義された役割が含まれます。たとえば、Redis 編集者の役割には Redis 閲覧者のすべての権限に加え、Redis 編集者用に追加された権限が含まれています。同様に、Redis 管理者の役割には Redis 編集者の役割と、管理者用に追加された権限が含まれています。

基本ロール(オーナー、編集者、閲覧者)は、Google Cloud 全体に対する権限を付与します。Memorystore for Redis に固有のロールは、一般的な Google Cloud の使用に必要な次の Google Cloud 権限以外は、Memorystore for Redis 権限のみを付与します。

resourcemanager.projects.get
resourcemanager.projects.list

次の表は、Memorystore for Redis で使用可能な事前定義ロールと、その Memorystore for Redis 権限を示したものです。

ロール 名前 Redis の権限 説明

roles/owner

オーナー

redis.*

すべての Google Cloud リソースに対する完全アクセス権と制御。ユーザー アクセスの管理。

roles/editor

編集者 すべての redis 権限( *.getIamPolicy.setIamPolicy を除く) すべての Google Cloud リソースと Redis リソースに対する読み取り / 書き込みアクセス権(権限を変更する能力以外のすべての制御)

roles/viewer

閲覧者

redis.*.get redis.*.list

Redis リソースを含むすべての Google Cloud リソースに対する読み取り専用アクセス権

roles/redis.admin

Redis 管理者

redis.*

すべての Memorystore for Redis リソースに対する完全な制御

roles/redis.editor

Redis 編集者 以下を除くすべての redis 権限

redis.instances.create redis.instances.delete redis.instances.upgrade redis.instances.import redis.instances.export redis.instances.updateAuth redis.instances.getAuthString redis.operations.delete

Memorystore for Redis インスタンスの管理。インスタンスの作成や削除はできません

roles/redis.viewer

Redis 閲覧者 以下を除くすべての redis 権限

redis.instances.create redis.instances.delete redis.instances.update redis.instances.upgrade redis.instances.import redis.instances.export redis.instances.updateAuth redis.instances.getAuthString redis.operations.delete

すべての Memorystore for Redis リソースへの読み取り専用アクセス権。

権限とロール

次の表は、Memorystore for Redis でサポートされる各権限と、それを含む Memorystore for Redis のロールを示したものです。

権限 Redis の役割 基本ロール

redis.instances.list

Redis 管理者
Redis 編集者
Redis 閲覧者
読み取り

redis.instances.get

Redis 管理者
Redis 編集者
Redis 閲覧者
読み取り

redis.instances.create

Redis 管理者 編集者

redis.instances.update

Redis 管理者
Redis 編集者
編集者

redis.instances.updateAuth

Redis 管理者 編集者

redis.instances.getAuthString

Redis 管理者 編集者

redis.instances.delete

Redis 管理者 編集者

redis.instances.upgrade

Redis 管理者 編集者

redis.instances.import

Redis 管理者 編集者

redis.instances.export

Redis 管理者 編集者

redis.locations.list

Redis 管理者
Redis 編集者
Redis 閲覧者
読み取り

redis.locations.get

Redis 管理者
Redis 編集者
Redis 閲覧者
読み取り

redis.operations.list

Redis 管理者
Redis 編集者
Redis 閲覧者
読み取り

redis.operations.get

Redis 管理者
Redis 編集者
Redis 閲覧者
読み取り

redis.operations.delete

Redis 管理者 編集者

カスタムの役割

事前定義された役割がお客様特有のビジネス要件に合っていない場合は、任意に指定した権限を含むカスタムの役割を独自に定義できます。これをサポートするために、IAM にはカスタムの役割が用意されています。Memorystore for Redis のカスタムロールを作成する際は、resourcemanager.projects.getresourcemanager.projects.list の両方を含めるようにしてください。そのように設定しないと、Google Cloud Console は Memorystore for Redis に対して正しく機能しません。詳細については、権限の依存関係をご覧ください。 カスタムロールを作成する方法については、カスタムロールを作成するをご覧ください。

Google Cloud コンソールでの一般的なタスクに必要な権限

ユーザーが Google Cloud コンソールを使用して Memorystore for Redis を操作できるようにするには、ユーザーのロールに resourcemanager.projects.get 権限と resourcemanager.projects.list 権限が含まれている必要があります。

次の表は、Google Cloud コンソールの一般的なタスクに必要なその他の権限を示したものです。

タスク 必要な追加の権限
インスタンスの一覧ページを表示する

redis.instances.get
redis.instances.list

インスタンスを作成および編集する

redis.instances.create
redis.instances.get
redis.instances.list
compute.networks.list

インスタンスを削除する

redis.instances.delete
redis.instances.get
redis.instances.list

Cloud Shell からインスタンスに接続する

redis.instances.get
redis.instances.list
redis.instances.update

インスタンス情報の表示

redis.instances.get
monitoring.timeSeries.list

RDB バックアップ ファイルのインポートとエクスポート

redis.instances.import
redis.instances.export

インスタンスの Redis バージョンのアップグレード

redis.instances.upgrade

gcloud コマンドに必要な権限

ユーザーが gcloud コマンドを使用して Memorystore for Redis を操作できるようにするには、ユーザーのロールに resourcemanager.projects.get 権限と resourcemanager.projects.list 権限が含まれている必要があります。

次の表は、gcloud redis サブコマンドごとに gcloud コマンドを呼び出すユーザーに必要な権限を示しています。

コマンド 必要な権限
gcloud redis instances auth

redis.instances.updateAuth
redis.instances.getAuthString

gcloud redis instances create

redis.instances.get
redis.instances.create

gcloud redis instances delete

redis.instances.delete

gcloud redis instances update

redis.instances.get
redis.instances.update

gcloud redis instances list

redis.instances.list

gcloud redis instances describe

redis.instances.get

gcloud redis instances import

redis.instances.import

gcloud redis instances export

redis.instances.export

gcloud redis instances upgrade

redis.instances.upgrade

gcloud redis operations list

redis.operations.list

gcloud redis operations describe

redis.operations.get

gcloud redis regions list

redis.locations.list

gcloud redis regions describe

redis.locations.get

gcloud redis zones list

redis.locations.list

API メソッドに必要な権限

次の表に、呼び出し元が Memorystore for Redis API の各メソッドを呼び出すため、または API を使用する Google Cloud ツール(Google Cloud コンソールや gcloud コマンドライン ツールなど)を使用してタスクを実行するために必要な権限を示します。

方法 必要な権限

locations.get

redis.locations.get

locations.list

redis.locations.list

instances.create

redis.instances.create

instances.delete

redis.instances.delete

instances.get

redis.instances.get

instances.list

redis.instances.list

instances.patch

redis.instances.update

instances.import

redis.instances.import

instances.export

redis.instances.export

instances.upgrade

redis.instances.upgrade

operations.get

redis.operations.get

operations.list

redis.operations.list

Memorystore for Redis サービス アカウント

各 Memorystore for Redis インスタンスには、他の Google Cloud リソースとの通信に使用するサービス アカウントがあります。

エクスポートの際や CMEK の使用時などでは、サービス アカウントに特定のロールや権限を付与しなければならない場合があります。

Memorystore for Redis サービス アカウントの形式

インスタンスのサービス アカウントは、作成されたタイミングによって 2 つの異なる形式のいずれかを使用します。

  • 1 つ目の形式は次のとおりです。

    [PROJECT_NUMBER]-compute@developer.gserviceaccount.com

  • 2 つ目の形式は次のとおりです。

    service-[PROJECT_NUMBER]@cloud-redis.iam.gserviceaccount.com

インスタンスが使用するサービス アカウントの信頼できるソースを確認するには、インスタンスのサービス アカウントを表示するをご覧ください。

既知の問題

[PROJECT_NUMBER]-compute@developer.gserviceaccount.com 形式を使用するサービス アカウントは、組織のポリシーと競合することがあります。詳細とこの問題を解決する手順については、ドメインで制限された共有の組織のポリシーに関する問題をご覧ください。

インスタンスのサービス アカウントを確認する:

インスタンスのサービス アカウントを確認するには、次のコマンドを実行して persistenceIamIdentity の下に表示されているサービス アカウントをメモします。

gcloud redis instances describe [INSTANCE_ID] --region=[REGION]

Redis AUTH に関する権限

次の表に、Memorystore for Redis の一部の基本的な AUTH タスクを完了するためにユーザーが必要とする最小限の権限を示します。

必要な権限 Redis AUTH を有効にした Memorystore インスタンスを作成する 既存の Redis インスタンスで AUTH を有効または無効にする AUTH 文字列の表示 Redis インスタンスの AUTH が有効または無効のいずれの状態になっているかを表示する
redis.instances.create X X X
redis.instances.update X X X
redis.instances.get X X X
redis.instances.updateAuth X X
redis.instances.getAuthString X X X

転送中の暗号化の権限

次の表に、Memorystore for Redis の転送中の暗号化を有効にして管理するために必要な権限を示します。

必要な権限 転送中の暗号化を使用する Memorystore インスタンスの作成 認証局をダウンロードする
redis.instances.create X
redis.instances.get X

メンテナンス ポリシーの権限

下の表は、Memorystore for Redis のメンテナンス ポリシーを管理するために必要な権限を示しています。

必要な権限 メンテナンス ポリシーを有効にして Memorystore インスタンスを作成する 既存の Memorystore インスタンスのメンテナンス ポリシーを作成または変更する メンテナンス ポリシー設定の表示 メンテナンスのスケジュール変更
redis.instances.create X X X
redis.instances.update X X X
redis.instances.get X X X
redis.instances.rescheduleMaintenance X X X

インポートとエクスポートに必要な権限

インポートとエクスポートにカスタムロールを使用するには、別の 2 つのカスタムロールが必要です。1 つはユーザー用のカスタムロールで、もう 1 つは Redis インスタンスのサービス アカウント用のカスタムロールです。サービス アカウント用のカスタムロールは、Cloud Storage バケットレベルの権限を使用します。

インスタンスのサービス アカウントを確認するには、インスタンスのサービス アカウントを確認するをご覧ください。

サービス アカウントの権限

ストレージ権限は、サービス アカウントに対して、プロジェクト全体ではなくバケットレベルでのみ付与する必要があることに留意してください。手順については、バケットレベルのポリシーにプリンシパルを追加するをご覧ください。

サービス アカウントにバケットレベルの権限を付与すると、「メモリストアは、サービス アカウント xxxx@xxxx.gserviceaccount.com にインポート / エクスポートに必要な権限があるかどうかを確認できません」というメッセージは無視できます。権限の確認または更新に関してサポートが必要な場合は、プロジェクトの管理者にお問い合わせください。必要な権限については、インポート / エクスポートの権限に関するドキュメントをご覧ください。下記の権限をユーザー アカウントとサービス アカウントのカスタムロールに適用すると、インポート / エクスポートが成功します。

サービス アカウントのカスタムロールの権限 gcloud を使用したインポート gcloud を使用したエクスポート Google Cloud コンソールを使用したインポート Google Cloud コンソールを使用したエクスポート
storage.buckets.get
storage.objects.get X X
storage.objects.create X X
storage.objects.delete X 省略可。
(既存の RDB ファイルを上書きする権限を付与します。)
X 省略可。
(既存の RDB ファイルを上書きする権限を付与します。)

ユーザー アカウントの権限

ユーザー アカウントのカスタムロールの権限 gcloud を使用したインポート gcloud を使用したエクスポート Google Cloud コンソールを使用したインポート Google Cloud コンソールを使用したエクスポート
resourcemanager.projects.get X X
redis.instances.get
redis.instances.list X X X X
redis.instances.import X X
redis.instances.export X X
redis.operations.get X
redis.operations.list X X
redis.operations.cancel
storage.buckets.list X X
storage.buckets.get X X
storage.objects.list X X
storage.objects.get X X

次のステップ