amazon-web-services - 设置权限后,为什么我无法从 s3 存储桶下载文件?

标签 amazon-web-services amazon-s3 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 控制台自行下载它们。

最佳答案

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

  • 已创建 bucket-1在 Account-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-user在 Account-2
  • 给了用户这个内联策略 :

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

    关于amazon-web-services - 设置权限后,为什么我无法从 s3 存储桶下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49587775/

    相关文章:

    c# - 如何使用他们的 SDK 判断我的文件是否已从 Amazon S3 中成功删除?

    python - 子进程权限被拒绝

    android - 按 "Reset app preferences"后,我的应用程序的所有权限都被撤销

    amazon-web-services - AWS : How can I allow multiple domains in an S3 CORS configuration?

    amazon-web-services - 使用 AWS 开发工具包生成 S3 对象的预签名 URL 是否需要任何费用?

    python - 如何在 boto3 ec2 实例过滤器中使用高级正则表达式?

    amazon-s3 - 读取带有 "+"符号的 S3 存储桶文件时 Amazon S3 访问被拒绝

    ruby - 如何检测目录是否可写在 Ruby 中

    PHP + 连接到 Amazon ElastiCache

    amazon-web-services - 处理程序中的 Alexa Skill Lambda Node.js 动态意图