#はじめに
以前の記事の続きです。
Service Accountの権限でAPIを実行する際、テンポラリのアクセストークンを取得してそのトークンで認証認可を行いますが、curlコマンドで期限を設定してトークン発行してみます。
マニュアルとしては以下にになります。
https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials?hl=ja#sa-credentials-delegated-chain
#やってみる
以前の記事通りに環境を構築する。ただし赤枠のIAM RoleはStorage Adminに変更する。確認がシンプルになるので。
アクセストークンを作成する。lifetimeとして300秒を指定する。権限自体は、Google Accountの権限を「-H "Authorization: Bearer」で指定する。expireTimeが設定されたアクセストークンが返される。
$ curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud config config-helper --format=json | jq -M -r '.credential.access_token')" --data '{"delegates":[],"scope":["https://www.googleapis.com/auth/cloud-platform"],"lifetime":"300s"}' https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/impersonate-sa@PROJECTID.iam.gserviceaccount.com:generateAccessToken
{
"accessToken": "ya29.c.KoACywdSv_9HHqVsRelOtuhIOhDKDXdrtGth8GC1JRBsVtRdantYmT6dHs0QgQqOYHYj_mjeF3OKAE9yR5eBXCJkAXhFvpceMAyJVt31X-k2s8wfLdJ2elsChV6FdRDlrKuBcf47_CODus2UPAwvUzVoCCUugoo_6NqX7MML6FsCFIXW_qMN0jqQYQllHjG0gqzsuTrgeRBuA1UL4c1hRDR759tiSXExWWp5V9CU6qsXFPYsv7RGkbC_pINwaOpLF7IEzg0ow9H38lIOsBYJyKCMuB-GIuu-U9YsIfE6KzEn0tZxlTx3b_lTc3aFpJBhPz0By33E61V-************",
"expireTime": "2020-05-18T03:28:36Z"
}
作成したアクセストークンを指定して、GCSのバケット情報を確認する。
$ curl -H "Authorization: Bearer ya29.c.********************************" https://www.googleapis.com/storage/v1/b/sample_aaaaabbbbbcccccc/o
{
"kind": "storage#objects",
"items": [
{
"kind": "storage#object",
"id": "sample_aaaaabbbbbcccccc/README-cloudshell.txt/1582881792887319",
300秒後、再度確認するとアクセストークンの期限が切れていて失敗する。
$ curl -H "Authorization: Bearer ya29.c.********************************" https://www.googleapis.com/storage/v1/b/sample_aaaaabbbbbcccccc/o
{
"error": {
"code": 401,
"message": "Invalid Credentials",