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

S3存储桶IP限制策略403异常:终端curl正常PHP调用报错

问题分析与解决办法

核心原因

你遇到的问题本质是两种访问场景的源IP不一致:

  • 终端curl请求用的是你本地设备的公网IP(也就是你确认的68.6N.NN1.1N2),符合策略要求所以返回200;
  • 通过index.php访问时分两种情况:
    1. 若你在浏览器里打开index.php后直接加载S3图片链接,S3识别到的是你浏览器的出口公网IP(如果本地设备和浏览器同属一个网络,IP应该一致;但如果index.php部署在服务器上,你用浏览器访问时,S3看到的是你本地浏览器的IP,而非服务器IP);
    2. 若你在PHP代码里用后端请求(比如file_get_contents、curl)拉取S3文件,S3识别到的是你的服务器公网IP,和策略里填的本地IP不符,所以返回403。

解决步骤

  1. 确认实际访问的源IP

    • 场景1(浏览器直接加载):打开浏览器,查看自身公网IP(可通过能显示公网IP的页面获取),记下该IP;
    • 场景2(PHP后端请求):登录服务器,在终端执行curl ifconfig.me(或类似命令),获取服务器的公网IP。
  2. 修正存储桶策略
    将策略里的aws:SourceIp值替换为上面获取到的真实IP,单个IP可直接填写,或加上/32掩码(更规范),示例如下:

    {
        "Version": "2012-10-17",
        "Id": "Policy17NN310NN0610",
        "Statement": [
            {
                "Sid": "Stmt171NN106NN335",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::testbucket/file.jpg",
                "Condition": {
                    "IpAddress": {
                        "aws:SourceIp": "真实IP/32"
                    }
                }
            }
        ]
    }
    
  3. 验证
    保存策略后,重新测试index.php里的访问方式,即可正常返回200。

额外补充

如果需要同时允许本地终端和浏览器/服务器访问,可在策略里用数组形式添加多个IP,示例:

"aws:SourceIp": ["68.6N.NN1.1N2/32", "服务器IP/32"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:05:06