このドキュメントでは、Pub/Sub で使用可能なアクセス制御オプションについて説明します。
概要
Pub/Sub は、Identity and Access Management(IAM)を使用してアクセス制御を行います。
Pub/Sub では、アクセス制御をプロジェクト レベルと個々のリソースレベルで構成できます。次に例を示します。
Cloud プロジェクト全体ではなく、トピックごと、またはサブスクリプションごとにアクセス権を付与します。
単一のトピックまたはサブスクリプションに対する表示専用アクセス権がある場合、Google Cloud コンソールを使用してそのトピックまたはサブスクリプションを表示することはできません。代わりに、Google Cloud CLI を使用できます。
機能が限定されたアクセス権を付与します。たとえば、トピックにメッセージをパブリッシュするのみのアクセス権、サブスクリプションからのメッセージを使用するのみで、トピックやサブスクリプションを削除できないアクセス権などです。
プロジェクト内のすべての Pub/Sub リソースに対するアクセス権限を、デベロッパーのグループに付与します。
IAM とその機能の詳細については、IAM のドキュメントをご覧ください。特に、リソースへのアクセス権の付与、変更、取り消しをご覧ください。
すべての Pub/Sub メソッドで、呼び出し元に一定の権限が必要になります。Pub/Sub IAM でサポートされる権限とロールのリストについては、次のロールセクションをご覧ください。
権限とロール
次の表に、すべての Pub/Sub のロールと、各ロールに関連付けられている権限を示します。
ロール | 権限 |
---|---|
Pub/Sub 管理者( トピックとサブスクリプションに対する完全アクセス権を付与します。 このロールを付与できる最下位レベルのリソース:
7 個のオーナー権限を含む |
pubsub.*
resourcemanager.projects.get serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Pub/Sub 編集者( トピックとサブスクリプションを変更するためのアクセスと、メッセージを送信および受信するためのアクセスを付与します。 このロールを付与できる最下位レベルのリソース:
|
pubsub.schemas.attach pubsub.schemas.commit pubsub.schemas.create pubsub.schemas.delete pubsub.schemas.get pubsub.schemas.list pubsub.schemas.listRevisions pubsub.schemas.rollback pubsub.schemas.validate pubsub.snapshots.create pubsub.snapshots.delete pubsub.snapshots.get pubsub.snapshots.list pubsub.snapshots.seek pubsub.snapshots.update pubsub.subscriptions.consume pubsub.subscriptions.create pubsub.subscriptions.delete pubsub.subscriptions.get pubsub.subscriptions.list pubsub.subscriptions.update pubsub. pubsub.topics.create pubsub.topics.delete pubsub. pubsub.topics.get pubsub.topics.list pubsub.topics.publish pubsub.topics.update pubsub.topics.updateTag resourcemanager.projects.get serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Pub/Sub パブリッシャー( メッセージをトピックに送信するためのアクセスを付与します。 このロールを付与できる最下位レベルのリソース:
|
pubsub.topics.publish |
Pub/Sub サブスクライバー( サブスクリプションからメッセージを受信し、サブスクリプションをトピックに接続するためのアクセスを付与します。 このロールを付与できる最下位レベルのリソース:
|
pubsub.snapshots.seek pubsub.subscriptions.consume pubsub. |
Pub/Sub 閲覧者( トピックおよびサブスクリプションを閲覧するためのアクセスを付与します。 このロールを付与できる最下位レベルのリソース:
|
pubsub.schemas.get pubsub.schemas.list pubsub.schemas.listRevisions pubsub.schemas.validate pubsub.snapshots.get pubsub.snapshots.list pubsub.subscriptions.get pubsub.subscriptions.list pubsub.topics.get pubsub.topics.list resourcemanager.projects.get serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Google Cloud コンソールによるアクセス制御
Google Cloud Console を使用して、トピックやプロジェクトのアクセス制御を管理できます。
プロジェクト レベルでアクセス制御を設定するには、次の手順に沿って操作します。
Google Cloud コンソールの [IAM] ページに移動します。
プロジェクトを選択します。
[
追加] をクリックします。プリンシパル名を 1 つ以上入力します。
[ロールを選択] リストで、付与するロールを選択します。
[保存] をクリックします。
付与したロールにそのプリンシパルがリストされているかを確認します。
トピックとサブスクリプションに対するアクセス制御を設定するには、次の手順に沿って操作します。
Google Cloud コンソールで、Pub/Sub の [トピック] リストに移動します。
必要に応じて、Pub/Sub が有効なプロジェクトを選択します。
次のいずれかの手順に沿って操作します。
1 つ以上のトピックに対するロールを設定するには、トピックを選択します。
トピックに関連付けられたサブスクリプションのロールを設定するには、トピック ID をクリックします。[トピックの詳細] ページで、サブスクリプション ID をクリックします。[サブスクリプションの詳細] ページが表示されます。
情報パネルが表示されていない場合は、[情報パネルを表示] をクリックします。
[権限] タブで、[
プリンシパルを追加] をクリックします。プリンシパル名を 1 つ以上入力します。
[ロールを選択] リストで、付与するロールを選択します。
[保存] をクリックします。
IAM API によるアクセス制御
Pub/Sub IAM API を使用して、プロジェクト内の個々のトピックとサブスクリプションに対し、ポリシーを設定および取得して、所定のリソースに対するユーザーの権限をテストできます。通常の Pub/Sub メソッドと同様に、IAM API のメソッドはクライアント ライブラリや API Explorer を使用するか、または HTTP を介して直接呼び出すことができます。
Pub/Sub IAM API を使用して、Google Cloud プロジェクト レベルでポリシーを管理することはできません。
次のセクションでは、ポリシーの設定および取得方法、所定のリソースに対して呼び出し元がどの権限を持っているかをテストする方法について説明します。
ポリシーの取得
getIamPolicy()
メソッドを使用すると、既存のポリシーを取得できます。このメソッドでは、リソースに関連付けられたポリシーを含む JSON オブジェクトが返されます。
サブスクリプションのポリシーを取得するするためのサンプルコードを以下に示します。
C#
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API のリファレンス ドキュメントをご覧ください。
gcloud
サブスクリプション ポリシーを取得します。
gcloud pubsub subscriptions get-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json
出力:
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.admin", "members": [ "user:user-1@gmail.com" ] }, { "role": "roles/pubsub.editor", "members": [ "serviceAccount:service-account-2@appspot.gserviceaccount.com", "user:user-3@gmail.com" } ] }
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。
PHP
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の PHP の設定手順を実施してください。詳細については、Pub/Sub PHP API のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API のリファレンス ドキュメントをご覧ください。
トピックのポリシーを取得するためのサンプルコードを以下に示します。C#
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API のリファレンス ドキュメントをご覧ください。
gcloud
トピックのポリシーを取得するには、次のコマンドを実行します。
gcloud pubsub topics get-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ --format json
出力:
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role":" roles/pubsub.viewer", "members": [ "user:user-1@gmail.com" ] } ] }
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。
PHP
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の PHP の設定手順を実施してください。詳細については、Pub/Sub PHP API のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API のリファレンス ドキュメントをご覧ください。
ポリシーの設定
setIamPolicy()
メソッドを使用すると、ポリシーをリソースに接続できます。setIamPolicy()
メソッドは SetIamPolicyRequest
を受け取ります。ここには、設定されるポリシーと、ポリシーが接続されるリソースが含まれています。これにより、結果のポリシーが返されます。
サブスクリプションにポリシーを設定するためのサンプルコードを以下に示します。
C#
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API のリファレンス ドキュメントをご覧ください。
gcloud
1. サブスクリプションのポリシーを保存します。
gcloud pubsub subscriptions get-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json > subscription_policy.json
2. subscription_policy.json
を開き、適切なプリンシパルに適切なロールを与えてバインディングを更新します。subscription_policy.json
ファイルの操作の詳細については、IAM ドキュメントのポリシーをご覧ください。
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.admin", "members": [ "user:user-1@gmail.com" ] }, { "role": "roles/pubsub.editor", "members": [ "serviceAccount:service-account-2@appspot.gserviceaccount.com" } ] }
3. 新しいサブスクリプション ポリシーを適用します。
gcloud pubsub subscriptions set-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ subscription_policy.json
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。
PHP
Python
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API のリファレンス ドキュメントをご覧ください。
トピックにポリシーを設定するためのサンプルコードを以下に示します。
C#
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API のリファレンス ドキュメントをご覧ください。
gcloud
1. トピックのポリシーを保存します。
gcloud pubsub topics get-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ --format json > topic_policy.json
2. topic_policy.json
を開き、適切なプリンシパルに適切なロールを与えてバインディングを更新します。subscription_policy.json
ファイルの操作の詳細については、IAM ドキュメントのポリシーをご覧ください。
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.editor", "members": [ "user:user-1@gmail.com", "user:user-2@gmail.com" ] } ] }
3. 新しいトピックのポリシーを適用します。
gcloud pubsub topics set-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ topic_policy.json
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。
PHP
Python
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API のリファレンス ドキュメントをご覧ください。
権限のテスト
testIamPermissions()
メソッドを使用して、特定の権限のうち呼び出し元が特定のリソースに対して追加または削除することが可能な権限を確認できます。これはパラメータとしてリソース名と一連の権限を取得し、呼び出し元の権限のサブセットを返します。
サブスクリプションに対する権限をテストするためのサンプルコードを以下に示します。
C#
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API のリファレンス ドキュメントをご覧ください。
gcloud
gcloud iam list-testable-permissions \ https://pubsub.googleapis.com/v1/projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json
出力:
[ { "name": "pubsub.subscriptions.consume", "stage": "GA" }, { "name": "pubsub.subscriptions.delete", "stage": "GA" }, { "name": "pubsub.subscriptions.get", "stage": "GA" }, { "name": "pubsub.subscriptions.getIamPolicy", "stage": "GA" }, { "name": "pubsub.subscriptions.setIamPolicy", "stage": "GA" }, { "name": "pubsub.subscriptions.update", "stage": "GA" } ]
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。
PHP
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の PHP の設定手順を実施してください。詳細については、Pub/Sub PHP API のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API のリファレンス ドキュメントをご覧ください。
トピックに対する権限をテストするためのサンプルコードを以下に示します。
C#
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の C# の設定手順を実施してください。詳細については、Pub/Sub C# API のリファレンス ドキュメントをご覧ください。
gcloud
gcloud iam list-testable-permissions \ https://pubsub.googleapis.com/v1/projects/${PROJECT}/topics/${TOPIC} \ --format json
出力
[ { "name": "pubsub.topics.attachSubscription", "stage": "GA" }, { "name": "pubsub.topics.delete", "stage": "GA" }, { "name": "pubsub.topics.detachSubscription", "stage": "GA" }, { "name": "pubsub.topics.get", "stage": "GA" }, { "name": "pubsub.topics.getIamPolicy", "stage": "GA" }, { "name": "pubsub.topics.publish", "stage": "GA" }, { "name": "pubsub.topics.setIamPolicy", "stage": "GA" }, { "name": "pubsub.topics.update", "stage": "GA" } ]
Go
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Go の設定手順を実施してください。詳細については、Pub/Sub Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Java の設定手順を実施してください。詳細については、Pub/Sub Java API のリファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Node.js の設定手順を実施してください。詳細については、Pub/Sub Node.js API のリファレンス ドキュメントをご覧ください。
PHP
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の PHP の設定手順を実施してください。詳細については、Pub/Sub PHP API のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Python の設定手順を実施してください。詳細については、Pub/Sub Python API のリファレンス ドキュメントをご覧ください。
Ruby
このサンプルを試す前に、クイックスタート: クライアント ライブラリの使用の Ruby の設定手順を実施してください。詳細については、Pub/Sub Ruby API のリファレンス ドキュメントをご覧ください。
サンプル ユースケース: プロジェクト間通信
Pub/Sub IAM は、プロジェクト間の通信でアクセス権を適切に調整するのに便利です。たとえば、Cloud Project A のサービス アカウントで Cloud Project B のトピックにメッセージをパブリッシュする必要があるとします。これは、Cloud Project B でサービス アカウントに編集権限を付与することで行えます。ただし、このアプローチでは大まかすぎることがよくあります。IAM API を使用すれば、アクセスレベルをより詳細に調整できます。
たとえば、次のスニペットでは、project-b の setIamPolicy()
メソッドと用意されている topic_policy.json
ファイを使用して、トピック projects/
project-b/topics/
topic-b でのパブリッシャーのロールを project-a のサービス アカウント foobar@
project-a.iam.gserviceaccount.com
に付与します。
gcloud pubsub topics set-iam-policy \ projects/project-b/topics/topic-b \ topic_policy.json出力:
Updated IAM policy for topic topic-b. bindings: - members: - serviceAccount:foobar@project-a.iam.gserviceaccount.com role: roles/pubsub.publisher etag: BwWGrQYX6R4=
部分的に可用性を維持する動作
承認チェックは IAM サブシステムによって異なります。データ オペレーション(公開、メッセージの使用)のレスポンス レイテンシを低くするため、システムがキャッシュ内の IAM ポリシーにフォールバックする場合があります。変更が有効になるタイミングについては IAM のドキュメントをご覧ください。