Carpe Diem

備忘録

gcloud auth login と gcloud auth application-default login

概要

ローカルからGCPにアクセスする際に使う

  • gcloud auth login
  • gcloud auth application-default login

について区別できるようまとめます。

環境

  • gcloud v340.0.0

gcloud auth login

用途

こちらはローカルで以下のようなGCPCLIを実行する際の認証を得るために使います。

  • gcloud (GCPAPI全般)
  • bq (BigQuery)
  • gsutil (Cloud Storage)
  • cbt (Bigtable)
  • etc...

認証情報の場所

~/.config/gcloud/credentials.dbにあります。

これはsqlight3のデータベースなので、データを見たい場合は以下のようにコマンドを実行します。

$ sqlite3 credentials.db
sqlite> SELECT * from credentials;

中身は以下のようなフォーマットになっています。

<YOUR_EMAIL>|{
  "client_id": "xxxx.apps.googleusercontent.com",
  "client_secret": "xxxx",
  "refresh_token": "xxxx",
  "revoke_uri": "https://accounts.google.com/o/oauth2/revoke",
  "scopes": [
    "openid",
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/cloud-platform",
    "https://www.googleapis.com/auth/appengine.admin",
    "https://www.googleapis.com/auth/compute",
    "https://www.googleapis.com/auth/accounts.reauth"
  ],
  "token_uri": "https://oauth2.googleapis.com/token",
  "type": "authorized_user"
}

アカウントの切り替え

複数アカウント or 複数プロジェクトを管理している場合、

$ gcloud config configurations list

NAME        IS_ACTIVE  ACCOUNT                  PROJECT
p01         False      jun06t@hoge.com          project01
p01_admin   False      admin@hoge.com           project01
p02         False      jun06t@hoge.com          project02
default     False      jun06t@gmail.com         project03
playground  True       my_playground@gmail.com  project04

で一覧と現在使用しているアカウントやプロジェクトを見ることができます。

IS_ACTIVEが現在使っているアカウント&プロジェクトで、例えばproject02に切り替えたい場合は

$ gcloud config configurations activate p02

とします。

gcloud auth application-default login

用途

こちらはGoやら各言語でのSDKを使ったプログラムを実行する際の認証を得るために使います。

例えばBigQueryのライブラリである

bigquery package - cloud.google.com/go/bigquery - Go Packages

を使って「ローカルから実行してみよう」となったときに認証情報をサービスアカウントからわざわざ鍵生成して用意しなくとも

$ gcloud auth application-default login

でローカルに認証情報を持っていれば、ローカルから実行できます。

認証情報の場所

~/.config/gcloud/application_default_credentials.jsonにあります。

以下のフォーマットになっています。

{
  "client_id": "xxxx.apps.googleusercontent.com",
  "client_secret": "xxx",
  "quota_project_id": "xxxx",
  "refresh_token": "xxxx",
  "type": "authorized_user"
}

アカウントの切り替え

application_default_credentials.jsonは1つの認証情報しか保持しないため、複数アカウントを持っていて切り替えたい場合はその都度使いたいアカウントで

$ gcloud auth application-default login

を実行して認証し、クレデンシャルを再生成する必要があります。

gcloud auth loginではプロジェクトも分かれて管理されていましたが、

NAME        IS_ACTIVE  ACCOUNT                  PROJECT
p01         False      jun06t@hoge.com          project01
p01_admin   False      admin@hoge.com           project01
p02         False      jun06t@hoge.com          project02
default     False      jun06t@gmail.com         project03
playground  True       my_playground@gmail.com  project04

こちらはアカウントのみです。

なので上記で説明するとmy_playground@gmail.comで認証した状態であればproject04のみ扱えますし、jun06t@hoge.comで認証した状態あればproject01project02の両方で利用可能です。

参考