Zenn
Closed11

Google App Engine で デプロイ時に Secret Manager から環境変数を読み込みたい

ピン留めされたアイテム
waddy_uwaddy_u

app.env.yml がほしいならデプロイ時につくればいいじゃない

と、@bisque氏。
天才か!??!?!?!

要は

  • デプロイ時に
  • SecretManagerから
  • RAILS_MASTEWR_KEY を環境変数に展開する

ことさえできればいので、これで要件が満たせる…!

cloudbuild.yml
steps:
  # Secret Manager から RAILS_MASTER_KEY を読み込んで env.yml を生成する
  - id: decrypt-key
    name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
      - '-eEuo'
      - 'pipefail'
      - '-c'
      - |-
        cat <<EOF > ./app.env_key.yml
        env_variables:
          RAILS_MASTER_KEY: $$RAILS_MASTER_KEY
        EOF
    dir: "backend"
    secretEnv: ["RAILS_MASTER_KEY"]

そうして、デプロイ直前にファイルが作られるので、

app.yml
includes:
  # RAILS_MASTER_KEYだけは `app.env_key.yml` から読み込む
  - ./app.env_key.yml
  - ./app.env.yml

app.yml をこのようにしておけば RAILS_MASTER_KEY が環境変数展開される。無事実現できました

waddy_uwaddy_u

ビルド時の環境ごとの差分をなるべくなくして、検証と本番で共通イメージを使いたい

そのために、現状Railsアプリケーションでビルド時に復号しているproduction.keyを、デプロイ時にSecretManagerから取得したい。

App Engine のあとに Secret Manager がGAした時系列もあってか、「KMSを使って復号すればええんじゃないか論」が世の中には多いきがする。

https://stackoverflow.com/questions/50009948/gae-how-to-deploy-various-environments-with-secrets

waddy_uwaddy_u

gcloud app deploy コマンドで環境変数を渡せればそれでいい

環境変数を直接渡す

https://cloud.google.com/sdk/gcloud/reference/app/deploy

難しそう。

app.yml で環境変数から設定する

ようするに

app.yml
env_variables:
  ORG: ${ORG}
  ACCESS_TOKEN: ${ACCESS_TOKEN}
  SESSION_SECRET: ${SESSION_SECRET}

これができればいいのだけど…

https://stackoverflow.com/questions/22669528/securely-storing-environment-variables-in-gae-with-app-yaml

無理そう😇

https://dev.to/mungell/google-cloud-app-engine-environment-variables-5990

↑テンプレート文字列で置き換えるだってぇ!?さすがにこれはちょっとやりすぎ感が…

waddy_uwaddy_u

2択?

  • 起動前にbashなりで Secret Manager から 環境変数に展開する
  • 起動時に applicaiton.rb で Secret Manager から環境変数に展開する
waddy_uwaddy_u

起動時に applicaiton.rb で Secret Manager から環境変数に展開する

SDKとか使えそうだけど、ローカルで完結しなくなるからやめたほうがよさそう。

waddy_uwaddy_u

起動前にbashなりで Secret Manager から 環境変数に展開する

こっちができればそれが良い。entrypoint で bash スクリプトを指定できれば。

App Engine で gcloud は使える?

使えない。この方法は複雑になりそう。やめたほうがよさそう。

waddy_uwaddy_u

起動順

https://yk5656.hatenadiary.org/entry/20140805/1407584394

引用
 [
"environment.rb",
"application.rb",
"boot.rb",
"environments/development.rb",
"initializers/backtrace_silencers.rb",
"initializers/filter_parameter_logging.rb",
"initializers/inflections.rb",
"initializers/mime_types.rb",
"initializers/secret_token.rb",
"initializers/session_store.rb",
"initializers/wrap_parameters.rb",
"routes.rb"
]

クレデンシャルの情報を initilizers で使うことを考えると、application.rb で展開するのがよさそう。

このスクラップは2022/03/09にクローズされました
ログインするとコメントできます