Amazon web services 拒绝特定范围以外的所有IP访问AWS S3

Amazon web services 拒绝特定范围以外的所有IP访问AWS S3,amazon-web-services,amazon-s3,acl,amazon-iam,Amazon Web Services,Amazon S3,Acl,Amazon Iam,我有一个S3存储桶(“myBucket”),只有用户可以访问它,我们称之为“s3user”。我已将IAM策略附加到此用户,如下所示: { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:ListBucket",

我有一个S3存储桶(“myBucket”),只有用户可以访问它,我们称之为“s3user”。我已将IAM策略附加到此用户,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::myBucket"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetObjectVersion"
            ],
            "Resource": "*"
        }
    ]
}
{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::myBucket/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "1.2.3.4/27",
                        "2.3.4.1/28",
                        "5.6.7.8/29"
                    ]
                }
            }
        }
    ]
}
我将此IAM策略附加到用户“s3User”,授予对“myBucket”的只读访问权。到目前为止还不错

现在,我添加了第二个策略,但现在不是IAM策略,而是S3 Bucket策略,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::myBucket"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetObjectVersion"
            ],
            "Resource": "*"
        }
    ]
}
{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::myBucket/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "1.2.3.4/27",
                        "2.3.4.1/28",
                        "5.6.7.8/29"
                    ]
                }
            }
        }
    ]
}
我希望此显式拒绝将拒绝所有不来自指定源IP范围的请求。但是,它仍然允许我列出来自其他IP的bucket内容。似乎桶政策根本没有效果

根据,当您有多个策略时,它们都被应用,并且显式拒绝优先于显式允许,所以我认为这应该是可行的,但事实并非如此

你知道为什么我不能基于sourceIP地址拒绝对bucket的请求吗


谢谢

您应该更新您的
Deny
策略,以包括对bucket本身而不是其内容执行的操作(
/*
):


当然,如果只有使用IAM策略的用户才能访问bucket,您可以简单地在原始IAM策略上添加
IpAddress
条件,以便他们只能使用给定IP地址集中的bucket。这将避免使用
拒绝
策略。

您所说的“允许我从其他IP访问存储桶”是什么意思?具体是哪个命令?
Deny
策略指的是
mybucket/*
,可能不单独适用于
mybucket
,因此
ListBucket
可能仍然被允许。我的意思是我仍然可以列出bucket的内容(编辑问题以澄清这一点)谢谢,我会在周一检查这是否有效并让你知道。更新:它有效。我编辑了你的答案,在同一个声明中声明了两个资源(bucket及其内容),以避免重复IP地址。用户需要对S3 bucket进行只读访问,并且我们已经对用户应用了下面的IAM策略,正如您所建议的,我们没有应用任何bucket策略,因为这是唯一具有特定IP地址的用户。还是不行。请建议<代码>{“版本”:“2012-10-17”,“声明”:[{“Sid”:“VisualEditor0”,“效果”:“允许”,“操作”:[“s3:GetObject”,“s3:ListBucket”],“资源”:[“arn:aws:s3:::市场日志”,“arn:aws:s3:::marketplace logs/*”,],“Condition:{“IpAddress:{“aws:SourceIp:“13.xxx.xxx.xxx/32”}}}}}}}}}@nitin194请创建一个新问题,而不是通过对旧问题的评论提问。