Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 限制特定用户的存储桶列表_Amazon S3 - Fatal编程技术网

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

Amazon s3 限制特定用户的存储桶列表,amazon-s3,Amazon S3,我已经能够生成一个只允许访问特定bucket的用户策略,但是在尝试了所有操作(包括本文:)之后 问题:我无法将存储桶列表限制为仅一个存储桶。出于各种原因,我不希望清单显示除指定的桶之外的任何桶 我尝试过各种各样的政策,但都没有用。下面是我的最新政策JSON,它的作用是限制操作,但没有列出: { "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBucke

我已经能够生成一个只允许访问特定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/*"
        ]
    }
]
}

任何帮助都将不胜感激。我开始怀疑这是否可能。

目前不可能将存储桶列表限制为仅显示一个存储桶

AWS控制台依靠
ListallMyBucket
操作获取用户拥有的Bucket列表,但返回的列表不能通过使用Amazon资源名(或ARN;ListallMyBucket允许的唯一ARN是
ARN:AWS:s3:::*
)来限制

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

有关可能的解决方法,请参阅StackOverflow:

免费的“S3浏览器”(适用于我的3-7-5版)允许具有适当权限的用户为帐户“添加外部Bucket”,他们只需要知道Bucket的名称。这使他们能够“看到”自己的水桶和里面的东西(以及在这个水桶里赋予他们的任何能力),而不会看到其他任何水桶

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

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

我来这里是想了解如何将对存储桶的访问限制为一个(或一组)用户。也许,帖子的标题模棱两可

不管怎么说,它似乎得到了谷歌的青睐,所以让我们来充实一下:
如果需要限制某些用户访问存储桶,请执行以下步骤:


首先,获取要授予权限的用户的ID。
这可以通过使用awscli命令
aws iam list users

这些ID如下所示:“AIDAIFKYAC9DNJXM2CRD”或“AIDAZ362UEKJCJMFFXCL”
如果在web控制台中提供,请发表评论

一旦您获得了必须被授予访问权限的ID,请在您想要保护的bucket上放置一个策略。
要使用web控制台执行此操作,请执行以下操作:
->打开S3->打开你的bucket->选择“属性”选项卡->点击“编辑bucket策略”

要使用awscli应用策略,请创建一个包含策略内容的文件,并使用以下命令将其放在bucket中:
aws s3api放置bucket策略--bucket名称\u您的\u bucket--策略file:///path/to/policyFile.json

当然,将您的_BUCKET_名称和文件路径设置为您的值,但不要删除文件名前的file://前缀


警告:此拒绝策略将覆盖用户可能拥有的默认“s3访问权限”。这意味着您可以使用此选项拒绝您自己的用户的访问小心使用
我甚至担心你会把水桶弄得够不着。
出于好奇,我尝试使用我们帐户的root用户进行访问,但我没有授予该用户访问权限,实际上无法访问。
我要问这个来支持,希望能更新这个答案

无论如何,我相信你会非常小心的,所以这里有一个示例政策。
只需将bucket的名称替换为您的名称,将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"
          ]
        }
      }
    }
  ]
}
有关更具体的信息,或者如果您想使用角色而不是用户,请参见以下内容


希望这有帮助

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

谢谢您的回答。我看过那篇文章——我真的深入研究了很多。我们选择了客户看不到他们自己的水桶,这是一个遗憾,但考虑到我们的主要关注点,这是最好的选择。也有非常有用的信息。我们也讨论了这个问题。在我看来,这不应该是我们正常接受的事情。我们运行了几个项目,如果我想让员工在进入S3部分时只看到一个bucket,那么这应该是可能的。这个答案中的“添加外部bucket”部分是“S3浏览器”的真正解决方案,我建议IAM策略部分精心编制,而不是复制。例如,我复制了S3ReadOnly操作的块;)相关:&逻辑是反向的。您正在限制除所选用户之外的所有其他用户。@凯文,您能精确地告诉我吗?除了允许的人之外,拒绝任何人似乎是对我应用安全性的正常方式。顺便说一句,您还可以将此策略应用于多个存储桶。我对这台自动取款机并没有深入了解,但如果我做错了什么,我会非常感激更多的细节。最初的海报是关于用户政策的。这将附加到特定的用户,而其他用户可能应用了更多的leineint策略(或没有策略)。典型的用例是,您只想限制一个用户,其凭据需要在最高信任组之外共享。用户策略就是解决这个问题的方法。谢谢你的发帖。这可能是什么样的例子?@cale_b对不起-我不是故意要发表我的评论的