问题描述
在使用Terraform时,尝试将VPC流日志自动导出到位于相同AWS账户和区域(ca-central-1)的S3存储桶中,该存储桶已启用AWS-KMS加密(使用CMK)。即使尝试了许多KMS和S3存储桶策略的排列组合,流日志始终处于“Access error”状态。
更新:当重新配置S3存储桶以使用AES-256作为默认加密(而不是KMS)时,VPC流日志会正常写入。因此,这明显是一个KMS的问题。
用户使用的aws_flow_log
Terraform资源按照文档进行了配置。
resource "aws_flow_log" "vpc_flow_log" {
log_destination_type = "s3"
log_destination = "${aws_s3_bucket.awslogs.arn}"
traffic_type = "ALL"
vpc_id = "${aws_vpc.vpc.id}"
depends_on = ["aws_s3_bucket_policy.awslogs"]
}
尝试过多种方法后,问题仍未解决。用户发现在另一个仅使用AWS Web控制台的“sandbox” AWS账户中,一切正常。该账户与使用Terraform的账户配置相同,都在S3存储桶上使用了AWS-KMS加密。
解决方案
请注意以下操作可能涉及版本差异和风险操作。确保在进行任何更改之前备份您的配置。
解决方案
问题出在KMS密钥政策中缺少一个重要的配置。您需要在KMS密钥政策中添加一个允许使用该密钥的语句,并将资源设置为"*"
,以允许对所有资源的操作。以下是解决方法:
-
打开AWS控制台并导航到KMS(密钥管理服务)。
-
选择您用于S3存储桶加密的CMK(Customer Master Key)。
-
在密钥详细信息页中,选择“密钥策略”选项卡。
-
编辑KMS密钥政策,以便添加一个允许VPC流日志使用密钥的语句,并设置资源为
"*"
。确保您的KMS密钥策略与下面的示例相似:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow VPC Flow Logs to use the key",
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com"
},
"Action": [
"kms:ReEncrypt",
"kms:GenerateDataKey",
"kms:Encrypt",
"kms:DescribeKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}
- 保存更改。
验证解决方案
完成上述步骤后,您应该再次测试VPC流日志的导出。确保流日志正常写入S3存储桶,并且不再出现“Access error”状态。
如果问题仍然存在,可能需要检查其他因素,如IAM策略、网络连接等。您可以尝试在sandbox账户中的配置和Terraform账户中的配置之间进行比较,以查找差异。
希望这个解决方案对您有帮助!如果您有任何进一步的问题,请随时提问。