【发布时间】:2023-03-16 10:32:01
【问题描述】:
我有一个跨账户,它需要访问一个存储桶(准确地说是文件夹),当我在 terraform 中应用它时,我收到一个错误,有人可以告诉我,这个策略中的错误是什么
p>我正在尝试编写 s3 acl policy 。用户应该只对存储桶内的 folder1 有权限。
请指出如何使用条件(我有 AccountA-CanonicalUserID)和用户名
resource "aws_s3_bucket_policy" "policy" {
bucket = "${aws_s3_bucket.xxx.id}"
policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MicrositesLogs",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxx:user/user1"
},
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::xxxx/folder1/*",
"Condition": {
"StringEquals": {
"s3:x-amz-grant-full-control": "id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
]
}
POLICY
}
错误:应用计划时出错:
发生了 1 个错误:
aws_s3_bucket_policy.policy:发生 1 个错误:
aws_s3_bucket_policy.policy:放置 S3 策略时出错:MalformedPolicy:条件不适用于语句中的操作和资源组合 状态码:400,请求ID:84C92DAD0C9AC0FB,主机ID:rvg7fqFDXdigCHPLLM/FXtOTXJXGKXSN9eQNRBZdkd0GrGRzis9ZkJu1Kkyu896RUvOx7mI7lcQ=
【问题讨论】:
-
这里的问题是
s3:ListBucket操作只能在桶级别起作用。您定义的所有资源都处于对象级别。要解决此问题:也可以添加以下资源:arn:aws:s3:::xxxxxxt-1或仅为s3:ListBucket添加另一个语句,然后在资源部分中,将存储桶添加为资源(最佳实践)。 -
之前我有
GetObject and PutObject也失败了,所以获取对象也只能在存储桶级别工作吗? -
不,只是
s3:ListBucket。 -
我更新了问题,收到此错误“条件不适用于操作和资源的组合”
标签: amazon-web-services amazon-s3 terraform