このページでは、サービス アカウントを使用して、仮想マシン(VM)インスタンス上で動作するアプリで Google Cloud APIs に対する認証を行い、リソースへのアクセスを承認できるようにする方法について説明します。
認証にサービス アカウントを使用するには、まず、サービス アカウントを使用するように VM が構成されていることを確認する必要があります。これを行うには、次のいずれかの手順に従います。
- VM の作成時にサービス アカウントを設定するには、ユーザー管理のサービス アカウントを使用する VM を作成するをご覧ください。
- 既存の VM にサービス アカウントを設定するには、接続されたサービス アカウントを変更するをご覧ください。
準備
- サービス アカウントの概要を確認します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud のサービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
ローカル開発環境でこのページの Python サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
詳細については Set up authentication for a local development environment をご覧ください。
概要
サービス アカウントを使用して実行するように VM インスタンスを設定したら、VM インスタンスで実行されるアプリケーションは、次のいずれかの認証方法を使用できます。
- ほとんどのアプリケーションでは、次のいずれかを選択します。
- OAuth2 アクセス トークンを必要とするアプリケーションでは、メタデータ サーバーから直接アクセス トークンをリクエストして使用する
サービス アカウントの認証情報を使用したアプリケーションの認証
サービス アカウントとして実行するようにインスタンスを設定した後で、サービス アカウントの認証情報を使用してインスタンス上で実行するアプリケーションを承認できます。
クライアント ライブラリを使用したアプリケーションの認証
クライアント ライブラリは、Google API で認証するために、アプリケーションのデフォルト認証情報を使用し、それらの API にリクエストを送信できます。アプリケーションは、アプリケーションのデフォルト認証情報により、複数のソースから認証情報を自動で取得できるため、アプリケーションをローカルでテストできます。テスト後は、アプリケーション コードを変更することなく、Compute Engine インスタンスにデプロイできます。
アプリケーションのデフォルト認証情報の設定については、アプリケーションのデフォルト認証情報に認証情報を用意するをご覧ください。
この例では、Python クライアント ライブラリを使用して認証を行い、プロジェクト内のバケットの一覧表示を行う Cloud Storage API にリクエストを行います。これは、次の手順により行います。
- Cloud Storage API に必要な認証情報を取得し、
build()
メソッドと認証情報を使用して Cloud Storage サービスを初期化します。 - Cloud Storage 内のバケットを一覧表示します。
このサンプルは、Cloud Storage 内のバケットを管理するためのアクセス権を持つインスタンスで実行できます。
アクセス トークンを使用したアプリケーション ディレクトリの認証
ほとんどのアプリケーションでは、アプリケーションのデフォルト認証情報を使用して認証を行えます。これは、認証情報を手に入れてトークンを管理します。ただし、アプリケーションで OAuth2 アクセス トークンを指定する必要がある場合は、Compute Engine でメタデータ サーバーからアクセス トークンを取得してアプリケーションで使用できます。
アプリケーションを認証するために、これらのアクセス トークンを取得して使用する方法は複数あります。たとえば、curl
を使用してシンプルなリクエストを作成することや、Python などのプログラミング言語を使用して柔軟性を高めることが可能です。
cURL
curl
を使用してアクセス トークンをリクエストして、API にリクエストを送信するには:
アプリケーションが実行するインスタンス上で、次のコマンドによってアクセス トークンのメタデータ サーバーをクエリします。
$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ -H "Metadata-Flavor: Google"
以下のようなレスポンスが返されます。
{ "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAS08i85nHq39HE3C2LTrCARA", "expires_in":3599, "token_type":"Bearer" }
API リクエストでは、レスポンス全体ではなく
access_token
値を含める必要があります。jq コマンドライン JSON プロセッサをインストールしている場合は、次のコマンドを使用して、レスポンスからアクセス トークンの値を抽出できます。$ ACCESS_TOKEN=`curl \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ -H "Metadata-Flavor: Google" | jq -r '.access_token'`
レスポンスから
access_token
プロパティの値をコピーし、その値を使用して API にリクエストを送信します。たとえば、次のリクエストでは、特定のゾーンからプロジェクト内のインスタンスのリストが出力されます。$ curl https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances \ -H "Authorization":"Bearer ACCESS_TOKEN"
以下を置き換えます。
PROJECT_ID
: このリクエストのプロジェクト IDZONE
: VM を一覧取得するゾーン。ACCESS_TOKEN
: 前のステップで取得したアクセス トークンの値。
リクエストに設定可能なパラメータの詳細については、システム パラメータのドキュメントを参照してください。
Python
この例では、Python アプリケーションで Cloud Storage API にアクセスするためにトークンをリクエストする方法を示します。これは、次の手順により行います。
- メタデータ サーバーのアクセス トークンをリクエストします。
- サーバーのレスポンスからアクセス トークンを取り出します。
- アクセス トークンを使用して Cloud Storage にリクエストを行います。
- リクエストが成功した場合、スクリプトによってレスポンスが出力されます。
アクセス トークンは短期間で失効します。メタデータ サーバーは、失効までの残り時間が 5 分になるまでアクセス トークンをキャッシュに保存します。トークンをキャッシュに保存できない場合、1 秒あたり 50 クエリを超えるリクエストにはレート制限が適用される可能性があります。API 呼び出しを成功させるには、アプリケーションに有効なアクセス トークンが必要です。
サービス アカウントを使用してインスタンス上のツールを承認する
一部のアプリケーションでは、Compute Engine の大部分のイメージにデフォルトで含まれている gcloud CLI のコマンドが使用されることがあります。gcloud CLI は、インスタンスのサービス アカウントと、そのアカウントに付与されている関連の権限を自動的に認識します。特に、サービス アカウントに正しいロールを付与すると、gcloud auth login
を使用せずに、インスタンスから gcloud CLI を使用できます。
サービス アカウントの認識は自動的に行われ、インスタンスに含まれている gcloud CLI にのみ適用されます。新しいツールを作成する場合や、カスタムツールを追加する場合は、クライアント ライブラリを使用するか、アプリケーション内で直接アクセス トークンを使用して、アプリケーションを承認する必要があります。
サービス アカウントの自動認識を利用するには、サービス アカウントに適切な IAM のロールを付与し、サービス アカウントをインスタンスに接続します。たとえば、サービス アカウントに roles/storage.objectAdmin
ロールを付与すると、gcloud CLI で、Cloud Storage のオブジェクトを自動的に管理してアクセスできます。
同様に、サービス アカウントに対して roles/compute.instanceAdmin.v1
を有効にすると、gcloud compute
ツールでインスタンスを自動管理できます。
次のステップ
- mTLS を使用してワークロード間で認証を行う。
- サービス アカウントの詳細を確認する。
- Compute Engine IAM のロールと権限を確認する。
- サービス アカウントの使用に関するベスト プラクティスを確認する。
使ってみる
Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオで Compute Engine のパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
Compute Engine の無料トライアル