我在确定如何从Amazon S3访问文件时遇到一些麻烦。可以说文件所在的存储桶是BUCKET_NAME,文件是FILE_NAME等。我尝试了以下两个网址:
https://s3.amazonaws.com/BUCKET_NAME/FILE_NAME/
?Expires=EXPIRATION
&Signature=SIGNATURE
&SignatureVersion=2
&SignatureMethod=HmacSHA1
&AWSAccessKeyId=KEYID
但是这给了我以下错误:
NoSuchKey
指定的密钥不存在。
我也试过
https://s3.amazonaws.com/BUCKET_NAME/
?Key=FILE_NAME
&Expires=EXPIRATION
&Signature=SIGNATURE
&SignatureVersion=2
&SignatureMethod=HmacSHA1
&AWSAccessKeyId=KEYID
但是这将返回一个网页,其中包含给定存储桶(包括FILE_NAME)中所有文件的列表,而不是我想要的特定文件。我也尝试将“Action = GetObject”投入到url中,但这似乎没有改变任何东西。
找出哪种(如果有的话)是正确的方法以及我做错了什么会有所帮助。我一直在挖掘亚马逊文档一段时间,但我似乎无法解决它。
感谢。
答案 0 :(得分:55)
答案 1 :(得分:20)
文档here,我将以法兰克福地区为例。
但是这个网址不起作用:
消息是明确的:The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
我可能正在讨论另一个问题,因为我没有收到NoSuchKey
错误,但我怀疑错误信息随着时间的推移变得更加清晰......
答案 2 :(得分:19)
也许不是OP所追求的,但对于那些搜索URL以简单地访问S3上的可读对象的人更像是:
https://<region>.amazonaws.com/<bucket-name>/<key>
其中<region>
类似于s3-ap-southeast-2
。
单击S3 GUI中的项目以获取存储桶的链接。
答案 3 :(得分:0)
按照@stevebot所说,执行以下操作:
https://<bucket-name>.s3.amazonaws.com/<key>
我想补充的一件事是您要么必须使存储桶对象都可以公共访问,要么可以向存储桶策略添加自定义策略。该自定义策略可以允许来自您的网络IP范围或其他凭据的流量。
答案 4 :(得分:0)
请注意,如果您位于不同的 AWS 分区中,例如美国 GovCloud 或中国,那么您的 URL 模式将略有不同。
https://<bucket-name>.s3-<region-name>.amazonaws.com/<key>
适用于 GovCloud。
中国有点像https://<bucket-name>.s3-<region-name>.amazonaws.com.cn/<key>
。