如何获取没有过期日期并且具有公共访问权限的S3对象的URL?

0

【以下的问题经过翻译处理】 我尝试了一些事情:

  1. 阻止所有公共访问:关闭
  2.  {
         "Sid": "PublicRead",
         "Effect": "Allow",
         "Principal": "*",
         "Action": "s3:GetObject",
         "Resource": "************/*"
     }```
    

但我的存储桶名称下方是一个红色框,警告我公开可访问。我应该担心吗?

或者有没有办法访问像这样的私有对象,比如传递**/appID**来访问:https://bucket.s3.us-north-8.amazonaws.com/img.png/appID

最终我的需求是获取对象的URL,我将在我的帖子模型中硬编码一些内容,如下所示: URL属性将是一个字符串:

type Post @model{
  id: ID!
  title: String!
  fileURL: https://bucket.s3.us-north-8.amazonaws.com/img.png
}

现在我不能更改URL属性。因此,我需要一个没有过期日期的安全文件访问。

1 回答
0

【以下的回答经过翻译处理】 最佳实践是不要公开可访问的对象。所有的“阻止公共访问”设置都应该开启,你不应该有任何“公开访问”的警告。

如果你需要允许人们通过其Web浏览器访问对象,那么有两个安全的选项:

  1. 如果对象是公共网站的资源,请将桶设为CloudFront的原点。不要使用S3内置的静态网站托管(像http://<bucket-name>.s3-website-<region>.amazonaws.com或http://<bucket-name>.s3-website.<region>.amazonaws.com这样的URL),因为它不支持http。
  2. 如果对象是私有的,则你的应用程序应该提供安全的临时访问,并提供预签名的URL。

你的URL“https://bucket.s3.us-north-8.amazonaws.com/img.png”更像是S3 REST API URL,它会被直接或更常见的是通过像Python的Boto3这样的API包的应用程序使用。在这种情况下,你的应用程序将通过IAM凭证安全地访问S3对象。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则