AWS Secrets Managerから秘匿値を取得して環境変数を設定しコマンドを実行するツールを作った

envchainのバックエンドにAWS Secrets Managerを使ったようなツールを作った。

github.com

使い方

Secrets Managerに秘匿値を設定した上で

$ aws secretsmanager get-secret-value --secret-id foo/bar
{
  ...
  "SecretString": "BAZ",
  ...

$ aws secretsmanager get-secret-value --secret-id foo/zoo # JSON secret
{
  ...
  "SecretString": "{\"TOKEN\":\"AAA\",\"SECRET\":\"BBB\"}",
  ...

sevの設定ファル(~/.sev.toml)を作成し

[hello]
BAR = "secretsmanager://foo/bar"
ZOO = "secretsmanager://foo/zoo:TOKEN"
BAZ = "BAZBAZBAZ"

[world]
HOGE = "secretsmanager://foo/zoo:SECRET"
FOGA = "secretsmanager://foo/bar"
PIYO = "PIYOPIYOPIYO"

sevでラップしてプロファイル名を指定してコマンドを実行すると、秘匿値が環境変数経由でコマンドに渡される。

$ sev hello -- env
FOO=BAZ
ZOO=AAA
BAZ=BAZBAZBAZ

$ sev world -- env
HOGE=BBB
FUGA=BAZ
PIYO=PIYOPIYOPIYO

設定ファイルにAWS_PROFILEを指定しておくと、デフォルトではそのAWS_PROFILEを使ってSecrets Manager APIを呼び出す。

[hello]
AWS_PROFILE = "my-profile"
BAR = "secretsmanager://foo/bar"
# foo/barの値の取得にmy-profileが使われる