14

我已经能够生成一个只允许访问特定存储桶的用户策略,但是在尝试了一切之后(包括这篇文章:Is there an S3 policy for limited 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

4 回答 4

37

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

AWS 控制台依赖该ListAllMyBuckets操作来获取用户拥有的存储桶列表,但返回的列表不能使用 Amazon 资源名称(或 ARN;唯一允许的 ARN )来ListAllMyBuckets限制arn:aws:s3:::*

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

有关可能的解决方法,请参阅StackOverflow 上的此答案:

于 2013-09-23T10:06:38.253 回答
3

免费的“S3 浏览器”(适用于我的版本 3-7-5)允许具有适当权限的用户为帐户“添加外部存储桶”,他们只需要知道存储桶的名称。这允许他们“看到”他们的桶和内容(以及他们在该桶中获得的任何能力),他们不会看到任何其他桶。

为了使存储桶与 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/*"
    }
  ]
}

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

于 2014-04-22T23:36:04.030 回答
0

我来这里是为了寻找如何将存储桶的访问权限限制为一个(或一组)用户。也许,帖子标题不明确?

无论如何,它似乎得到了 Google 的青睐,所以让我们稍微丰富一下:
如果您需要限制某些用户对存储桶的访问,请按照以下步骤操作:


首先,获取您要授予权限的用户的 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 和文件路径设置为您的值,但不要在之前删除 file:// 前缀你的文件名


警告:此拒绝策略将覆盖用户可能拥有的默认“访问 s3”。这意味着您可以拒绝访问您的 OWN 用户。谨慎使用!
我什至担心你会让一个桶完全无法访问。
出于好奇,我尝试使用我们帐户的root用户进行访问,但我没有授予访问权限,实际上也无法访问。
必须要求这个支持,并希望更新这个答案。

无论如何,我相信你会足够小心,所以这里有一个示例策略。
只需将存储桶的名称替换为您的名称,并将 userId(s) 替换为您要授权访问的名称。

{
  "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 帖子,详细说明如何限制对存储桶的访问

希望这可以帮助

于 2017-03-08T17:45:26.893 回答
-1

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

于 2018-02-23T20:12:43.000 回答