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

IAM用户访问S3对象HTTPS URL的存储桶策略配置咨询

S3对象HTTPS URL无法访问的核心原因

你直接在浏览器中访问S3对象的原生HTTPS链接时,发起的是匿名访问请求。你当前的存储桶策略没有对匿名请求开放s3:GetObject权限,所以会被默认拒绝。你本地可以下载对象,是因为本地客户端用的是已经授权的IAM身份发起的带身份校验的请求,和直接访问URL的请求逻辑完全不同。

可选解决方案

方案一:仅指定IAM用户可访问,不开放任何匿名权限

你现有策略缺少Principal字段,没有明确指定授权的IAM身份,首先补全存储桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::[你的AWS账号ID]:user/[目标IAM用户名]"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::[你的存储桶名称]"
        },
        {
            "Sid": "GetObject",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::[你的AWS账号ID]:user/[目标IAM用户名]"
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::[你的存储桶名称]/*"
        }
    ]
}

访问时你可以给目标用户生成预签名URL,预签名URL自带IAM身份的签名校验信息,你可以自定义有效期,有效期内所有拿到链接的用户都可以直接访问内容,不需要额外配置IAM权限,也不需要把存储桶设为公开。

方案二:允许符合指定条件的匿名请求可直接访问URL

如果你需要让指定范围的用户不需要IAM身份就能直接访问URL,可以在策略中添加Condition限制条件,避免存储桶被设为完全公开,示例策略如下(以来源IP限制为例):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GetObjectWithLimit",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[你的存储桶名称]/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "192.168.1.0/24"
                }
            }
        }
    ]
}

你可以根据需求调整Condition规则,比如限制来源VPC、请求头信息等。

注意事项
  • 如果你使用带Principal: "*"的策略,需要对应调整存储桶的「阻止公开访问」配置,不要开启全量阻止公开访问规则,避免策略被拦截。
  • 上传对象时不要设置私有对象级别的ACL,避免覆盖存储桶策略的授权逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:06:02