【问题标题】:Why can't I download files from s3 bucket, when permissions are set?设置权限后,为什么我不能从 s3 存储桶下载文件?
【发布时间】:2018-09-10 06:47:40
【问题描述】:

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

{
    "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 控制台自己下载它们。

【问题讨论】:

  • 只检查显而易见的: 1. 您的政策已附加到角色; 2. 他们是角色而不是用户?
  • @craigcaulfield,是的,他们是

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


【解决方案1】:

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

  • 在 Account-1 中创建 bucket-1
  • 分配了此存储桶策略

.

{
    "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
  • 给用户这个内联政策

.

{
    "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    

【讨论】:

  • 我已经完成了所有这些并成功加载了文件,是的,谢谢。但最后一个问题。如果我不在 cli 中使用“--grants”选项,则无法使用 Account-1 下载该文件。这就是它应该的样子。我应该始终授予每个新文件的权限吗?
  • 您不需要分配对象级权限。以上政策都是必要的。您说“我无法使用 Account-1 下载该文件”,但我的回答侧重于授予对 account-2-user 的访问权限,这与 Account 1 中的用户无关。如果您希望 Account 1 中的用户访问存储桶,您需要为账户 1 中的用户分配权限,或者修改存储桶策略以允许账户 1 中的用户访问。
  • 我已修改存储桶策略并从第一个帐户添加用户。并在第一个帐户中为该用户添加了内联策略。但是,如果用户在第二个帐户中加载文件,则第一个帐户无法打开/下载它,除非我明确授予它权限。
  • 我完全被你的场景弄糊涂了。如果以上解决了您的第一个问题(跨帐户访问),请随时就您当前的问题提出第二个问题。解决方案不会相互干扰。
  • 是的,它解决了我在使用不同帐户加载 aws cli 时访问文件的问题。但我最初的问题是关于下载的,现在我发现这个问题有点误导。反正现在没事了。下载部分我弄明白了,再次感谢您的帮助!
【解决方案2】:

如果存储桶策略授予对对象的访问权限,则您无需同时授予对象级别的访问权限。

如果通过名为user1user2角色 颁发的凭据访问存储桶,您列出的存储桶策略将授予对存储桶的访问权限。 (很奇怪,您给角色名称添加了“用户”前缀。)

例如,如果您有一个 Amazon EC2 实例,该实例分配了一个名为 user1 的 IAM 角色,那么它将自动获得访问存储桶的凭据。

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

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

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

更新:

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

  1. 在 Account-1 中的存储桶上,如上所述(表示存储桶允许来自另一个帐户中的用户/角色的访问),并且
  2. 关于 Account-2 中的用户/角色,这表示 Account-2 的管理员允许该用户/角色调用 S3。如果用户/角色已经对* 资源拥有s3:* 权限,则不需要这样做。它至少需要针对所需存储桶的 S3 权限。

【讨论】:

  • 我刚刚在这里更改了名称,它们在那里的名称不同。现在,这可能是一个愚蠢的问题,但我自己创建了这些角色。是否应该在其他 2 个帐户上创建它们?我想您想说的是,您提供的 ARN 是为 users 而不是 roles 的,对吧?
  • 添加了更多细节。
  • 谢谢@JohnRotenstein,我在 Account-2 上使用“AmazonS3FullAccess”创建了一个用户,并将其 ARN 放入 Account-1 的存储桶策略中。仍然没有权限。我还想知道:我是否必须在上传文件时为每个帐户设置权限,或者如果存储桶是共享的,这意味着将来任何上传的文件都应该可以访问。因为,现在,当我上传文件并对其设置权限时,可以从其他帐户访问它。
  • 我添加了另一个答案来澄清事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 2015-05-20
  • 2017-02-16
  • 2013-10-15
  • 2019-09-06
  • 1970-01-01
  • 2022-12-09
相关资源
最近更新 更多