1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Cloud で使うトークンについてのまとめ

Posted at

はじめに

Google Cloud(GC)を利用する際にトークンを利用する機会があります。例えば「認証が必要」設定のCloud Runにアクセスする場合などです。
そんなとき、どれが何のトークンだ?と困ってしまうことがありそうなので整理のためにまとめます。

アクセストークン

アクセストークンは、独自形式のトークンですJWT形式ではないトークンです。

アクセストークンは、次のコマンドで表示することができます。
gcloud auth print-access-token

JWTとは異なる文字列が出力されています。このトークンを用いて次のようなcurlコマンドを実行すると情報がかえってきます。
curl "https://oauth2.googleapis.com/tokeninfo?access_token=<ACCESS_TOKEN>"

{
  "azp": "~~~~~~~~~~~~~~~~~~~~~",
  "aud": "~~~~~~~~~~~~~~~~~~~~~",
  "sub": "~~~~~~~~~~~~~~~~~~~~~",
  "scope": "~~~~~~~~~~~~~~~~~~~~~",
  "exp": "1745298734",
  "expires_in": "3574",
  "email": "test@example.com",
  "email_verified": "true",
  "access_type": "offline"
}

各フィールドの内容は表の通りです。

フィールド名 概要
azp トークンをリクエストしたアプリケーションのプロジェクト、メール、またはサービス アカウント ID
aud アクセストークンのオーディエンス。トークンの受取先のサービスアカウントのIDなど
sub トークンのリクエストを行った実態を識別する一意のID
scope このアクセス トークンに追加された OAuth スコープ。トークンが付与された権限の範囲となる
exp トークンの有効期限をUNIX時間で表したもの。例で示した値はJTCにすると2025年04月22日 14:12:14となる
expires_in トークンが失効するまでの時間。デフォルトで1時間に設定されている
email トークンをリクエストしたユーザーのメールアドレス
email_verified トークンが失効するまでの時間。デフォルトで1時間に設定されている
access_type offlineの場合、初回認証時にリフレッシュトークンが発行されるonlineの場合発行されない。指定していないとonlineとして扱われる

用途

アクセストークンはGCの各種APIにアクセスする(実行する)際利用するトークンです。例えばCloud Storageなどへの認可ありリクエストを実行するときに用います。

IDトークン

IDトークンはOIDCに準拠したJWT形式のトークンです。

IDトークンは、次のコマンドで表示することができます。
gcloud auth print-identity-token

上記のコマンドを実行するとJWT形式のトークンが出力されます。このトークンを以下のcurlコマンドで実行するとトークンの情報を見ることができます。

curl "https://oauth2.googleapis.com/tokeninfo?id_token=<ID_TOKEN>"

{
  "iss": "https://accounts.google.com",
  "azp": "~~~~~~~~~~~~~~~~~~~~~",
  "aud": "~~~~~~~~~~~~~~~~~~~~~",
  "sub": "~~~~~~~~~~~~~~~~~~~~~",
  "hd": "~~~~~~~~~~~~~~~~~~~~~",
  "email": "test@example.com",
  "email_verified": "true",
  "at_hash": "~~~~~~~~~~~~~~~~~~~~~",
  "iat": "1745299988",
  "exp": "1745303588",
  "alg": "RS256",
  "kid": "~~~~~~~~~~~~~~~~~~~~~",
  "typ": "JWT"
}

各フィールドの内容は表の通りです。

フィールド名 概要
iss トークンを発行した主体(署名者) Google によって署名された ID トークンの場合、この値は https://accounts.google.com
azp トークンの発行者 トークンをリクエストしたアプリケーションのプロジェクト、メール、またはサービス アカウント ID
aud アクセストークンのオーディエンス。トークンの受取先のサービスアカウントのIDなど
sub トークンのリクエストを行った実態を識別する一意のID
hd ホストドメイン 組織に属している場合、組織のドメインになるようである
email トークンをリクエストしたユーザーのメールアドレス
email_verified トークンが失効するまでの時間。デフォルトで1時間に設定されている
at_hash IDトークンと対応するアクセストークンのハッシュ
iat トークンの発行時間をUNIX時間で表したもの。例で示した値はJTCにすると2025年04月22日 14:33:08となる
exp トークンの有効期限をUNIX時間で表したもの。例で示した値はJTCにすると2025年04月22日 15:33:08となる
alg JWTの署名に使用されたアルゴリズム
kid トークンを検証するための鍵を特定するために使用されるID。Googleの公開鍵の中でこのIDに対応しているものが使用される
kid トークンのタイプ

用途

主にCloud RunやCloud Functionの認証やIdentity Aware Proxy(IAP)によって保護されたアプリケーションへのアクセスなど

gcloud authgcloud auth application-default

アクセストークンを取得する際、以下のように2種類の方法でアクセストークンを出力することができます。

gcloud auth print-access-token
gcloud auth application-default print-access-token

これらの違いとして次のようなものがあります。

gcloud auth

主にgcloud CLIやSDK全体で使用される認証であり、ユーザーがgcloudコマンドを使って操作をする際に使用されるアカウント(資格)情報を取り扱います。

gcloud auth application-default

アプリケーションがGoogle Cloudの各種APIにアクセスしたり、コードからAPIにアクセスする際のアカウント(資格)情報を取り扱います。
例えば、terraformコマンドを実行する際に用いられるのはこちらで設定した資格情報です。

このように、gcloud authgcloud auth application-defaultでは資格情報を別々に管理しています。
そのため gcloud auth logingcloud auth application-default loginはどちらもブラウザ経由で認証するという似たような画面で設定しますが、認証情報が設定されるスコープは異なるため、間違ったほうにログインすると、できているはずなのに資格情報がない、や権限足りないというエラーに遭遇してしまうことになるということに注意が必要です。

おまけ

gcloud auth application-default loginで設定される認証情報はApplication Default Credentials (ADC) と呼ばれます。
ADCを取り扱う際に、gcloudでのログインのほかに、GOOGLE_APPLICATION_CREDENTIALSという環境変数を用いることができます。例えば、この環境変数にサービスアカウントのキーであるJsonファイルのファイルパスを指定することでそのサービスアカウントをADCの認証に用いることができます。

GOOGLE_APPLICATION_CREDENTIALSgcloud auth application-default loginを両方用いた場合、環境変数GOOGLE_APPLICATION_CREDENTIALSに設定された情報が優先されるということに気を付ける必要があります。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?