解决VPC流日志问题:使用SSE-KMS加密的S3存储桶并设置CMK

81次阅读
没有评论

问题描述

在使用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密钥政策中添加一个允许使用该密钥的语句,并将资源设置为"*",以允许对所有资源的操作。以下是解决方法:

  1. 打开AWS控制台并导航到KMS(密钥管理服务)。

  2. 选择您用于S3存储桶加密的CMK(Customer Master Key)。

  3. 在密钥详细信息页中,选择“密钥策略”选项卡。

  4. 编辑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": "*"
        }
    ]
}
  1. 保存更改。

验证解决方案

完成上述步骤后,您应该再次测试VPC流日志的导出。确保流日志正常写入S3存储桶,并且不再出现“Access error”状态。

如果问题仍然存在,可能需要检查其他因素,如IAM策略、网络连接等。您可以尝试在sandbox账户中的配置和Terraform账户中的配置之间进行比较,以查找差异。

希望这个解决方案对您有帮助!如果您有任何进一步的问题,请随时提问。

正文完