概要
- 今回、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