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

时间:2018-03-31 12:33:53

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

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

Scanner input = new Scanner(System.in);
int in = input.nextInt();
for(int x = 0; x < 99;)                    
{
   x = x + in;
   System.out.println(x);                  
}

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

我尝试使用aws cli加载文件并使用&#34; - grants&#34;设置权限。选项,但上传后,我甚至无法通过aws控制台自行下载。

2 个答案:

答案 0 :(得分: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    

答案 1 :(得分:0)

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

如果通过从名为user1user2角色颁发的凭据访问,则您列出的存储分区策略将授予对存储区的访问权限。 (你给角色名称'用户'前缀很奇怪。)

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

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

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

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

<强>更新

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

  1. 在帐户1中的存储桶上,如上所述(表示存储桶允许从其他帐户中的用户/角色进行访问),和
  2. 在Account-2中的用户/角色上,表示Account-2的管理员允许该用户/角色呼叫S3。如果用户/角色已对s3:*资源拥有*权限,则不需要这样做。对于所需的存储桶,它至少需要针对S3的权限。