在使用桶级权限调用PutObject操作时拒绝访问

Gre*_*reg 74 amazon-s3

我按照http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html#iam-policy-example-s3上的示例,了解如何授予用户仅访问一个存储桶的权限.

然后我使用W3 Total Cache Wordpress插件测试了配置.测试失败了.

我也尝试使用再现问题

aws s3 cp --acl=public-read --cache-control='max-age=604800, public' ./test.txt s3://my-bucket/
Run Code Online (Sandbox Code Playgroud)

那失败了

upload failed: ./test.txt to s3://my-bucket/test.txt A client error (AccessDenied) occurred when calling the PutObject operation: Access Denied
Run Code Online (Sandbox Code Playgroud)

为什么我不能上传到我的桶?

Gre*_*reg 147

回答我自己的问题:

示例策略授予PutObject访问权限,但我还必须授予PutObjectAcl访问权限.

我不得不改变

"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
Run Code Online (Sandbox Code Playgroud)

从示例到:

"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
Run Code Online (Sandbox Code Playgroud)

您还需要确保为客户端配置存储桶,以通过取消勾选这两个框来设置公共可访问的ACL:

在此输入图像描述

  • 顺便说一句,它对我不起作用。boto3 交互,即使使用 s3fullaccess 策略我也开始“AccessDenied for PutObject” (4认同)
  • 在我的情况下,它与 AWS cli 一起工作,但它与 boto 无关 (3认同)
  • 谢谢!不知道为什么关闭了亚马逊自己的文档。您可能还希望包括“ s3:AbortMultipartUpload”,以便可以正确清除中止的上载。 (2认同)
  • 我具有S3完全访问权限,但缺少阻止新的公共ACL和上传公共对象的权限。谢谢! (2认同)

mov*_*yer 25

我遇到了类似的问题.我没有使用ACL的东西,所以我不需要s3:PutObjectAcl.

就我而言,我在做(在无服务器框架 YML中):

- Effect: Allow
  Action:
    - s3:PutObject
  Resource: "arn:aws:s3:::MyBucketName"
Run Code Online (Sandbox Code Playgroud)

代替:

- Effect: Allow
  Action:
    - s3:PutObject
  Resource: "arn:aws:s3:::MyBucketName/*"
Run Code Online (Sandbox Code Playgroud)

其中添加了一个/*到桶ARN的末尾.

希望这可以帮助.

  • 我需要带有 /* 的那个 (8认同)

Lac*_*mov 25

就我而言,问题是我在命令行中使用“--acl=public-read”上传文件。但是,该存储桶已被阻止公共访问,并且只能通过 CloudFront 访问。

  • 如果这有更多的票数,我就可以节省 45 分钟的时间了:') (4认同)
  • 相同的。在这种情况下,为什么 AWS 没有显示更具体的错误消息。 (3认同)
  • 这是一个巧妙的技巧。提醒我总是问这些参数的作用:facepalm (2认同)

Den*_*Pat 14

如果您为存储桶设置了公共访问权限,但它仍然无法正常工作,请编辑存储桶策略并粘贴以下内容:

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::yourbucketnamehere",
                "arn:aws:s3:::yourbucketnamehere/*"
            ],
            "Effect": "Allow",
            "Principal": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)


Spa*_*gen 10

我在上传到受 KWS 加密保护的 S3 存储桶时遇到了类似的问题。我有一个允许在特定 s3 密钥下添加对象的最小策略。

我需要将以下 KMS 权限添加到我的策略中,以允许角色将对象放入存储桶中。(可能比严格要求的略多)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "kms:ListKeys",
                "kms:GenerateRandom",
                "kms:ListAliases",
                "s3:PutAccountPublicAccessBlock",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAllMyBuckets",
                "s3:HeadBucket"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "kms:ImportKeyMaterial",
                "kms:ListKeyPolicies",
                "kms:ListRetirableGrants",
                "kms:GetKeyPolicy",
                "kms:GenerateDataKeyWithoutPlaintext",
                "kms:ListResourceTags",
                "kms:ReEncryptFrom",
                "kms:ListGrants",
                "kms:GetParametersForImport",
                "kms:TagResource",
                "kms:Encrypt",
                "kms:GetKeyRotationStatus",
                "kms:GenerateDataKey",
                "kms:ReEncryptTo",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:<MY-REGION>:<MY-ACCOUNT>:key/<MY-KEY-GUID>"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
            <The S3 actions>
            ],
            "Resource": [
                "arn:aws:s3:::<MY-BUCKET-NAME>",
                "arn:aws:s3:::<MY-BUCKET-NAME>/<MY-BUCKET-KEY>/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)


Ken*_*n J 8

我只是把头撞在墙上,只是想让S3上传来处理大文件。最初我的错误是:

An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied
Run Code Online (Sandbox Code Playgroud)

然后我尝试复制一个较小的文件并得到:

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
Run Code Online (Sandbox Code Playgroud)

我可以列出对象很好,但是即使我s3:*在“角色”策略中具有权限,我也无法做其他任何事情。我最终为此修改了政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::my-bucket/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

现在,我可以上传任何文件了。my-bucket用您的存储桶名称替换。我希望这会对其他人有所帮助。

  • 这给出:缺少必填字段校长:( (2认同)
  • 我还收到以下错误:缺少必填字段校长 (2认同)

Pes*_*nat 6

如果这对其他人有所帮助,就我而言,我使用的是CMK(使用默认的aws / s3键可以正常工作)

我必须进入IAM中的加密密钥定义,并将登录到boto3的编程用户添加到“可以在应用程序内以及使用与KMS集成的AWS服务时使用此密钥来加密和解密数据”的用户列表。


Adi*_*Kar 6

我遇到了同样的问题。我的存储桶是私有的,并且有 KMS 加密。我能够通过在角色中添加额外的 KMS 权限来解决这个问题。以下列表是所需的最少角色集。

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Sid": "AllowAttachmentBucketWrite",
        "Effect": "Allow",
        "Action": [
            "s3:PutObject",
            "kms:Decrypt",
            "s3:AbortMultipartUpload",
            "kms:Encrypt",
            "kms:GenerateDataKey"
        ],
        "Resource": [
            "arn:aws:s3:::bucket-name/*",
            "arn:aws:kms:kms-key-arn"
        ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

参考:https : //aws.amazon.com/premiumsupport/knowledge-center/s3-large-file-encryption-kms-key/


Fra*_*ois 5

对于我犯的错误,我收到了相同的错误消息:确保使用正确的 s3 uri,例如: s3://my-bucket-name/

(如果 my-bucket-name 显然是您的 aws s3 的根目录)

我坚持这一点,因为当从浏览器复制粘贴 s3 存储桶时,您会得到类似 https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/?region=my-aws-regiontab=overview

因此,我错误地使用了s3://buckets/my-bucket-namewhich :

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied