Athena ワークグループのログ記録有効化設定手順

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

ポリシーの説明
Athena ワークグループは、ユーザーやチーム、アプリケーション単位でクエリの実行環境を分離・管理するための機能です。各ワークグループでは、クエリ結果の保存場所、暗号化設定、データスキャン量の上限などを個別に設定できます。しかし、デフォルトではログ記録が無効になっており、クエリ実行に関する重要な監査証跡が残らない状態となっています。
Athena ワークグループのログ記録を有効にすることで、CloudWatch Logs にクエリ実行ログが記録され、以下の情報を追跡できるようになります:
- クエリ実行者の情報(IAMユーザー/ロール)
- クエリ実行時刻とその期間
- スキャンされたデータ量
- クエリのステータス(成功/失敗)
- エラー情報
修復方法
コンソールでの修復手順
AWSのコンソールを使用して、Athena ワークグループのログ記録を有効にします。
- AWS マネジメントコンソールにログインし、Amazon Athena サービスに移動します。
- 左側のナビゲーションメニューから「ワークグループ」を選択します。
- ログ記録を有効にしたいワークグループ名をクリックします。
- ワークグループの詳細ページで、「編集」ボタンをクリックします。

- 「設定」セクションまでスクロールし、「CloudWatch メトリクスを公開する」のチェックボックスをオンにします。

- 設定内容を確認し、「保存」ボタンをクリックします。
- ワークグループの設定が更新され、今後実行されるクエリからログ記録が開始されます。
Terraformでの修復手順
Athena ワークグループのログ記録を有効にするTerraformコードと、主要な修正ポイントを説明します。
resource "aws_athena_workgroup" "example" {
name = "example-workgroup"
configuration {
# CloudWatch メトリクスの公開を有効化(重要)
publish_cloudwatch_metrics_enabled = true
# クエリ結果の保存場所を指定
result_configuration {
output_location = "s3://${aws_s3_bucket.athena_results.bucket}/results/"
# クエリ結果の暗号化(推奨)
encryption_configuration {
encryption_option = "SSE_KMS"
kms_key_arn = aws_kms_key.athena.arn
}
}
# ワークグループ設定の強制(推奨)
enforce_workgroup_configuration = true
# クエリ実行コンテキストのデータベース指定(オプション)
engine_version {
selected_engine_version = "AUTO"
}
# バイト単位のデータスキャン制限(コスト管理)
bytes_scanned_cutoff_per_query = 1000000000 # 1GB
}
# リソースタグ(管理用)
tags = {
Environment = "production"
Team = "data-analytics"
Purpose = "query-logging-enabled"
}
}
# ログ保存用のS3バケット
resource "aws_s3_bucket" "athena_results" {
bucket = "my-athena-query-results-${data.aws_caller_identity.current.account_id}"
}
# S3バケットのバージョニング(推奨)
resource "aws_s3_bucket_versioning" "athena_results" {
bucket = aws_s3_bucket.athena_results.id
versioning_configuration {
status = "Enabled"
}
}
# S3バケットのサーバーサイド暗号化(推奨)
resource "aws_s3_bucket_server_side_encryption_configuration" "athena_results" {
bucket = aws_s3_bucket.athena_results.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
kms_master_key_id = aws_kms_key.athena.arn
}
}
}
# 暗号化用のKMSキー
resource "aws_kms_key" "athena" {
description = "KMS key for Athena query results encryption"
deletion_window_in_days = 10
enable_key_rotation = true
tags = {
Name = "athena-encryption-key"
}
}
# KMSキーエイリアス
resource "aws_kms_alias" "athena" {
name = "alias/athena-encryption"
target_key_id = aws_kms_key.athena.key_id
}
# CloudWatch ロググループ(メトリクス確認用)
resource "aws_cloudwatch_log_group" "athena_metrics" {
name = "/aws/athena/workgroup/${aws_athena_workgroup.example.name}"
retention_in_days = 30
kms_key_id = aws_kms_key.athena.arn
}
# 現在のAWSアカウントID取得用
data "aws_caller_identity" "current" {}
主要な設定ポイント:
publish_cloudwatch_metrics_enabled = true
: この設定が最も重要です。CloudWatch へのメトリクス公開を有効化します。enforce_workgroup_configuration = true
: ワークグループの設定を強制し、個別ユーザーが設定を上書きできないようにします。- 暗号化設定: KMS キーを使用してクエリ結果を暗号化し、機密データを保護します。
- データスキャン制限:
bytes_scanned_cutoff_per_query
でクエリごとのデータスキャン量を制限し、予期しない高額請求を防ぎます。 - S3バケットのセキュリティ: バージョニングと暗号化を有効化し、クエリ結果の保護を強化します。
最後に
この記事では、Athena ワークグループのログ記録有効化について、リスクと対策を解説しました。
ログ記録を有効にすることで、セキュリティ監査、コンプライアンス遵守、インシデント対応能力が大幅に向上します。特に機密データを扱う環境では、ログ記録の有効化は必須のセキュリティ対策です。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。 運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。 最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。