首页 文章

为什么我不能在设置权限时从s3存储桶下载文件?

提问于
浏览
0

我试图创建一个存储桶并为另外两个帐户设置完全权限 . 首先,我在存储桶Permissions中添加了这些帐户 . 文件仍然无法访问 . 然后,我试了一个政策 . 我为每个帐户创建了两个角色,以便在其中指定它们 . 这是政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::id:role/user1",
                    "arn:aws:iam::id:role/user2"
                ]
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name/*",
                "arn:aws:s3:::bucket-name"
            ]
        }
    ]
}

依然没有 . 然后我看到,即使存储桶具有所有权限设置,其中的文件也没有 . 当我为文件设置它们时,其他用户可以访问它 . 但我真的不想为我上传的每个文件都这样做 . 怎么了?

我尝试使用aws cli加载文件并使用“--grants”选项设置权限,但在上传后,我甚至无法通过aws控制台自行下载它们 .

2 回答

  • 1

    为了演示这是如何工作的,我做了以下工作:

    • 在Account-1中创建了 bucket-1

    • 指定了这个 bucket policy

    .

    {
        "Id": "Account1Policy",
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AllowBucketAccess",
                "Action": "s3:*",
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::bucket-1",
                    "arn:aws:s3:::bucket-1/*"
                ],
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::222222222222:user/account-2-user"
                    ]
                }
            }
        ]
    }
    

    此政策说:允许account2:account-2-user对account1:bucket-1执行任何操作

    • 在Account-2中创建了 account-2-user

    • 给用户这个 inline policy

    .

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AllowBucket1Access",
                "Effect": "Allow",
                "Action": [
                    "s3:*"
                ],
                "Resource": [
                    "arn:aws:s3:::bucket-1",
                    "arn:aws:s3:::bucket-1/*"
                ]
            }
        ]
    }
    

    此策略说明:允许此策略附加的用户对bucket-1执行任何操作

    如果存储桶和用户都在同一帐户中,则此策略足以授予对存储桶的完全访问权限 . 但是,由于bucket-1实际上属于不同的帐户,因此第一个策略(上面)也是必需的,因此account-1实际上授予访问权限 . 这意味着第二个策略实际上并未授予对存储桶的访问权限 - 它只是授予 account-user-2 发出访问存储桶请求的权限 . 实际访问权限在第一个策略中授予 .

    然后我成功使用 account-2-user 的凭据访问 bucket-1

    $ aws s3 cp foo.txt s3://bucket-1 --profile account-2-user
    upload: ./foo.txt to s3://bucket-1/foo.txt
    
  • 0

    如果存储桶策略授予对对象的访问权限,则无需在对象级别授予访问权限 .

    如果通过从名为 user1user2role 发出的凭据访问,则您列出的存储桶策略将授予对存储桶的访问权限 . (它是's quite strange that you are giving '用户'角色名称的前缀 . )

    例如,如果您为Amazon EC2实例分配了名为 user1 的IAM角色,则会自动为其提供访问存储桶的凭据 .

    如果 user1user2 实际上是用户,那么ARN应该是:

    arn:aws:iam::id:user/user1
    

    在这种情况下,访问该用户的凭据时可以访问该存储桶 .

    Update:

    我认为它实际上需要在两个位置分配权限:

    在Account-1中

    • On the Bucket ,如上所述(表示存储桶允许从另一个帐户中的用户/角色访问),AND
      帐户2中的
    • On the user/role 也表示帐户-2的管理员允许该用户/角色呼叫S3 . 如果用户/角色已经拥有针对 * 资源的 s3:* 权限,则不需要这样做 . 对于所需的存储桶,它至少需要针对S3的权限 .

相关问题