Spring Cloud GCP で Secret Manager に登録した秘密情報をアプリケーションの設定値として設定できるようにした
ただ、このアプリケーションをこれまで通りローカルでmvn appengine:deploy
でAppEngineにデプロイしようとしたら以下のエラーが出てしまった
[INFO] GCLOUD: *************************** [INFO] GCLOUD: APPLICATION FAILED TO START [INFO] GCLOUD: *************************** [INFO] GCLOUD: [INFO] GCLOUD: Description: [INFO] GCLOUD: [INFO] GCLOUD: Failed to bind properties under 'my-project.auth.key' to java.lang.String: [INFO] GCLOUD: [INFO] GCLOUD: Property: staylist.homestay.auth.key [INFO] GCLOUD: Value: ${sm://projects/my-project/secrets/auth-key} [INFO] GCLOUD: Origin: class path resource [application.yml]:146:12 [INFO] GCLOUD: Reason: PERMISSION_DENIED: Permission 'secretmanager.versions.access' denied for resource 'projects/my-project/secrets/auth-key/versions/latest' (or it may not exist). [INFO] GCLOUD: [INFO] GCLOUD: Action: [INFO] GCLOUD: [INFO] GCLOUD: Update your application's configuration
明らかに権限不足といっているメッセージなのだが、自分のユーザアカウントのロールは「オーナー」でフル権限だったので、なぜ?と思ってしまった
必要だったのはAppEngine側にSecret Mangerの権限
AppEngineのサービスアカウントに以下の権限をつけたら解決した
secretmanager.viewer
:秘密情報のバージョンなどのメタデータが表示できるが、編集したり、アクセスできないsecretmanager.secretAccessor
:秘密情報にアクセスできるが、作成、編集ができない