CodeBuildの環境情報を外部に出す
AWSを利用したCI/CDで、ビルドが必要な場合に利用することになるCodeBuild。
CodeBuildで行われるビルドの詳細設定はbuildspec.yamlというファイルに記述することになります。
ビルドの設定を書く際には参照する他リソースのarnや、アクセスキー等の情報が必要となるケースがあります。
しかし通常のプログラムと同様に、環境情報を直接ファイルに書くのは、セキュリティや水平展開の面でアンチパターンとなります[1]。
そこでCodeBuildはenvパラメーターの中で外部から環境情報を読み込むことができます。
ここで設定できる環境情報はCodeBuild自体に設定された値も参照できますが、SSMパラメーターストアやSecretsManagerからも直接読み込めます。
env:
parameter-store:
ssm_parameter: "[パラメーターの名前]"
secrets-manager:
secret_parameter: "[シークレットの名前]:[シークレットのキー]"
phases:
pre_build:
commands:
- PARAM1=${ssm_parameter}
- PARAM2=${secret_parameter}
#以下省略.どちらの値もログ出力では***になる.
またIAMロールに対応するサービス(今回であればパラメーターストアとシークレットマネージャー)の読み込みポリシーをアタッチするのを忘れずに。ないと権限がないとエラーが出てきます。
(ただこの時の権限エラーは、何の権限がないか出てくれるので非常にわかりやすいです。)
余談ですがパラメーター名にハイフンを含めないようにしましょう。
シェルスクリプトはハイフンを用いたパラメーター名を使うことができないです。
これでひっかかった
その他のbuildspec.yamlの詳細な記述については公式ドキュメント[2]が参考になるかと思います。