【问题标题】:Rails localhost connecting to amazon s3 bucketRails localhost 连接到 amazon s3 存储桶
【发布时间】:2016-03-31 17:15:37
【问题描述】:

如何从本地计算机授予对 amazon 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 控制台中创建的两个策略不应该显示在此处吗?或者它们是不同的东西?

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

【问题讨论】:

  • 您是通过 HTTP 还是通过 XML 连接?
  • 这里有几个问题... CORS 配置与访问控制无关,IAM 策略不会出现在存储桶策略中,因为它们不是存储桶策略。 IAM 策略和存储桶策略一起工作——如果其中一个或两个都授予,则授予权限;如果其中一个或两个都拒绝,则拒绝许可。最后,All access to this object has been disabled 表示您正在访问错误的存储桶——当您访问某个帐户所拥有的存储桶被取消时,似乎会出现该错误。

标签: ruby-on-rails amazon-web-services amazon-s3


【解决方案1】:

问题很可能出在您的存储桶策略中。 只要你的 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/*

如果您想将该用户限制在子文件夹中,只需修改上面的部分即可。

让我知道这是否有效。

【讨论】:

  • 谢谢,我已将策略添加到我的 IAM 用户,但我仍然遇到同样的错误。需要明确的是,我目前没有与存储桶相关的任何策略。我应该加一个吗?另外,通过 localhost 作为密钥和秘密是什么意思?
  • 它突然开始工作了,我不太清楚如何。我不确定,但我认为可能是在我关闭并重新打开终端窗口时。如果终端无法“看到” s3_bucket 环境变量,这是否意味着它也没有在请求中发送?
  • 在不了解您的开发环境的情况下很难回答,但该策略应该可以消除您的 403 错误
猜你喜欢
  • 2016-08-25
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 2019-01-18
  • 1970-01-01
  • 2023-01-18
相关资源
最近更新 更多