概要
Cloud Run のサービスに認証機構をつけたい場合は Identity-Aware Proxy ( IAP ) が推奨されます
しかし、 Cloud Load Balancing を設置したり Oauth 画面を設置したりしなくては行けず、すこし面倒です…
今回は Cloud Run の Permission だけで、 Web アプリを見れるやり方を試したいと思います
※ 今回は デプロイするアカウントと Cloud Run 上のアプリを見るアカウントは別の場合を想定しています
- Developer の A
- Cloud Run を使用している GCP Project 内で IAM などを変更出来る強い権限を持っている
- Viewer の X ( =
viewer-xxx@gmail.com
)- Cloud Run 上にデプロイされた特定のサービスだけを閲覧のみ出来るユーザ
- Cloud Run のページすら見れない
準備
A が Cloud Run に適当なサービスを 未公開
でデプロイします
今回は pkg-gcp-run-basic
というサービスがデプロイされています
A による IAM での作業
※ 今回は デプロイするアカウントと Cloud Run 上のアプリを見るアカウントは別の場合を想定しています
A が Cloud Run が動いている GCP Project の IAM にて、 X の Google アカウントに Cloud Run Invoker(roles/run.invoker)
を付与します
export _gcp_pj_id='Cloud Run を使用している GCP Project ID' export _run_service='pkg-gcp-run-basic' export _region='asia-northeast1' export _web_viewer_account='viewer-xxx@gmail.com'
gcloud beta run services add-iam-policy-binding ${_run_service} \ --region=${_region} \ --member="user:${_web_viewer_account}" \ --role='roles/run.invoker' \ --project ${_gcp_pj_id}
X の確認方法
X は自分の Google アカウントの ID トークンを利用することで Cloud Run のサービスを見ることが出来ます
- IDトークンの確認コマンド
gcloud beta auth print-identity-token ${_web_viewer_account}
上記で出力されたトークンをメモします
X がコマンドラインで確認
Cloud Run にデプロイしたサービスの URL が必要になります
export _run_service_url='Cloud Run にデプロイしたサービスの URL'
curl -H "Authorization: Bearer $(gcloud beta auth print-identity-token ${_web_viewer_account} )" ${_run_service_url}
### Sample # curl -H "Authorization: Bearer $(gcloud beta auth print-identity-token ${_web_viewer_account} )" ${_run_service_url} Hello World!! :D
---> 見ることが出来ました :D
X が Web ブラウザで確認
Web ブラウザにてヘッダを修正する必要があります
今回は ModHeader
を利用します
Request header に Authorization
を入れ、Value に Bearer [自分の ID トークン]
を入れましょう
---> Web ブラウザでも無事に表示できました :D
まとめ
Cloud Run の Permission だけの時のアクセス方法を試しました
簡易的な確認であればこの認証方法でも問題無さそうですね!
もちろん、本格的な運用を考える時は IAP を使うことを推奨します ;)
Have fan !! :)