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

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、 「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。

この記事では、CodeBuild レポートグループのエクスポートデータ暗号化を有効化する設定手順について、リスクと対策を解説します。

ポリシーの説明

AWS CodeBuildは、ソースコードのコンパイル、テスト実行、ソフトウェアパッケージの作成を行うフルマネージド型のビルドサービスです。CodeBuildのテストレポートグループは、テスト結果を収集・整理し、S3バケットにエクスポートすることができます。このエクスポートデータにはソースコードの情報、テスト結果、環境変数、エラーメッセージなど、機密性の高い情報が含まれる可能性があります。これらのデータを暗号化することで、不正アクセスから保護し、データの機密性を確保します。

修復方法

コンソールでの修復手順

AWSのコンソールを使用して、CodeBuildレポートグループのエクスポートデータ暗号化を有効にします。

  1. AWSマネジメントコンソールにログインし、CodeBuildサービスに移動します
  2. 左側のナビゲーションペインから「レポートグループ」を選択します
  3. 暗号化を設定したいレポートグループを選択します(新規作成する場合は「レポートグループの作成」をクリック)
  4. 「編集」ボタンをクリックします(新規作成の場合はそのまま進みます)
  1. 「エクスポート」セクションまでスクロールします
  2. 「S3にエクスポート」を有効にします
  3. エクスポート先のS3バケットを選択または作成します
  4. 「暗号化」セクションで「暗号化を有効にする」にチェックを入れます
  5. 暗号化キーとして「AWS管理キー」または「カスタマー管理キー」を選択します
  6. カスタマー管理キーを選択した場合は、使用するKMSキーを選択します
  7. 「レポートグループを更新」または「レポートグループを作成」をクリックして保存します

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
    }
  }
}

セキュリティのベストプラクティス

  1. 暗号化キーの管理:
    • カスタマー管理のKMSキーを使用し、きめ細かいアクセス制御を実装
    • キーの自動ローテーションを有効化
    • クロスアカウントアクセスには専用のキーポリシーを設定
  2. S3バケットのセキュリティ:
    • バケットポリシーで最小権限の原則を適用
    • バケットのバージョニングを有効化
    • S3アクセスログを有効化して監査証跡を確保
  3. レポートの分類と管理:
    • 機密度に応じて異なるS3バケットやKMSキーを使用
    • ライフサイクルポリシーで古いレポートを自動削除またはアーカイブ
    • タグ付けによるコスト配分と管理
  4. 監視とアラート:
    • CloudWatchアラームで暗号化されていないエクスポートを検出
    • AWS ConfigルールでコンプライアンスをEi的に監視
    • CloudTrailでレポートグループへのアクセスを記録
  5. アクセス制御:
    • IAMポリシーでレポートグループへのアクセスを制限
    • 条件キーを使用して暗号化の強制
    • レポートの閲覧には専用のIAMロールを使用

最後に

この記事では、CodeBuild レポートグループのエクスポートデータ暗号化を有効化する設定手順について、リスクと対策を解説しました。

この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。

参考資料

この記事をシェアする

クラウドセキュリティ対策実践集一覧へ戻る

貴社の利用状況に合わせた見積もりを作成します。

料金プランを詳しく見る