CodeBuild レポートグループのエクスポートデータ暗号化を有効化する設定手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、 「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、CodeBuild レポートグループのエクスポートデータ暗号化を有効化する設定手順について、リスクと対策を解説します。

ポリシーの説明
AWS CodeBuildは、ソースコードのコンパイル、テスト実行、ソフトウェアパッケージの作成を行うフルマネージド型のビルドサービスです。CodeBuildのテストレポートグループは、テスト結果を収集・整理し、S3バケットにエクスポートすることができます。このエクスポートデータにはソースコードの情報、テスト結果、環境変数、エラーメッセージなど、機密性の高い情報が含まれる可能性があります。これらのデータを暗号化することで、不正アクセスから保護し、データの機密性を確保します。
修復方法
コンソールでの修復手順
AWSのコンソールを使用して、CodeBuildレポートグループのエクスポートデータ暗号化を有効にします。
- AWSマネジメントコンソールにログインし、CodeBuildサービスに移動します
- 左側のナビゲーションペインから「レポートグループ」を選択します
- 暗号化を設定したいレポートグループを選択します(新規作成する場合は「レポートグループの作成」をクリック)
- 「編集」ボタンをクリックします(新規作成の場合はそのまま進みます)

- 「エクスポート」セクションまでスクロールします
- 「S3にエクスポート」を有効にします
- エクスポート先のS3バケットを選択または作成します
- 「暗号化」セクションで「暗号化を有効にする」にチェックを入れます
- 暗号化キーとして「AWS管理キー」または「カスタマー管理キー」を選択します
- カスタマー管理キーを選択した場合は、使用するKMSキーを選択します
- 「レポートグループを更新」または「レポートグループを作成」をクリックして保存します

Terraformでの修復手順
CodeBuildレポートグループのエクスポートデータ暗号化を有効にするTerraformの修正ポイントです。
aws_codebuild_report_group
にて export_config
を設定する際に適切にKMS Keyを指定すればよいです。
# CodeBuildレポートグループ
resource "aws_codebuild_report_group" "test_reports" {
name = "my-test-report-group"
type = "TEST"
export_config {
type = "S3"
s3 {
bucket = aws_s3_bucket.codebuild_reports.id
path = "test-reports"
packaging = "ZIP"
encryption_key = aws_kms_key.codebuild_report_key.arn
encryption_disabled = false
}
}
tags = {
Name = "test-report-group"
Environment = "production"
}
}
# KMSキーの作成(カスタマー管理キーを使用する場合)
resource "aws_kms_key" "codebuild_report_key" {
description = "KMS key for CodeBuild report encryption"
deletion_window_in_days = 10
enable_key_rotation = true
tags = {
Name = "codebuild-report-kms-key"
}
}
# KMSキーのエイリアス
resource "aws_kms_alias" "codebuild_report_key_alias" {
name = "alias/codebuild-report-key"
target_key_id = aws_kms_key.codebuild_report_key.key_id
}
# エクスポート用S3バケット
resource "aws_s3_bucket" "codebuild_reports" {
bucket = "my-codebuild-test-reports-bucket"
tags = {
Name = "codebuild-reports"
Environment = "production"
}
}
# S3バケットの暗号化設定
resource "aws_s3_bucket_server_side_encryption_configuration" "codebuild_reports" {
bucket = aws_s3_bucket.codebuild_reports.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
kms_master_key_id = aws_kms_key.codebuild_report_key.arn
}
}
}
# S3バケットのバージョニング(推奨)
resource "aws_s3_bucket_versioning" "codebuild_reports" {
bucket = aws_s3_bucket.codebuild_reports.id
versioning_configuration {
status = "Enabled"
}
}
# S3バケットのライフサイクルポリシー(オプション)
resource "aws_s3_bucket_lifecycle_configuration" "codebuild_reports" {
bucket = aws_s3_bucket.codebuild_reports.id
rule {
id = "expire-old-reports"
status = "Enabled"
expiration {
days = 90
}
}
}
セキュリティのベストプラクティス
- 暗号化キーの管理:
- カスタマー管理のKMSキーを使用し、きめ細かいアクセス制御を実装
- キーの自動ローテーションを有効化
- クロスアカウントアクセスには専用のキーポリシーを設定
- S3バケットのセキュリティ:
- バケットポリシーで最小権限の原則を適用
- バケットのバージョニングを有効化
- S3アクセスログを有効化して監査証跡を確保
- レポートの分類と管理:
- 機密度に応じて異なるS3バケットやKMSキーを使用
- ライフサイクルポリシーで古いレポートを自動削除またはアーカイブ
- タグ付けによるコスト配分と管理
- 監視とアラート:
- CloudWatchアラームで暗号化されていないエクスポートを検出
- AWS ConfigルールでコンプライアンスをEi的に監視
- CloudTrailでレポートグループへのアクセスを記録
- アクセス制御:
- IAMポリシーでレポートグループへのアクセスを制限
- 条件キーを使用して暗号化の強制
- レポートの閲覧には専用のIAMロールを使用
最後に
この記事では、CodeBuild レポートグループのエクスポートデータ暗号化を有効化する設定手順について、リスクと対策を解説しました。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。