AWS S3:您尝试访问的存储桶必须使用指定的终结点进行寻址


185

我正在尝试使用AWS-SDK-Core Ruby Gem删除上传的图像文件。

我有以下代码:

require 'aws-sdk-core'

def pull_picture(picture)
    Aws.config = {
        :access_key_id => ENV["AWS_ACCESS_KEY_ID"],
        :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
        :region => 'us-west-2'
    }

    s3 = Aws::S3::Client.new

    test = s3.get_object(
        :bucket => ENV["AWS_S3_BUCKET"],
        :key => picture.image_url.split('/')[-2],   
    )
end

但是,我收到以下错误:

您尝试访问的存储桶必须使用指定的端点进行寻址。请将所有将来的请求发送到该端点。

我知道该区域是正确的,因为如果将其更改为us-east-1,则会显示以下错误:

指定的密钥不存在。

我在这里做错了什么?


6
当我不小心为指定的存储桶指定了错误的区域时,这发生在我身上。
松饼人

这可能是因为使用了错误的AWS区域名称。
Dattatray

Answers:


311

该存储分区似乎是在其他地区(即IE)而非us-west-2创建的。这是我唯一一次看到“您尝试访问的存储桶必须使用指定的终结点进行寻址。请将所有以后的请求发送到该终结点。”

美国标准是 us-east-1


30
从来没有想过,但它为我工作!在AWS开发工具包中,“美国标准”区域似乎是AWSRegionUSEast1。
Nerrolken

寻找答案如何设置区域。谢谢!
锡拉2015年

6
如果您使用的是Ruby客户端,请在初始化客户端之前为存储桶设置ENV["AWS_REGION"]正确的值(例如"us-east-1"
Abe Voelker 2015年

如果您需要使用多个存储桶(例如,开发/登台/生产等)怎么办?
yekta

1
我在Java中遇到了同样的问题。您的解决方案有所帮助。他们在S3中使用奇怪的名称。区域的端点,存储库中对象名称的密钥 ...
Gangnus

21

在控制台中检查您的存储桶位置,然后将其用作要使用的端点的参考:http : //docs.aws.amazon.com/general/latest/gr/rande.html#s3_region


2
你能解释一下吗?换成region: 'us-west-1',什么?
Aamir Afridi

@AamirAfridi,这取决于您使用的是哪个SDK。我使用的是iOS SDK,并且在凭据提供程序中,有一个参数可以设置区域。我已将其设置为我要使用的区域。
Jay Q.

我只是有一个类似的示例,在该示例中,我优化了存储桶的区域,但是我省略了更新域名的操作。解决方法是用新域名替换以前的域名,如该存储桶的S3控制台的端点参考中所示。示例:我替换https://s3.amazonaws.com/mybucket/myasset.jpghttps://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.jpg以修复该错误。
法比恩·哈达迪

19

我遇到类似的错误,因为存储桶位于区域中us-west-2,并且URL模式在路径中具有存储桶名称。一次,我更改了URL模式,以bucketname作为URL子域来抓取文件,并且它起作用了。

例如,以前的URL是

https://s3.amazonaws.com/bucketname/filePath/filename

然后我将其替换为

https://bucketname.s3.amazonaws.com/filePath/filename

输入完全合格的名称对我有用。s3-ap-southeast-1.amazonaws.com/ng-spark/Java8.json用于位于新加坡可用区中的存储桶
Nilesh Gule

1

对于许多S3 API软件包(我最近在npm s3软件包中遇到了这个问题),您可能会遇到以下问题:假定该区域为美国标准,并且如果您选择托管存储桶,则按名称查找将需要您明确定义区域。在该区域之外。


1

在创建S3Client的过程中,您可以指定到特定区域的端点映射。如果默认为,s3.amazonaws.com则会在us-east-1北弗吉尼亚州创建存储区。

AWS文档中有关S3端点和区域的更多详细信息:http : //docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

因此,在创建S3Client时始终确保有关端点/区域,并使用同一区域中的同一客户端访问S3资源。

如果存储桶是从AWS S3控制台创建的,请在控制台中检查该存储桶的区域,然后使用上面链接中提到的终端节点详细信息在该区域中创建S3 Client。


1

以上答案均未解决我的问题。

以上答案很可能是造成您问题的原因,但我的问题是我使用的存储桶名称错误。这是一个有效的存储桶名称,不是我的存储桶。

我指向的存储桶与lambda函数位于不同的区域,因此请检查您的存储桶名称!


0

对于仍然面临此问题的ppl,请尝试将s3_host如下所示添加到配置哈希中

   :storage => :s3,
   :s3_credentials => {:access_key_id => access key,
   :secret_access_key => secret access key},
   :bucket => bucket name here,
   :s3_host_name => s3-us-west-1.amazonaws.com or whatever comes as per your region}.

这为我解决了这个问题。


0

当我尝试访问不存在的存储桶时出现此错误。

我错误地使用存储桶名称变量切换了路径变量,因此存储桶名称具有文件路径值。因此,如果您在请求中设置的存储桶名称正确,则可以仔细检查。


0

我有同样的错误。当s3客户端创建的端点与创建存储桶时设置的端点不同时,就会发生这种情况。

  • 错误代码-桶已使用EAST Region设置。

s3Client =新的AmazonS3Client(AWS_ACCESS_KEY,AWS_SECRET_KEY,RegionEndpoint.USWest2)

  • 固定

s3Client =新的AmazonS3Client(AWS_ACCESS_KEY,AWS_SECRET_KEY,RegionEndpoint.USEast1


0

我遇到了同样的问题,经过很多努力,我发现真正的问题是com.amazonaws依赖关系。添加依赖关系后,这个错误消失了。


0

我住在英国,一直在尝试“ us-west-2”地区。因此重定向到“ eu-west-2”。S3的正确区域是“ eu-west-2”


0

当我对用户正在使用的策略(访问密钥/私有密钥)创建s3存储桶有源ip约束时,发生了这种情况。我的IP是准确的-但由于某种原因,它无法正常工作并出现了此错误。


0

经过长时间的搜索,我找到了一个可行的解决方案。问题是因为错误region-code

下面是区域代码列表,设置适当的区域代码,您的问题将得到解决。

Code                         Name
US East (Ohio)               us-east-2

US East (N. Virginia)       us-east-1

US West (N. California)     us-west-1

US West (Oregon)            us-west-2

Asia Pacific (Hong Kong)    ap-east-1

Asia Pacific (Mumbai)       ap-south-1

Asia Pacific (Osaka-Local)  ap-northeast-3

Asia Pacific (Seoul)        ap-northeast-2

Asia Pacific (Singapore)    ap-southeast-1

Asia Pacific (Sydney)       ap-southeast-2

Asia Pacific (Tokyo)        ap-northeast-1

Canada (Central)            ca-central-1

Europe (Frankfurt)          eu-central-1

Europe (Ireland)            eu-west-1

Europe (London)             eu-west-2

Europe (Paris)             eu-west-3

Europe (Stockholm)         eu-north-1

Middle East (Bahrain)      me-south-1

South America (São Paulo)   sa-east-1

点击存储桶名称右上角,即可找到您的区域代码。

在此处输入图片说明

有关模式的详细信息,请单击


0

使用其他AWS配置文件时遇到此问题。当我使用具有管理员权限的帐户时看到此错误,因此似乎不太可能出现权限问题。

从用户的角度来看,AWS很容易发出错误消息,而这些错误消息与所需操作之间的联系很少,这确实是我的小事。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.