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 web services 如何编写AWS IAM策略,授予其他所有人读取权限';水桶是什么?_Amazon Web Services_Amazon S3_Amazon Iam - Fatal编程技术网

Amazon web services 如何编写AWS IAM策略,授予其他所有人读取权限';水桶是什么?

Amazon web services 如何编写AWS IAM策略,授予其他所有人读取权限';水桶是什么?,amazon-web-services,amazon-s3,amazon-iam,Amazon Web Services,Amazon S3,Amazon Iam,我正在为我的Kubernetes员工编写IAM政策。我希望他们对某个S3存储桶具有读/写访问权限,不访问我帐户中的其他S3存储桶,但对任何公共可读的存储桶具有读访问权限(例如S3://1000genomes/存储桶,以及亚马逊或其他人提供公共数据的其他存储桶) (我的帐户中的公共存储桶是否被授予访问权限并不重要。如果我需要授予一个存储桶的访问权限,我可以明确地这样做。但我不能明确地授予世界上每个公共存储桶的访问权限。) 我可以编写一个类似这样的节,以提供对世界上所有存储桶的读取权限: {

我正在为我的Kubernetes员工编写IAM政策。我希望他们对某个S3存储桶具有读/写访问权限,不访问我帐户中的其他S3存储桶,但对任何公共可读的存储桶具有读访问权限(例如
S3://1000genomes/
存储桶,以及亚马逊或其他人提供公共数据的其他存储桶)

(我的帐户中的公共存储桶是否被授予访问权限并不重要。如果我需要授予一个存储桶的访问权限,我可以明确地这样做。但我不能明确地授予世界上每个公共存储桶的访问权限。)

我可以编写一个类似这样的节,以提供对世界上所有存储桶的读取权限:

    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::*",
        "arn:aws:s3:::*/*"
      ]
    }
我还可以编写一个允许访问我想允许访问的帐户上的特定命名bucket的程序,在
*
中填入名称

但是,我如何编写一个策略来拒绝访问我帐户上不是命名存储桶的存储桶?或者,如果我采取不同的方法,我如何为所有不属于我账户的桶写一份补助金?我能在这些额外的冒号之间加些什么吗?我尝试过同时使用
Resource
NotResource
,但AWS拒绝了

作为参考,我的政策如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::vg-k8s",
                "arn:aws:s3:::vg-k8s/*",
            ]
        }
    ]
}
在我的节点组中有了该策略后,我无法从节点访问
s3://1000基因组。要访问该存储桶,我可以将其更改为:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::vg-k8s",
                "arn:aws:s3:::vg-k8s/*",
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::1000genomes",
                "arn:aws:s3:::1000genomes/*"
            ]
        }
    ]
}
但我需要一种方法来做到这一点,这样我就可以覆盖所有公共存储桶,而不仅仅是我列出的那些存储桶,但我的帐户中不包括非公共存储桶

我如何编写一个策略,拒绝访问我帐户上非命名存储桶的存储桶

你没有。默认情况下,IAM策略被拒绝

如何授予对任何可公开读取的存储桶的读取权限

你没有。访问公共存储桶不需要额外的权限或策略

但是,您可能会遇到公共存储桶访问的问题,并且应该使您对公共存储桶的请求未签名

要从awscli与公共存储桶交互,请使用:

aws s3 ls s3://1000genomes/ --no-sign-request
要从boto3执行相同操作,请使用:

import boto3
from botocore import UNSIGNED
from botocore.config import Config
s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED))

编写一个允许所有存储桶的策略,然后对您的存储桶进行显式拒绝。@hephalump如何拒绝我所有的存储桶,除了我想允许的存储桶?我可以拒绝我的所有存储桶,但是拒绝将获胜,我将无法访问我的任何存储桶。不幸的是,这与我观察到的行为不匹配。从我的节点(作为受组策略约束的用户运行),我不能
aws s3 ls s3://1000genomes/
,除非我将公共bucket
arn:aws:s3:::1000genomes
添加到允许访问bucket的策略中。一旦我这样做了,我就可以很好地访问它。尝试
aws s3 ls s3://1000genomes/--无符号请求
。我授予了对
1000genomes
的显式访问权,但对于一个桶,我还没有这样做(
landsat pds
),这似乎是可行的。我可以列出没有签名请求的bucket,但不能没有。不幸的是,我不知道如何修改我的应用程序(它使用boto)来知道它应该和不应该对请求进行签名@jarmod,有没有办法在IAM策略级别上解决这个问题,这样即使是已签名的请求也能通过?我不知道有什么方法可以在策略级别上实现您想要的。理想情况下,您的应用程序可以被告知它正在处理一个公共存储桶,如果这不可能,那么可能只需在您被拒绝访问后重试一个未签名的基本操作。不太理想,我会答应你的。如果我找到更好的选项,将会更新。