最終更新日: 2026-08-27
TOP(About this memo)) > 一覧(Google Cloud) > IAM・サービスアカウント・ADC
Cloud Storage のエクスポート先の場合は、IAM を使用してシンクの書き込み ID をプリンシパルとして追加してから、ストレージ オブジェクト作成者のロール(roles/storage.objectCreator)をそれに付与します。
allUsers、allAuthenticatedUsersなど)
gcloud auth login(gcloudツールなど)やgcloud auth application-default login(Terraform等の場合)を使いましょう」という話。PROJECT_NUMBER-compute@developer.gserviceaccount.com)が作成される。gcloud --project [PROJECT_ID] iam service-accounts listで確認できる。DISPLAY NAME EMAIL DISABLED
myapp-cloud-run-sa myapp-cloud-run-sa@[PROJECT_ID].iam.gserviceaccount.com False
Default compute service account [PROJECT_NUMBER]-compute@developer.gserviceaccount.com False
roles/editor)ロールという広い範囲を操作できる権限が付いている。
roles/editor)では足りず、Secret Managerのシークレットアクセサー(roles/secretmanager.secretAccessor)ロールが必要。roles/iam.serviceAccountUser
--impersonate-service-accountフラグの使用はできない。roles/iam.serviceAccountTokenCreator)」を分けたいときのもの、と理解している(?)。ただし本番作業などで両者が分かれていると、自分自身で昇格できず管理者の作業に依存するため運用は面倒になりそう(IMO)。roles/iam.serviceAccountTokenCreator
--impersonate-service-accountフラグの使用ができる。CLOUDSDK_AUTH_IMPERSONATE_SERVICE_ACCOUNT={SA_EMAIL}環境変数、または--impersonate-service-account={SA_EMAIL}でなりすまして操作を実行できる。--impersonate-service-accountで指定)として、自身にロールを付与する。
gcloud projects get-iam-policy [PROJECT_ID]gcloud --project [PROJECT_ID] iam 〜とgcloud projects 〜 [PROJECT_ID]の2系統のコマンドがあるが、棲み分けの基準はよく分かっていない。GOOGLE_APPLICATION_CREDENTIALS環境変数に設定されたサービスアカウントキー(のファイルパス)
上記が設定されていない場合は、コードを実行しているリソースに関連付けられているサービスアカウントを使用する。
~/.config/gcloud/application_default_credentials.jsonに配置されたOAuth2の認証情報。これはgcloud auth application-default loginによって配置される。実行するとブラウザが起動してGoogleアカウントのログインが求められ、ログインしたユーザーの認証情報が配置される。// 例(Firebase)
app, err := firebase.NewApp(context.Background(), nil)
// 例(Cloud Storage)
storageClient, err := storage.NewClient(ctx)
サービスアカウントキーへのファイルパスをプログラムで直接渡す。
// 例(Firebase)
opt := option.WithCredentialsFile("path/to/serviceAccountKey.json")
app, err := firebase.NewApp(context.Background(), nil, opt)
// 例(Cloud Storage)
client, err := storage.NewClient(ctx, option.WithCredentialsFile(jsonPath))