【问题标题】:How to create a bucket policy with sourceIP restriction for S3 Access Log target bucket?如何为 S3 访问日志目标存储桶创建具有 sourceIP 限制的存储桶策略?
【发布时间】:2021-01-13 17:28:52
【问题描述】:

我创建了一个 S3 存储桶并启用了服务器访问日志记录。还有一个S3 bucket,就是我提到的第一个bucket的服务器访问日志投递的目标bucket。

现在需要对目标bucket的策略保持sourceIP限制,所以目标bucket上的策略有点如下-

{
    "Version": "2012-10-17",
    "Id": "Policy1234567890",
    "Statement": [
        {
            "Sid": "Allow-only-specific-sourceIPs",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::log-target-bucket-xyz",
                "arn:aws:s3:::log-target-bucket-xyz/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "10.0.0.1",
                        "10.0.0.2"
                    ]
                },
                "StringNotEquals": {
                    "aws:sourceVpce": "vpce-1234xyz",
                    "aws:username": "xyz-user"
                }
            }
        }
    ]
}

但使用此策略,服务器访问日志不会传送到存储桶。此策略应该允许 S3 操作仅针对源 IP、vpc 端点和用户名条件。

目标存储桶还具有以下 ACL:

{
       "Grantee": {
            "Type": "Group",
            "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery"
        },
        "Permission": "WRITE"
    },
    {
        "Grantee": {
            "Type": "Group",
            "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery"
        },
        "Permission": "READ_ACP"
    }

问题是:S3 服务器没有生成访问日志,我需要在目标存储桶上保留 sourceIP、vpce 限制。如果我从存储桶策略中删除限制,问题就会解决。但似乎找不到解决方案来生成带有限制的日志。

编辑: 尝试了以下情况,但没有奏效:

"StringNotLikeIfExists": {
  "s3:x-amz-grant-write": "acs.amazonaws.com/groups/s3/LogDelivery"
}

如果有人有解决此问题的任何解决方案或建议,请告诉我。非常感谢任何帮助。

谢谢!

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    如果 NotIpAddressIfExistsStringNotEqualsIfExists 条件如下所述,您的策略应该是一个组合:

        {
            "Version": "2012-10-17",
            "Id": "Policy1234567890",
            "Statement": [
                {
                    "Sid": "Allow-only-specific-sourceIPs",
                    "Effect": "Deny",
                    "Principal": "*",
                    "Action": "s3:*",
                    "Resource": [
                        "arn:aws:s3:::log-target-bucket-xyz",
                        "arn:aws:s3:::log-target-bucket-xyz/*"
                    ],
                    "Condition": {
                        "NotIpAddressIfExists": {
                            "aws:SourceIp": [
                                "10.0.0.1",
                                "10.0.0.2"
                            ]
                        },
                        "StringNotEqualsIfExists": {
                            "aws:sourceVpce": "vpce-1234xyz",
                            "aws:username": "xyz-user"
                        }
                    }
                }
            ]
        }
    

    这在这个问题的s3-bucket-security-open-access-restricted-by-public-ip-and-vpc-endpoint中有很好的解释

    【讨论】:

    • 感谢您的回答,但只是想澄清一下我面临的问题是存储桶中没有生成 S3 服务器访问日志。这些日志是由 S3 日志交付组根据 AWS 文档生成的,所以我猜测设置 sourceIp 和 vpce 限制不允许日志交付组将日志文件放入存储桶中。这是我需要解决的。除了这个问题,sourceIp 和 vpce 限制工作正常。
    • 我不确定你是否有时间去解释条件,我理解你的问题,所以你可以在政策中看到我只是改变了条件。说明:定义策略时,如果请求来自 VPC 端点,则源 IP 密钥不可用。同样,如果请求来自 VPC 端点之外,则 VPC 相关密钥不可用。 IfExists 需要用于评估有条件可用的键。在您的政策中,您始终检查条件,我修改了条件,只有在它们存在时才会检查它们。
    • 好的,我已经理解您的建议并合并了更改。但是我的问题还没有解决。没有生成日志。感谢您的解释@samtoddler。
    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2019-09-09
    • 2021-01-19
    • 2021-10-18
    • 2021-06-28
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多