使用预签名URL在S3 PUT请求上拒绝访问

时间:2018-01-19 12:11:04

标签: amazon-web-services amazon-s3

我尝试将文件直接上传到带有预先签名的URL的S3存储桶,但在PUT请求时出现AccessDenied(403 Forbidden)错误。

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

是否还需要更新存储桶策略并允许s3:PutObjects3:PutObjectAcl操作?

P.S。忘了添加。我已尝试使用s3:PutObject添加s3:PutObjectAclPrincipal: *,在这种情况下,上传工作正常,但如何限制上传的访问权限?它应仅适用于预先签名的网址,对吧?

1 个答案:

答案 0 :(得分:3)

好的,我想出了解决方法。步骤如下:

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

enter image description here