跨账户CloudTrail日志写入S3的KMS加密配置报错排查
问题根因定位
- 区域不匹配:AWS要求用于S3服务端加密的客户托管KMS密钥必须和目标S3桶处于完全相同的区域,若你创建的KMS密钥和日志账户S3桶的区域不一致,会直接触发该报错
- 权限缺失:现有KMS密钥仅配置了解密权限,缺少CloudTrail服务加密所需的密钥操作权限;同时主账户用于配置CloudTrail的IAM身份未获得KMS密钥的访问授权,也会触发权限类错误
正确配置步骤
1. 区域一致性校验
- 登录日志账户,进入S3控制台查看目标存储桶的所属区域
- 切换到KMS控制台,选择上述相同区域,确认待使用的密钥为该区域下创建的客户托管密钥(AWS托管的S3/KMS密钥不支持跨账户CloudTrail加密场景)
2. 补全日志账户KMS密钥策略
在现有密钥策略基础上,新增CloudTrail服务加密权限声明,完整新增配置如下:
{ "Sid": "AllowCloudTrailEncryptLogs", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:<主账户CloudTrail所在区域>:<主账户ID>:trail/<主账户CloudTrail名称>" } } }
保留你原有组织内解密权限的声明即可,注意替换上述配置中的占位符为实际资源信息。
3. 配置主账户IAM权限
在主账户用于配置CloudTrail的IAM用户/角色的权限策略中,新增如下授权:
{ "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "arn:aws:kms:<日志账户S3桶区域>:<日志账户ID>:key/<KMS密钥ID>" }
4. 补全日志账户S3桶策略
在现有允许CloudTrail写入的桶策略基础上,新增KMS加密校验规则:
{ "Sid": "AllowCloudTrailKMSWrite", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<日志桶名称>/AWSLogs/<主账户ID>/*", "Condition": { "StringEquals": { "s3:x-amz-server-side-encryption": "aws:kms", "s3:x-amz-server-side-encryption-aws-kms-key-id": "<KMS密钥完整ARN>" } } }
5. 完成CloudTrail加密配置
回到主账户CloudTrail控制台,编辑对应追踪的加密配置,填写日志账户KMS密钥的完整ARN,即可完成配置,不再触发报错。
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

