2015-12-25 152 views
1

如何授予您的本地机器访问您的亚马逊s3存储桶?我不断收到此错误:Rails本地主机连接到亚马逊s3存储桶

Expected(200) <=> Actual(403 Forbidden) excon.error.response :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AllAccessDisabled</Code><Message>All access to this object has been disabled</Message> 

在IAM控制台中,我给自己提供了AmazonS3FullAccess和AdministratorAccess策略。

在S3控制台下的“权限”我有这个CORS配置:

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

然而,在S3控制台,当我点击“添加桶政策”策略编辑器是空白。 IAM控制台中创建的两个策略不应该出现在这里吗?或者他们是不同的东西?

我应该在策略编辑器中添加什么策略?我试过创建一个,但我得到很多错误。

+0

您是通过HTTP还是通过XML连接? –

+0

这里有几个问题... CORS配置与访问控制无关* IAM策略不会出现在存储桶策略中,因为它们不是存储桶策略。 IAM策略和存储桶策略一起工作 - 如果授予,许可中的任何一个或两个同意,如果一方或双方都否认,则拒绝许可。最后,“对这个对象的所有访问权限都被禁用”意味着你正在访问错误的存储桶 - 当你访问一个账户拥有的存储桶被取消时,似乎出现这个错误。 –

回答

0

问题很可能出现在您的存储桶策略中。 只要你的localhost作为KEY和SECRET就没有关系。

尝试增加这一政策给你与连接IAM用户:

{ 
    "Version": "2015-12-26", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::BUCKET_NAME" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:*" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::BUCKET_NAME/*" 
      ] 
     } 
    ] 
} 

这样做是允许用户查找该桶的域名(顶部),然后用所有的文件夹arn:aws:s3:::BUCKET_NAME/*互动。

如果您想限制该用户到子文件夹,只需修改上述部分。

让我知道这是否有效。

+0

谢谢,我已将该策略添加到我的IAM用户,但我仍然有同样的错误。只是为了清楚我目前没有任何与该存储相关的策略。我应该添加一个吗?另外,你认为本地主机作为关键和秘密的含义是什么? – Bazley

+0

它突然开始工作,我不知道如何。我不确定,但我想这可能是我关闭并重新打开终端窗口时。如果一个终端不能“看见”s3_bucket环境变量,是不是意味着它不会在请求中发送? – Bazley

+0

如果不知道你的开发环境很难回答,那该政策应该已经摆脱了你的403错误 – blnc