我尝试将文件直接上传到带有预先签名的URL的S3存储桶,但在PUT请求时出现AccessDenied(403 Forbidden)错误。
在存储桶的CORS配置中允许PUT请求。
是否还需要更新存储桶策略并允许s3:PutObject
,s3:PutObjectAcl
操作?
P.S。忘了添加。我已尝试使用s3:PutObject
添加s3:PutObjectAcl
和Principal: *
,在这种情况下,上传工作正常,但如何限制上传的访问权限?它应仅适用于预先签名的网址,对吧?
答案 0 :(得分:3)
好的,我想出了解决方法。步骤如下:
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。Principal
中指定的用户具有所需存储区的s3:PutObject
和s3:PutObjectAcl
权限。s3:PutObject
,s3:PutObjectAcl
。您可以在IAM角色页面(如果您为Lambda函数创建了单独的角色)或通过函数设计器页面(只读)进行检查