【问题标题】:Amazon S3: Cannot download object despite IAM user full accessAmazon S3:尽管 IAM 用户具有完全访问权限,但仍无法下载对象
【发布时间】:2019-11-24 17:02:51
【问题描述】:

作为 IAM 用户,我已获得对 Amazon S3 存储桶的完全访问权限。

查看 AWS 管理控制台 > 我的安全凭证 > 用户 > my_username 时,AmazonS3FullAccess 的策略如下:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "*"
    }
]
}

但我无法通过 AWS 管理控制台下载其他 IAM 用户上传的对象。尝试下载对象时出现以下 xml 错误页面:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>CB7861FFD8043D3D</RequestId>
<HostId>
whN/Ftumk8fRJcEyugQI7rpLC1F+00YJ7cM3bTILY9COmiuS0j2v7r37mbPf7B4tqYKTzNkjdfM=
</HostId>
</Error>

这些其他 IAM 用户拥有与我相同的权限,并对其对象的权限进行了任何特定更改。

存储桶的所有者(也创建了 IAM 用户账户)尝试将我的 Canonical ID 添加到相关对象的权限中,但没有成功。但是,他能够下载任何 IAM 用户上传的对象。

以上 JSON 中的权限设置是否不足以完全访问其他 IAM 用户创建的对象?所有 IAM 用户均在同一账户下创建。我们如何才能轻松地进行设置,以便我们组中的任何 IAM 用户都可以访问彼此的对象?

编辑:认为这是一个跨账户问题,但我相信所有 IAM 用户都是在同一个账户中创建的。相应地更改了措辞。

一些附加信息: 以下是实际存储桶策略的样子:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Bucket Policy",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:root",
                    "arn:aws:iam::987654321012:user/my_username"
                ]
            },
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::my_bucket/*",
                "arn:aws:s3:::my_bucket"
            ]
        }
    ]
}

我将我的用户信息添加到 Principal,但在阅读了有关 IAM 用户的更多信息后,这听起来似乎没有必要。不过,这似乎也不是问题。

【问题讨论】:

  • 啊!您提到了“跨账户对象”!如果将对象上传到属于不同账户的 Amazon S3 存储桶,则应选择 --acl bucket-owner-full-control。如果不这样做,则该对象由源帐户“拥有”,而不是目标帐户。事情可能会变得非常混乱,甚至很难移除对象,即使是存储桶所有者!
  • 还要检查 IAM 用户是否具有编程访问权限。您的 MFA 政策可能会阻止此操作!
  • 此外,可能有分配给存储桶的存储桶策略阻止您执行此类操作。每当 AWS 委托人向 S3 发出请求时,授权决策取决于所有适用的 IAM 策略、S3 存储桶策略和 S3 ACL 的联合。
  • 我不知道我是否误用了“跨账户”访问权限。它实际上可能是同一个账户,但只是同一账户中不同 IAM 用户创建的对象。不确定这里的术语。
  • @user1964692 您还应该检查您尝试下载的对象是否由 KMS 密钥加密 - 如果是这样,您还需要将 kms:Decrypt 添加到用于执行下载。

标签: amazon-web-services amazon-s3 amazon-iam


【解决方案1】:

显然,这个问题更多是因为我使用存储在 DBFS 根目录 (https://kb.databricks.com/dbfs/dbfs-root-permissions.html) 中的 Databricks 创建文件。我认为使用 Databricks 并不重要,但确实如此。

有访问问题的对象都是使用 DBFS CLI 上传的。使用 dbutils 将对象复制到 FileStore (https://docs.databricks.com/user-guide/advanced/filestore.html) 后,我现在可以访问这些对象了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多