如何获取没有过期日期并且具有公共访问权限的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 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen