带有预签名URL的S3 PUT请求拒绝访问

Sco*_*eld 5 amazon-s3 amazon-web-services

我正在尝试使用预先签名的URL将文件直接上传到S3存储桶,但在PUT请求上出现AccessDenied(禁止访问403)错误。

桶的CORS配置中允许PUT请求。

难道我还需要更新桶政策,允许s3:PutObjects3:PutObjectAcl动作?

PS忘记添加。我已经尝试过添加s3:PutObjects3:PutObjectAcl使用Principal: *,在这种情况下,上传工作得很好,但如何限制上载的访问?它应该仅适用于预签名的URL,对吗?

Sco*_*eld 11

好的,我想出了如何解决它。以下是步骤:

  1. 替换Principal: *"Principal": {"AWS":"arn:aws:iam::USER-ID:user/username"}。而不是USER-ID:user/username放置您可以在 Amazon IAM 部分找到的所需用户凭证。在此处阅读有关 Principal 的更多信息:https : //docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html
  2. 请确保您指定的用户Principal拥有s3:PutObjects3:PutObjectAcl为需要的区权限。
  3. 检查您的 Lambda 的函数权限。对于需要的存储桶s3:PutObject,它也应该有s3:PutObjectAcl。您可以在 IAM 角色页面(如果您为 Lambda 函数创建单独的角色)或通过函数设计器页面(只读)检查它

在此处输入图片说明