Ruby on rails Rails localhost连接到AmazonS3存储桶

Ruby on rails Rails localhost连接到AmazonS3存储桶,ruby-on-rails,amazon-web-services,amazon-s3,Ruby On Rails,Amazon Web Services,Amazon S3,如何授予从本地计算机访问AmazonS3存储桶的权限?我不断地发现这个错误: Expected(200) <=> Actual(403 Forbidden) excon.error.response :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AllAccessDisabled</Code><Message>All access

如何授予从本地计算机访问AmazonS3存储桶的权限?我不断地发现这个错误:

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控制台中,我为自己提供了AmazonS3完全访问和管理员访问策略

在“权限”下的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>

http://localhost:3000
得到
邮递
放
*
https://localhost:3000
得到
邮递
放
*
但是,在S3控制台中,当我单击“添加bucket策略”时,策略编辑器为空。在IAM控制台中创建的两个策略不应该显示在这里吗?或者它们是不同的东西


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

问题最有可能出现在您的bucket策略中。 只要您的本地主机作为密钥和机密,这就不重要了

尝试将此策略添加到您正在连接的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/*"
            ]
        }
    ]
}
这样做的目的是允许用户查找该bucket名称(顶部),然后与所有文件夹交互
arn:aws:s3:::bucket\u name/*

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


让我知道这是否有效。

最有可能的问题是您的桶策略。 只要您的本地主机作为密钥和机密,这就不重要了

尝试将此策略添加到您正在连接的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/*"
            ]
        }
    ]
}
这样做的目的是允许用户查找该bucket名称(顶部),然后与所有文件夹交互
arn:aws:s3:::bucket\u name/*

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


让我知道这是否有效。

您是通过HTTP还是通过XML连接?这里有几个问题。。。CORS配置与访问控制无关,IAM策略不会出现在bucket策略中,因为它们不是bucket策略。IAM策略和bucket策略一起工作——如果其中一个或两个都授予,则授予权限;如果其中一个或两个都拒绝,则权限被拒绝。最后,
对该对象的所有访问都已禁用
意味着您访问了错误的存储桶--当您访问帐户拥有的存储桶时,该错误似乎会出现。您是通过HTTP还是通过XML连接?这里有几个问题。。。CORS配置与访问控制无关,IAM策略不会出现在bucket策略中,因为它们不是bucket策略。IAM策略和bucket策略一起工作——如果其中一个或两个都授予,则授予权限;如果其中一个或两个都拒绝,则权限被拒绝。最后,
对该对象的所有访问已被禁用
意味着您访问了错误的存储桶——当您访问帐户拥有的存储桶时,该错误似乎会出现。谢谢,我已将该策略添加到我的IAM用户中,但我仍然有相同的错误。只是想澄清一下,我目前没有任何与bucket相关的策略。我应该加一个吗?还有,你所说的localhost作为密钥和秘密是什么意思?它突然开始工作了,我不太知道如何工作。我不确定,但我想可能是在我关闭并重新打开终端窗口时。如果终端不能“看到”s3_bucket环境变量,这是否意味着它也没有在请求中被发送?如果不知道您的开发环境,很难回答,该策略应该已经消除了403错误。谢谢,我已经将该策略添加到我的IAM用户中,但我仍然有相同的错误。只是想澄清一下,我目前没有任何与bucket相关的策略。我应该加一个吗?还有,你所说的localhost作为密钥和秘密是什么意思?它突然开始工作了,我不太知道如何工作。我不确定,但我想可能是在我关闭并重新打开终端窗口时。如果终端不能“看到”s3_bucket环境变量,这是否意味着它也没有在请求中被发送?如果不知道您的开发环境,很难回答,但该策略应该已经消除了403错误