{GCP}有効期間が短いサービス アカウント認証情報の作成



https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials?hl=ja
https://qiita.com/atsumjp/items/284fd8f7ad53b6586cf9

デフォルトでは、OAuth 2.0 アクセス トークンは最大 1 時間(3,600 秒)有効です。
ただし、これらのトークンの最大有効期間は 12 時間(43,200 秒)まで延長できます。

 


Compute Adminロールを付与したサービスアカウントを作成する
プリンシパルに上記サービスアカウント権限借用を許可する
lifetime=300秒でアクセストークンを作成する
サービスアカウント権限を借用した状態で、300秒間はvm一覧はできるが、その後はvm一覧はできないことを確認する

 

-- 1. 前作業

gcloud init
gcloud auth list

gcloud --version

gcloud projects create project01-9999999 \
--name="project01"

gcloud config list
gcloud config set project project01-9999999
gcloud config set compute/region asia-northeast1 --quiet
gcloud config set compute/zone asia-northeast1-a --quiet

gcloud beta billing accounts list
gcloud beta billing projects link project01-9999999 --billing-account=111111-111111-111111

gcloud services enable compute.googleapis.com --project project01-9999999

gcloud components update

 


-- 2. サービス アカウントの作成

gcloud iam service-accounts create sa99999999 \
--description="sa99999999" \
--display-name="sa99999999"

gcloud iam service-accounts list


gcloud projects add-iam-policy-binding project01-9999999 \
--member="serviceAccount:sa99999999@project01-9999999.iam.gserviceaccount.com" \
--role="roles/compute.admin"

gcloud projects get-iam-policy project01-9999999

gcloud iam service-accounts add-iam-policy-binding \
sa99999999@project01-9999999.iam.gserviceaccount.com \
--member='user:hoge@example.com' \
--role=roles/iam.serviceAccountTokenCreator

 

 

-- 3. lifetime=300秒でアクセストークンを作成する

※エラーになった場合は数分間待つ


curl -s -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"delegates":,"scope":["https://www.googleapis.com/auth/cloud-platform"],"lifetime":"300s"}'  \
"https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/sa99999999@project01-9999999.iam.gserviceaccount.com:generateAccessToken"

 


TOKEN=$(curl -s -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"delegates":,"scope":["https://www.googleapis.com/auth/cloud-platform"],"lifetime":"300s"}'  \
"https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/sa99999999@project01-9999999.iam.gserviceaccount.com:generateAccessToken" | jq -r .accessToken)

echo $TOKEN

 

-- 4. 動作確認

 

date

curl -H "Authorization: Bearer $TOKEN" \
https://compute.googleapis.com/compute/v1/projects/project01-9999999/aggregated/instances


300秒後エラーになることを確認

 


-- 5. クリーンアップ

gcloud projects list

gcloud projects delete project01-9999999 \
--quiet


gcloud beta billing projects unlink project01-9999999