このドキュメントでは、プログラムで Pub/Sub への認証を行う方法について説明します。 Pub/Sub に対する認証方法は、API へのアクセスに使用するインターフェースと、コードが実行されている環境によって異なります。
注: Cloud Pub/Sub では、認証方法として API キーを使用できません。Google Cloud 認証の詳細については、認証方法をご覧ください。
API アクセス
Pub/Sub はプログラムからのアクセスをサポートしています。次の方法で API にアクセスできます。
クライアント ライブラリ
Pub/Sub クライアント ライブラリでは、Pub/Sub に対する認証をプログラムによって行うための高度な言語サポートが提供されています。 Google Cloud API の呼び出しを認証するために、クライアント ライブラリではアプリケーションのデフォルト認証情報(ADC)がサポートされています。このライブラリは、一連の定義済みロケーションの中から認証情報を探し、それらの認証情報を使用して API へのリクエストを認証します。ADC を使用すると、アプリケーション コードを変更することなく、ローカルでの開発や本番環境など、さまざまな環境のアプリケーションで認証情報を使用できるようになります。
Google Cloud CLI
gcloud CLI を使用して Pub/Sub にアクセスする場合は、gcloud CLI コマンドで使用される認証情報を提供するユーザー アカウントで gcloud CLI にログインします。
組織のセキュリティ ポリシーによってユーザー アカウントに必要な権限が与えられない場合は、サービス アカウントの権限借用を使用できます。
詳細については、gcloud CLI を使用して認証するをご覧ください。Pub/Sub で gcloud CLI を使用する詳細については、gcloud CLI のリファレンス ページをご覧ください。
REST
Pub/Sub API の認証には、gcloud CLI 認証情報を使用するか、アプリケーションのデフォルト認証情報を使用します。REST リクエストの認証の詳細については、REST を使用して認証するをご覧ください。認証情報の種類については、gcloud CLI の認証情報と ADC の認証情報をご覧ください。
Pub/Sub のユーザー認証情報と ADC
認証情報を ADC に渡す 1 つの方法として、gcloud CLI を使用してユーザー認証情報を認証情報ファイルに挿入できます。このファイルは、ADC が検出できるローカル ファイル システムに配置されます。次に、ADC は指定されたユーザー認証情報を使用してリクエストを認証します。この方法は多くの場合、ローカルでの開発で使用されます。
この方法では、Pub/Sub の認証で認証エラーが発生することがあります。このエラーと対処方法について詳しくは、ユーザー認証情報が機能しないをご覧ください。
Pub/Sub の認証を設定する
認証の設定方法は、コードが実行されている環境によって異なります。
認証の設定には、次のオプションが最も一般的に使用されます。認証のその他のオプションと詳細については、認証方法をご覧ください。
ローカル開発環境の場合
ローカル開発環境の認証情報は、次の方法で設定できます。
クライアント ライブラリまたはサードパーティ ツール
ローカル環境でアプリケーションのデフォルト認証情報(ADC)を設定します。
-
Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
ローカルシェルを使用している場合は、ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
Cloud Shell を使用している場合は、この操作を行う必要はありません。
認証エラーが返され、外部 ID プロバイダ(IdP)を使用している場合は、 連携 ID を使用して gcloud CLI にログインしていることを確認します。
ログイン画面が表示されます。ログインすると、ADC で使用されるローカル認証情報ファイルに認証情報が保存されます。
ローカル環境での ADC の操作の詳細については、ローカル開発環境の ADC を設定するをご覧ください。
コマンドラインからの REST リクエスト
コマンドラインから REST リクエストを行う場合は、リクエストを送信するコマンドの一部として gcloud auth print-access-token を含めることで、gcloud CLI 認証情報を使用できます。
次の例では、指定したプロジェクトのサービス アカウントを一覧表示します。どの REST リクエストに対しても、同じパターンを使用できます。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。
リクエストを送信するには、次のいずれかのオプションを展開します。
REST と gRPC を使用した認証の詳細については、REST の使用に対する認証をご覧ください。ローカル ADC 認証情報と gcloud CLI 認証情報の違いについては、gcloud CLI 認証構成と ADC 構成をご覧ください。
サービス アカウントの権限借用
ほとんどの場合、ユーザー認証情報を使用してローカル開発環境から認証できます。これが不可能な場合、またはサービス アカウントに割り当てられた権限をテストする必要がある場合は、サービス アカウントの権限借用を使用できます。iam.serviceAccounts.getAccessToken 権限が必要です。この権限は、サービス アカウント トークン作成者(roles/iam.serviceAccountTokenCreator)IAM ロールに含まれています。
サービス アカウントの権限借用を使用するように gcloud CLI を設定するには、gcloud config set コマンドを使用します。
gcloud config set auth/impersonate_service_account SERVICE_ACCT_EMAIL
一部の言語では、サービス アカウントの権限借用を使用して、クライアント ライブラリで使用するローカル ADC ファイルを作成できます。このアプローチは、Go、Java、Node.js、Python のクライアント ライブラリでのみサポートされています。他の言語ではサポートされていません。サービス アカウントの権限借用を使用してローカル ADC ファイルを設定するには、gcloud auth application-default login コマンドで --impersonate-service-account フラグを使用します。
gcloud auth application-default login --impersonate-service-account=SERVICE_ACCT_EMAIL
サービス アカウントの権限借用の詳細については、サービス アカウントの権限借用を使用するをご覧ください。
オン Google Cloud
Google Cloudで実行されるワークロードを認証するには、Compute Engine 仮想マシン(VM)インスタンスなど、コードが実行されているコンピューティング リソースに関連付けられているサービス アカウントの認証情報を使用します。このアプローチは、 Google Cloud コンピューティング リソースで実行されるコードに対して推奨される認証方法です。
ほとんどのサービスでは、コードを実行するリソースの作成時にサービス アカウントを関連付ける必要があります。サービス アカウントを後から追加または置換することはできません。Compute Engine は例外で、サービス アカウントをいつでも VM インスタンスに関連付けることができます。
gcloud CLI を使用してサービス アカウントを作成し、リソースに関連付けます。
-
Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud init外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
認証を設定します。
-
サービス アカウントの作成 IAM ロール(
roles/iam.serviceAccountCreator)とプロジェクト IAM 管理者ロール(roles/resourcemanager.projectIamAdmin)があることを確認します。ロールを付与する方法を確認する。 -
サービス アカウントを作成します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAMEをサービス アカウントの名前に置き換えます。 -
プロジェクトとリソースへのアクセス権を付与するには、サービス アカウントにロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
以下を置き換えます。
SERVICE_ACCOUNT_NAME: サービス アカウントの名前PROJECT_ID: サービス アカウントを作成したプロジェクト IDROLE: 付与するロール
- サービス アカウントに別のロールを付与するには、前の手順で行ったようにコマンドを実行します。
-
サービス アカウントを他のリソースに関連付けるプリンシパルに必要なロールを付与します。
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser
次のように置き換えます。
SERVICE_ACCOUNT_NAME: サービス アカウントの名前PROJECT_ID: サービス アカウントを作成したプロジェクト IDUSER_EMAIL: Google アカウントのメールアドレス
-
サービス アカウントの作成 IAM ロール(
-
コードを実行するリソースを作成し、そのリソースにサービス アカウントを関連付けます。たとえば、Compute Engine を使用する場合は次のようになります。
Compute Engine インスタンスを作成します。インスタンスを次のように構成します。-
INSTANCE_NAMEを必要なインスタンス名に置き換えます。 -
インスタンスを作成するゾーンに
--zoneフラグを設定します。 -
--service-accountフラグに、作成したサービス アカウントのメールアドレスを設定します。
gcloud compute instances create INSTANCE_NAME --zone=ZONE --service-account=SERVICE_ACCOUNT_EMAIL
-
Google API に対する認証について詳しくは、認証方法をご覧ください。
オンプレミスまたは別のクラウド プロバイダ
Google Cloud の外部から認証を設定する際に推奨される方法は、Workload Identity 連携を使用することです。詳細については、認証ドキュメントのオンプレミスまたは他のクラウド プロバイダの ADC を設定するをご覧ください。
Pub/Sub のアクセス制御
Pub/Sub の認証後、 Google Cloud リソースへのアクセスが認可される必要があります。Pub/Sub では、Identity and Access Management(IAM)を使用して認可を行います。
Pub/Sub のロールの詳細については、IAM を使用したアクセス制御をご覧ください。IAM と承認の詳細については、IAM の概要をご覧ください。
次のステップ
- Pub/Sub OAuth 2.0 スコープの詳細を確認する。
- Google Cloud での認証方法について学習する。
- 認証のユースケースを確認する。