You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

S3公共存储桶:启用访问日志同时限制日志文件夹仅所有者访问

问题

我有一个开启了公共只读访问权限的S3存储桶,同时启用了Server Access Logging(服务器访问日志)功能。因为担心匿名用户可以查看访问日志,我给/access-logs文件夹添加了拒绝策略,但添加Deny语句后服务器访问日志无法正常工作。请问有没有办法既能启用日志功能,又能把日志文件夹的访问权限仅限制给存储桶所有者?

原策略如下:

{
    "Version": "2012-10-17",
    "Id": "S3-Console-Auto-Gen-Policy-1234567",
    "Statement": [
        {
            "Sid": "S3PolicyStmt-DO-NOT-MODIFY-1234567",
            "Effect": "Allow",
            "Principal": {
                "Service": "logging.s3.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::example-bucket/*"
        },
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::example-bucket/*"
        },
        {
            "Sid": "RestrictAccessLOgs",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::example-bucket/access-logs/*"
        }
    ]
}
解决方案

核心思路是避免使用Deny语句(它会优先覆盖所有Allow权限,容易引发意外问题),而是缩小公共只读权限的范围,同时确保日志服务拥有专属的写入权限,具体调整方案如下:

调整后的桶策略

{
    "Version": "2012-10-17",
    "Id": "S3-Console-Auto-Gen-Policy-1234567",
    "Statement": [
        {
            "Sid": "AllowLoggingServicePut",
            "Effect": "Allow",
            "Principal": {
                "Service": "logging.s3.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::example-bucket/access-logs/*"
        },
        {
            "Sid": "PublicReadExceptLogs",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::example-bucket/*",
            "Condition": {
                "StringNotLike": {
                    "s3:prefix": "access-logs/*"
                }
            }
        }
    ]
}

策略说明

  1. 日志服务写入权限:第一条语句专门授权S3日志服务向access-logs文件夹写入日志文件,权限范围精准限定,避免不必要的全局权限。
  2. 公共只读权限范围控制:第二条语句通过StringNotLike条件,让公共只读权限仅对access-logs文件夹以外的对象生效,匿名用户无法读取日志文件,但不影响其他对象的公共访问。
  3. 所有者权限保障:存储桶所有者凭借AWS身份权限(无需额外桶策略配置),默认拥有对桶内所有对象的完全访问权限,包括日志文件。

额外提示:如果你的桶开启了Block Public Access设置,需确保没有完全阻止公共访问(因为你需要保留公共只读功能),同时确认没有阻止日志服务的写入权限。

内容的提问来源于stack exchange,提问作者Aiman Zaidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:30:49