【问题标题】:s3 cross account policy- Action does not apply to any resource errors3 跨账户策略 - 操作不适用于任何资源错误
【发布时间】: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


【解决方案1】:

s3:x-amz-grant-full-control 是一个条件键,要求对象的创建者 在创建对象时请求授予列出的权限。它不授予任何东西——它把授权的负担放在上传者身上,否则上传被拒绝。因此不可能在s3:GetObject 上匹配此条件,因此如果系统允许您创建此策略,它将永远无法工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2023-03-17
    • 2020-06-01
    • 1970-01-01
    • 2021-02-06
    • 2017-10-05
    • 1970-01-01
    相关资源
    最近更新 更多