2012-03-21 173 views
1

我想限制公共存取我们存储在S3中的某些对象,但在相同层次的密钥中显示其他对象。例如,假设我想让bucketname/*公开可读。但是想要阻止任何未明确授予IAM访问权限的用户访问bucketname/*/hidden/*仅适用于公共限制的Amazon S3存储桶策略

我可以做到这一点就像一只水桶政策:

{ 
    "Id": "Policy123", 
    "Statement": [ 
    { 
     "Sid": "Stmt123", 
     "Action": [ "s3:GetObject" ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::bucketname/*", 
     "Principal": { 
     "AWS": [ "*" ] 
     } 
    }, 
    { 
     "Sid": "Stmt124", 
     "Action": [ "s3:GetObject" ], 
     "Effect": "Deny", 
     "Resource": "arn:aws:s3:::bucketname/*/hidden/*", 
     "Principal": { 
     "AWS": [ "*" ] 
     } 
    ] 
} 

但防止我已授予任何IAM用户/用户组访问隐藏的对象。在第二条语句中是否有本金的设置,只有匹配未经身份验证的访问?或者更好的是,有没有办法只列出那些校长那应该不是受政策声明影响?

+1

更新2016年:您现在可以使用http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#NotPrincipal标记来表示“所有校长,但... – Claude 2016-11-18 21:35:02

回答

3

根据AWS的支持,目前这是不可能的。任何Deny策略都会覆盖匹配(或子集)策略,并且无法仅拒绝匿名访问。

通过为与bucketname/*/hidden/*匹配的所有对象指定私有ACL,可以实现类似的效果,但这不是很灵活,必须手动应用。

0

您不需要在存储桶上设置策略。实际上,您可以在IAM用户或组上应用相同的策略,具体取决于您的方案中哪种方式效果最好。

https://console.aws.amazon.com/iam/home?#

  • 用户
  • 选择所需的用户
  • 点击权限选项卡
  • 连接用户策略
  • 自定义策略
  • 选择
  • 复制和粘贴政策
  • 应用策略

有时需要将额外权限添加到用户,以便他们可以看到桶进行导航。例如,如果他们使用云浆果,则需要为他们提供对主桶的列表访问权限。例如,参见我的一项政策。

{ 
    "Statement": [ 
    { 
     "Sid": "Stmt1330983243489", 
     "Action": [ 
     "s3:*" 
     ], 
     "Effect": "Allow", 
     "Resource": [ 
     "arn:aws:s3:::<allowbucket1>", 
     "arn:aws:s3:::<allowbucket1>/*" 
     ] 
    }, 
    { 
     "Sid": "Stmt1330983260440", 
     "Action": [ 
     "s3:ListAllMyBuckets" 
     ], 
     "Effect": "Allow", 
     "Resource": [ 
     "arn:aws:s3:::*" 
     ] 
    }, 
    { 
     "Sid": "Stmt1330983357419", 
     "Action": [ 
     "s3:CreateBucket", 
     "s3:DeleteBucket", 
     "s3:PutBucketNotification", 
     "s3:PutBucketPolicy", 
     "s3:PutBucketRequestPayment" 
     ], 
     "Effect": "Deny", 
     "Resource": [ 
     "arn:aws:s3:::*" 
     ] 
    } 
    ] 
} 
+0

我确实需要一个存储桶策略来处理未经身份验证的访问IAM用户已被授予访问其自己策略中的所有对象的权限,“*/hidden/*'存储桶上的”拒绝“策略可防止IAM用户看到这些对象。这个问题可以让这个更清晰 – bkirkbri 2012-03-21 18:21:57

+0

你可以在桶策略中添加一个允许规则,其原理如下:'arm:aws:iam :: '这应该允许这个用户访问。 iam访问会为用户名输入一个*,然后您可以使用iam权限拒绝授权用户访问存储桶。 – bwight 2012-03-21 22:26:42

相关问题