限制特定用户的存储桶列表

时间:2013-07-19 00:05:05

标签: amazon-s3 policy

我已经能够生成只提供对特定存储桶的访问权限的用户策略,但是在尝试完所有内容后(包括此帖子:Is there an S3 policy for limiting access to only see/access one bucket?)。

问题:我无法将存储桶的列表限制为只有一个存储桶。出于各种原因,我不希望列表显示除指定的桶以外的任何桶。

我尝试了各种政策,但无济于事。这是我的最新策略JSON,它正在限制操作,但没有列出:

{
    "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListAllMyBuckets",
            "s3:ListBucket",
            "s3:GetBucketLocation"
        ],
        "Resource": "arn:aws:s3:::*"
    },
    {
        "Effect": "Deny",
        "Action": [
            "s3:ListBucket"
        ],
        "NotResource": [
            "arn:aws:s3:::acgbu-acg",
            "arn:aws:s3:::acgbu-acg/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::acgbu-acg",
            "arn:aws:s3:::acgbu-acg/*"
        ]
    }
]
}

非常感谢任何帮助。我开始怀疑它是否可能。

4 个答案:

答案 0 :(得分:30)

目前无法限制存储桶列表仅显示一个存储桶。

AWS控制台依靠ListAllMyBuckets操作来获取用户拥有的存储桶列表,但不能使用亚马逊资源名称(或ARN;唯一的ARN&#39)来限制返回的列表;允许ListAllMyBucketsarn:aws:s3:::*)。

官方AWS文档中没有明确说明此限制,但ListAllMyBuckets是服务级API调用(它在REST API中也称为GET服务),而不是存储桶级别IAM策略中的API调用及其关联的ARN是指S3服务,而不是指特定存储桶。

有关可能的解决方法,请参阅StackOverflow上的this answer

答案 1 :(得分:3)

免费的" S3浏览器" (这适用于我的版本3-7-5)允许用户具有"添加外部存储桶"对于该帐户,他们需要知道的只是桶的名称。这使他们能够看到"他们的水桶和内容(以及他们在那个水桶里给予的能力),他们不会看到任何其他水桶。

让水桶“好玩”#34;对于S3浏览器行为,我建议用户或组的以下IAM策略:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:GetBucketAcl"
      ],
      "Resource": "arn:aws:s3:::acgbu-acg"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::acgbu-acg/*"
    }
  ]
}

这是一种解决方法,如果用户只需要执行一次就可以了。但是,如果您的用户访问的存储桶正在大量改变,那么这种解决方法并不实用。

答案 2 :(得分:0)

我来到这里寻找如何限制对一个(或一个)用户的访问。也许,帖子标题含糊不清?

无论如何,它似乎有谷歌的青睐,所以让我们稍微丰富一下:
如果您需要限制某些用户访问某个用户,请按以下步骤操作:


首先,获取要授予其权限的用户的ID。
这可以使用awscli命令aws iam list-users来实现
这些ID如下所示:" AIDAIFKYAC9DNJXM2CRD"或" AIDAZ362UEKJCJMFFXCL"
如果它在Web控制台中可用,请评论。

获得必须授予访问权限的ID后,将策略放在要保护的存储桶上。
要使用Web控制台执行此操作:
- >打开S3 - >打开你的水桶 - >选择"属性"标签 - >单击"编辑存储桶策略"

要使用awscli应用策略,请使用策略的内容创建一个文件,并使用以下命令将其放在存储桶中:
aws s3api put-bucket-policy --bucket NAME_OF_YOUR_BUCKET --policy file:///path/to/policyFile.json
当然,将YOUR_BUCKET_NAME和文件的路径设置为您的值,但不要删除文件名前的文件://前缀 < / p>


警告:此拒绝政策将覆盖默认&#34;访问s3&#34;用户可以拥有。这意味着您可以拒绝使用此权限访问您的OWN用户。 谨慎使用! 我甚至害怕你能把一个水桶完全无法接近。
出于好奇,我尝试使用我们帐户的 root 用户访问,我没有授予访问权限,并且实际上无法访问# 39;吨。
不得不要求这个支持,并希望更新这个答案。

无论如何,我确定你会小心,所以这是一个示例政策。
只需用您的名称替换存储桶的名称,并将userId替换为您要授权访问的名称。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::your-bucket-name",
        "arn:aws:s3:::your-bucket-name/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AIDAXAXAXAXAXAXAXAXAX",
            "AIDAOXOXOXOXOXOOXOXOX",
            "AIDAXIXIXIXIXIXIXIXIX"
          ]
        }
      }
    }
  ]
}

对于更具体的内容,或者如果您想使用角色而不是用户,请参阅此AWS post explaining in detail how to restrict access to a buckets

希望这有帮助

答案 3 :(得分:-1)

原始海报询问用户政策。这将附加到特定用户,而其他人可能有更多的leineint策略(或没有策略)应用于他们。一个典型的用例是您只想限制一个用户,其凭据需要在最高信任组之外共享。用户政策是实现这一目标的方法..