あるチームがAWS CodeBuildのbuildspec.ymlを作成している。ビルドステージで環境変数として使うデータベースのパスワードを安全に管理したい。buildspec.ymlにパスワードを直接記載せず、かつCodeBuildの実行時に自動的に値を取得させる最も適切な方法はどれか。
- A. AWS Secrets ManagerまたはAWS Systems Manager Parameter StoreにパスワードをSecureStringとして保存し、buildspec.ymlのenv/secretsまたはenv/parameter-storeセクションで参照する
- B. S3バケットにパスワードを格納した設定ファイルを配置し、buildフェーズで aws s3 cp コマンドを使ってダウンロードする
- C. buildspec.ymlのenvironmentセクションにpassword変数を定義し、GitリポジトリのREADMEには記載しないようにする
- D. CodeBuildプロジェクトの環境変数設定でパスワードを平文で設定し、buildspec.ymlからはその変数名で参照する
解答と解説を見る
正解: A
AWS Secrets ManagerまたはSSM Parameter StoreのSecureStringにシークレットを格納し、buildspec.ymlのenv/secretsセクション(Secrets Manager用)またはenv/parameter-storeセクション(Parameter Store用)で参照することで、パスワードをコードに一切含めずに安全に取得できる。CodeBuildのサービスロールに適切なIAMポリシーを付与するだけで実現可能である。Cはbuildspec.ymlに直接値を書く方法であり、GitリポジトリにコミットされるとパスワードがGitの履歴に残る危険がある。Dはコンソールで平文設定するためAWSコンソールやAPIの権限があれば閲覧可能となり、Secrets Managerより保護レベルが低い。BはS3バケットへのアクセス管理が必要になり、パスワードが設定ファイルに平文で存在するリスクもある。
📚 関連サービスの解説: AWS Secrets Manager ・ AWS Systems Manager