env-injectorをSecrets Managerに対応させました。
AWS Secrets Managerリリースされましたね。
そんなわけでenv-injectorをSecrets Managerに対応させました。
ダウンロードはgithubのリリースページからどうぞ。
使い方は、こんなカンジでSecretが登録されている状態で
$ aws secretsmanager get-secret-value --secret-id prd/db --query SecretString --output text {"DB_USER":"scott","DB_PASSWORD":"tiger"}
ENV_INJECTOR_SECRET_NAME
を指定して任意のコマンド実行すれば、環境変数が設定された状態でそのコマンドが実行できます。
$ export ENV_INJECTOR_SECRET_NAME=prd/db $ env-injector printenv | grep DB_ DB_USER=scott DB_PASSWORD=tiger
必要なIAMのポリシーはこんな感じです。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:prd/db-*" ] } ] }
もちろん今まで通り、ENV_INJECTOR_PATH
やENV_INJECTOR_PREFIX
での指定も引き続き有効です。
まあココまでだとシンプルなんですけど、Secrets ManagerはRDS等対象コンポーネント毎にシークレットを管理するものっぽいので env-injectorの「アプリケーションで使うシークレットを管理する」という方向性とちょっとズレがあります。
というわけで、複数のSecretやパラメータストアと組み合わせるような機能も追加しました。
以下のようにSecretやパラメータストアの設定のyamlをパラメータストアに保存しておいて
$ aws ssm get-parameter --name /meta/prd/wap.yaml --query Parameter.Value --output text # secretの名前を指定 - secret_name: prd/db1 # RDSのsecretとかだと同じkeyでクレデンシャルが保存されるので、 # 複数になったときに区別をつけるためのprefix(オプション) env_prefix: db1 # 環境変数にする際にkeyを大文字化したい場合に指定する(オプション) capitalize: true - secret_name: prd/db2 env_prefix: db2 capitalize: true # その他、パラメータストアからも読み出し可能 # (ENV_INJECTOR_PATHで指定するのと同じ機能) - parameter_store_path: /prod/wap
あとは ENV_INJECTOR_META_CONFIG
でyamlのパスを指定して任意のコマンドを実行するだけ。
$ export ENV_INJECTOR_META_CONFIG=/meta/prd/wap.yaml $ env-injector printenv DB1_USERNAME=alice DB1_PASSWORD=hogehoge DB1_HOST=xxxx.ap-northeast-1.rds.amazonaws.com DB1_PORT=3306 (中略) DB2_USERNAME=bob DB2_PASSWORD=mogemoge DB2_HOST=yyyy.ap-northeast-1.rds.amazonaws.com DB2_PORT=3306 (中略) SOME_OTHER_CONFIG_FROM_PARAMETER_STORE=hogeohge
これで既にパラメータストアで管理していたクレデンシャルのうち、一部をSecrets Managerに移行する、とかもできるようになりました。
そんなこんなで、引き続きご利用いただけると、ウレシイですー
……対応しといてアレなのですが、Secrets Managerってパラメータストアと違ってオカネかかるし、機能的にも大きく変わらない(lambdaでローリング更新するのはパラメータストアでもできる)し、ぶっちゃけパラメータストアでええのんちゃうん?という気がしています。(;・∀・)
はてさて、どーなんすかね?