GCP (Google Cloud Platform) の API を使うための認証・認可は OAuth 2.0 で、
サーバーでの使い方は Using OAuth 2.0 for Server to Server Applications に書かれている。
結論としては Google Application Default Credentials (ADC) を使い、OAuth 2.0 Access Token を取得して使う。
ADC は AWS での Default Credential Provider Chain にあたる。
ADC とは
次のロジックで得られる credentials が ADC と呼ばれる。
- 環境変数
GOOGLE_APPLICATION_CREDENTIALS
が指定されていたら、そのファイルを service account の credentials として読んで使う -
gcloud auth application-default login
を実行して well_known_file が作成済みであれば、それを authorized user の credentials として読んで使う - GAE (Google App Engine) 上で実行されていれば、その built-in service account を使う
- GCE (Google Compute Engine) 上で実行されていれば、その build-in service account を使う
- ここまで該当がなければエラーとする
well_known_file について
$ gcloud auth application-default login
を実行すると作成される。
デフォルトだと ~/.config/gcloud/application_default_credentials.json
環境変数 CLOUDSDK_CONFIG
が指定されていれば $CLOUDSDK_CONFIG/application_default_credentials.json
Access Token を取得する
service account か authorized user の credentials を使う場合は、
然るべきリクエストを作ってトークンエンドポイントに POST する。
GCE の場合はメタデータサーバーに GET する。
Access Token を使って API を叩く
取得した access token を Authorization ヘッダに Bearer 形式で入れる。
Authorization: Bearer xxxx.yyyyyyyyyyyyy
使うとき
Google 的に優先度高い言語 は公式ライブラリが用意されていて、マニュアル見て使えばよい。
Elixir はライブラリが無かったので作った。
https://github.com/aktsk/gcp_auth
Top comments (0)