GitHub ActionsでAWS Secrets ManagerのJSONパース時のprefixを削除
GitHub Actionsでアプリケーションのビルドをする際に、AWS Secrets Managerで管理している秘匿情報などを環境変数に設定して利用したいとき、aws-actions/aws-secretsmanager-get-secrets
を使うと非常に便利です。ちょっとした設定だけでGitHub Actions上でAWS Secrets Managerの情報を扱えるようになります。
AWS Secrets Managerではプレーンテキスト以外にもJSON形式(Key-value)もサポートされていて、複数の秘匿情報を扱うのが楽になります。aws-actions/aws-secretsmanager-get-secrets
ではJSONを自動でパースするオプションがあります。
- name: Step name
uses: aws-actions/aws-secretsmanager-get-secrets@v1
with:
secret-ids: |
ENV_FOO_BAR, foo-bar
parse-json-secrets: true
とても便利です。しかしこれは、展開する環境変数名にprefixが自動で付きます。例えば上記のYAMLの場合、以下のJSONをSecrets Managerに登録していた場合…
// Secrets Managerに登録したJSON
{
"key1": "value1",
"key2": "value2"
}
以下のように ENV_FOO_BAR_
のprefixがついた状態で環境変数が展開されます。
ENV_FOO_BAR_KEY1=value1
ENV_FOO_BAR_KEY2=value2
このままだと環境変数を使うアプリケーション側で対応が必要になり、GitHub Actions依存の命名になってちょっと嫌な感じです。このprefixを付けないオプションがIssueで提案されてますが、今のところ反応はありません。
そこでGitHub Actions上でprefixを取り除いて環境変数にセットするようにしてみます。対応はシンプルでBashスクリプトで削除し、GitHub Actions全体で利用できるように書き出すだけです。
- name: Get secrets from AWS Secrets Manager
id: get-aws-secret
uses: aws-actions/aws-secretsmanager-get-secrets@v1
with:
secret-ids: |
ENV_FOO_BAR, foo-bar
parse-json-secrets: true
- name: Remove prefix from secrets
run: |
for variable in "${!ENV_FOO_BAR_@}"; do
echo "${variable#ENV_FOO_BAR_}=${!variable}" >> $GITHUB_ENV
done
これで KEY1
や KEY2
という環境変数で使えるようになります。$GITHUB_ENV
というのはGitHub Actionsの各ステップで再利用できる環境変数ファイルです。これでアプリケーション側は何も対応をしなくても済むようになりました。
Discussion