仅适用于公共限制的Amazon S3存储桶策略

时间:2012-03-21 03:32:55

标签: amazon-s3 amazon-web-services

我想限制公共访问我们在S3中存储的一些对象,但是在同一个键层次中显示其他对象。例如,假设我想让bucketname/*公开可读。但是,要阻止任何未明确授予IAM访问权限的用户访问bucketname/*/hidden/*

我可以使用像:

这样的存储桶策略
{
  "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用户/组访问隐藏对象。在第二个语句中是否存在 Principal 的设置,该设置仅匹配未经身份验证的访问?或者更好的是,有没有办法只列出那些应该 NOT 受政策声明影响的 Principals

2 个答案:

答案 0 :(得分:3)

根据AWS支持,目前无法实现。任何Deny策略都会覆盖匹配(或子集)Allow策略,并且无法拒绝匿名访问。

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

答案 1 :(得分: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:::*"
      ]
    }
  ]
}