【问题标题】:Amazon S3 configuration always returns 403 ForbiddenAmazon S3 配置总是返回 403 Forbidden
【发布时间】:2015-08-19 16:48:08
【问题描述】:

我正在尝试设置对我的一个存储桶的安全访问,但我无法让它工作,即使我很确定一切都很好。

我有这个桶,我们称之为mybucket,它是我在爱尔兰创建的。 它包含两个文件夹,devprod

我创建了两个用户:

  • mybucket-prod,ARN:arn:aws:iam::XXXXXXXXX:user/mybucket-prod
  • mybucket-dev,ARN:arn:aws:iam::XXXXXXXXX:user/mybucket-dev

每个用户都有一个政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1439909068000",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::mybucket/dev/*"
            ]
        }
    ]
}

(对于具有 Resource = "arn:aws:s3:::mybucket/prod/*"mybucket-prod 也是如此)

这是存储桶政策:

{
    "Version": "2012-10-17",
    "Id": "Policy1439908568053",
    "Statement": [
        {
            "Sid": "Stmt1439908459631",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXXX:user/mybucket-dev"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObjectAcl",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::mybucket/dev/*"
        },
        {
            "Sid": "Stmt1439908500795",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXXX:user/mybucket-prod"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObjectAcl",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::mybucket/prod/*"
        }
    ]
}

而且我无法让它对两个用户都有效。我尝试创建一个新的访问密钥,也没有任何运气。

我做错了什么?

也许值得注意的是,我将另一个存储桶的内容复制到了这个存储桶中,方法是进入 Amazon 的 Web 界面,单击前一个存储桶中的“dev”和“prod”,选择“copy”,然后继续mybucket 并选择“粘贴”?

我还尝试了策略模拟器,结果是肯定的(允许)。

我正在使用boto(Python),但正如我所说,我没有更改代码中的任何内容,并且由于我更改了存储桶名称而发生了错误。我用一个非常基本的代码进行了测试,它返回了同样的错误:

from boto.s3.connection import S3Connection
from boto.s3.key import Key

con = S3Connection('KEY', 'SECRET', host='s3-eu-west-1.amazonaws.com')

print Key(bucket=con.get_bucket('mybucket'), name="/prod/2/documents/1-demo.pdf")

我得到:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    print Key(bucket=con.get_bucket('mybucket'), name="/prod/2/contracts/1/documents/1-cillit.pdf")
  File "/usr/lib/python2.7/site-packages/boto/s3/connection.py", line 502, in get_bucket
    return self.head_bucket(bucket_name, headers=headers)
  File "/usr/lib/python2.7/site-packages/boto/s3/connection.py", line 535, in head_bucket
    raise err
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden

【问题讨论】:

  • 你能详细说明“不能让它工作”吗?例如,您是否无法使用这些 IAM 用户的凭证将对象放入这些存储桶?
  • 是的,完全正确:我无法读取对象,也无法放置对象(没有真正测试删除,我没有走那么远)。我总是收到 403 错误。
  • 如果有帮助,我使用boto (Python),并且在我更换存储桶之前代码运行良好。整个原因是将存储桶重命名为其他名称。
  • 你需要展示一个不起作用的boto代码的简单示例
  • 最简单的解决方案是首先允许所有操作,这样您就不会在遇到第二个不相关的问题时对存储桶策略进行故障排除。还要确保您正在检查来自 S3 的响应正文。大多数 403 错误不会在响应正文中为您提供提示,但有些会提示。

标签: amazon-web-services amazon-s3


【解决方案1】:

经过数小时的搜索,我找到了解决方案。

@Michael-sqlbot 通过延长授权让我走上了正轨。

事实证明,我需要添加一个额外的权限才能使一切正常(不过我不知道为什么它以前可以正常工作!)。

这是新的存储桶策略:

{
    "Version": "2012-10-17",
    "Id": "Policy1439908568053",
    "Statement": [
    {
        "Sid": "Stmt1439972574242",
        "Effect": "Allow",
        "Principal": {
            "AWS": [
                "arn:aws:iam::XXXXXXXXX:user/mybucket-dev",
                "arn:aws:iam::XXXXXXXXX:user/mybucket-prod"
            ]
        },
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:::mybucket"
    },
        {
            "Sid": "Stmt1439908459631",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXXX:user/mybucket-dev"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObjectAcl",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::mybucket/dev/*"
        },
        {
            "Sid": "Stmt1439908500795",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXXX:user/mybucket-prod"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObjectAcl",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::mybucket/prod/*"
        }
    ]
}

新权限是将“ListBucket”添加到存储桶中,供将连接到它的用户(mybucket-devmybucket-prod)。添加此新权限时,一切正常。

我还删除了附加到用户的策略。

我很想知道我所做的是否正确或我做错了什么(“ListBucket”权限不是太宽吗?删除用户的政策是否正确?)

不过,现在可以了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2023-02-24
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多