env-injectorを階層化パラメータに対応させた
引き続きコレの件。
最初に
前のエントリの追記で、 ENV_INJECTOR_MODE
に対応とか書いてたけど、どうも git push
を忘れていた模様。orz…
今回の修正で大体ユースケースカバーできそうなので、もうこのままなかったことにします(ぉ
階層化パラメータ
DescribeParametersでは対象のパラメータをIAMでリソース制限できないのがちょっとアレかなぁと思って 今までのenv-injectorは、inject対象リスト作成のためにあえて事前に空の環境変数を用意するようにしてました。
でもアップデートで対応された階層化されたパラメータに対してGetParametersByPathを使えば必要なパラメータだけに絞ったアクセス許可をIAMで設定できます。
というわけでenv-injectorでも対応してみました。
必要なIAMのポリシーはこんな感じで
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParametersByPath" ], "Resource": [ "arn:aws:ssm:ap-northeast-1:123456789012:parameter/prod/wap" ] } ] }
こんなカンジでパラメータが設定されているときに
$ aws ssm get-parameters-by-path --with-decryption --path /prod/wap { "Parameters": [ { "Type": "String", "Name": "/prod/wap/DB_USER", "Value": "scott" }, { "Type": "SecureString", "Name": "/prod/wap/DB_PASSWORD", "Value": "tiger" } ] }
ENV_INJECTOR_PATH
を指定して実行するだけ。
$ ENV_INJECTOR_PATH=/prod/wap env-injector printenv | grep DB_ DB_USER=scott DB_PASSWORD=tiger
DescribeParametersのような制限の効かないパーミションも不要ですし、AWS的にも階層化されたパラメータ推しっぽいので今後はこっちを使うとイイトオモイマス。
意図しないパラメータがinjectされるかも、、、という懸念は残りますが、、、ま、いっか、ということで。(;・∀・)
そんなわけで今後もenv-injectorをよろしくお願いします。
AWS環境下で動かすDockerのイメージのENTRYPOINTに仕込んでおくと本当に便利なので、是非使ってみてください