AWS Config 能否写入启用了对象锁定的 S3 存储桶?



我已经设置 AWS Config [1] 以将配置项目传送到 S3 存储桶。当 S3 存储桶未启用对象锁定 [2] 时,一切正常。但是,当该存储桶启用了对象锁定时,AWS Config 将无法创建其传输通道并出现以下消息的错误

错误:创建传输通道失败:传输策略不足异常:s3 存储桶

的传输策略不足:oss-devex-tf-module-aws-config-managed-存储桶,无法写入存储桶,前提是 s3 键前缀为"config-test"。

我已经搜索了这个例外,它通常与权限有关。在进行故障排除时,我为 AWS Config 分配了一个对 S3 存储桶具有完全权限的角色(即,对存储桶和对象具有s3:*权限,这比文档 [3] 中描述的要多(,我没有在存储桶上设置 KMS 客户主密钥,我什至只是为了测试它而禁用了静态加密。

由于审计和合规性要求,我想使用对象锁定,但在 AWS Config 文档中找不到对它的任何引用。

编辑: 我编写了一个地形模块 [4] 来设置 AWS Config。该模块中有几个示例运行良好,但前提是 S3 存储桶上未启用对象锁定。

[1] - https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html

[2] - https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html

[3] - https://docs.aws.amazon.com/config/latest/developerguide/s3-bucket-policy.html

[4] - https://gitlab.com/open-source-devex/terraform-modules/aws/config-managed-rules

答案似乎是否定的。

我只是与这个问题斗争了一段时间,直到我从 AWS 找到以下文档:

AWS Config 不支持到启用了对象锁定的 Amazon S3 存储桶的传输通道。

来源:管理传递渠道

为了重现您的情况,我做了以下操作:

  • 创建了一个激活了版本控制和对象锁定的 Amazon S3 存储桶
  • 修改了已在使用 AWS Config 的现有 IAM 角色以包含新存储桶
  • 修改了 AWS Config 以写入新存储桶(因为我已经让 Config 与另一个存储桶一起运行(

然后我看到 Config 在存储桶内创建了一个ConfigWritabilityCheckFile对象。

一段时间后,出现了一个具有此路径的对象:

AWSLogs/123456789012/Config/ap-southeast-2/2019/9/17/ConfigSnapshot/123456789012_Config_ap-southeast-2_ConfigSnapshot_20190917T224217Z_ea973cd9-25ff-4cbe-97ca-84ef150a1981.json.gz

因此,启用对象锁定似乎不会影响 AWS Config 使用存储桶的能力。

您应检查 AWS Config 正在使用的 IAM 角色,以确认它对所需存储桶具有适当的权限。

我使用的 IAM 角色(我从现有设置中闲逛,只是添加了新的存储桶名称(包含:

  • AWSConfigRole托管策略
  • config-role_AWSConfigDeliveryPermissions_ap-southeast-2可能是在某个时候自动创建的,其中包含:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject*"
],
"Resource": [
"arn:aws:s3:::stack-lock/AWSLogs/123456789012/*"
],
"Condition": {
"StringLike": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
  • 另外,它对许多服务都有"只读"策略(再次,不确定我为什么有这个的历史!

最新更新