gpt4 book ai didi

node.js - Amazon S3 - 无法加载资源 : the server responded with a status of 403 (Forbidden)

转载 作者:太空宇宙 更新时间:2023-11-03 22:11:54 27 4
gpt4 key购买 nike

这是我第一次使用 Amazon S3。我已阅读问题和答案。它们看起来都与这个问题相似,但没有一个答案为我解决了这个问题。

我可以成功上传图片,但我可以让它们显示它们(403禁止状态)。

这是存储桶的策略:

{
"Version": "2012-10-17",
"Id": "Policy1475848347662",
"Statement": [
{
"Sid": "Stmt1475848335256",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::235314345576:user/userx"
},
"Action": [
"s3:*"
],
"Resource": "arn:aws:s3:::bucketdev/*"
}
]}

这是 CORS 配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>

这是用户的政策:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:GetObject",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]}

使用此组件:https://www.npmjs.com/package/react-dropzone-s3-uploader .

有人可以帮忙吗?

谢谢。

最佳答案

有两点需要注意:

  • 在哪里分配访问 Amazon S3 的权限
  • 要分配哪些权限

在哪里分配访问 Amazon S3 的权限

Amazon S3 中的对象默认情况下是私有(private)的。可以通过三种方式分配访问对象的权限:

  • 对象 ACL(访问控制列表):这些是对象本身的权限
  • 存储桶策略:这是一组应用于整个存储桶的规则,但它也可以指定与存储桶的子集相关的权限(例如存储桶内的特定路径)
  • 应用于 IAM 用户、组或角色的 IAM 策略:这些权限专门应用于这些实体

如果您的目的是保持 S3 存储桶内容的私密性,但允许特定用户访问,那么您应该向 IAM 用户 分配权限(正如您所做的那样)。这也意味着您不需要存储桶策略,因为通过上述任何一种方法授予访问权限就足够了。

参见文档:Guidelines for Using the Available Access Policy Options

此外,仅当从一个域提供的 HTML 页面引用来自另一域的内容时,才需要 CORS 策略。您很可能不需要 CORS 策略 - 进行一些测试以确认情况是否如此。

分配哪些权限

这总是令人困惑...有些权限与存储桶关联,而有些权限与存储桶的内容关联。

您的策略中的以下权限应位于存储桶级别 ( arn:aws:s3:::MyBucket ):

  • s3:创建桶
  • s3:删除桶
  • s3:删除桶策略
  • s3:GetBucketPolicy
  • s3:GetLifecycleConfiguration
  • s3:ListBucket
  • s3:ListBucketMultipartUploads
  • s3:PutBucketPolicy
  • s3:PutLifecycleConfiguration

其他 API 调用(例如 GetObject )应在对象级别(例如 arn:aws:s3:::MyBucket/* )。

参见:Specifying Permissions in a Policy

因此,与您的 IAM 用户关联的策略应如下所示:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::MY-BUCKET"
]
},
{
"Sid": "Stmt2",
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::MY-BUCKET/*"
]
}
]
}

这授予 GetObject对存储桶内的对象(而不是存储桶本身)的权限。

关于node.js - Amazon S3 - 无法加载资源 : the server responded with a status of 403 (Forbidden),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922179/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com