概要

  • 今回、S3 バケットのデータ格納時にサーバー側の暗号化を有効にする要件がありました。VPCフローログを有効化する際にハマったため、注意事項を紹介します。
  • S3 の暗号化タイプには、「Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3)」がデフォルトですが、AWS KMS (Key Management Service)のカスタマーマネージドキーを作成し、「AWSS Key Management Service キーを使用したサーバー側の暗号化」を選択することができます。カスタマーマネージドキーを使用する場合、ユーザーがキーを管理でき、自動キーローテーションのカスタマイズも可能になります。

 

VPCフローログ設定時はS3暗号化に注意する

  • 今回、S3 バケットの暗号化タイプには、以下の通り、「AWS Key Management Service キーを使用したサーバー側の暗号化 (SSE-KMS)」を使用しておりました。

 

  • 上記環境において、VPCにフローログを設定し、送信先にカスタマーマネージドキーで暗号化されたS3 バケットを選択したところ設定は行えましたが、以下のアクセスエラーとなって、S3 バケットにログは記録されておりませんでした。

 

  • カスタマーマネージドキーを使用する場合は、ログ配信アカウントが S3 バケットにログを書き込めるようにキーポリシーに権限設定を追加する必要があります。
  • AWS KMS (Key Management Service) において、カスタマーマネージドキーを選択し、キーポリシーを編集します。
  • 以下、デフォルトのキーポリシーです。

 

  • キーポリシーに以下を追記します。

変更前:

{
    "Id": "key-consolepolicy-3",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        }
    ]
}

変更後:

{
    "Id": "key-consolepolicy-3",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow Logs Delivery to use the key",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111111111111"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:ap-northeast-1:111111111111:*"
                }
            }
        }
    ]
}

 

  • VPC フローログのアクセスエラーが解消され、S3 バケットにログが送信されていることを確認します。

 

 

参考資料

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html