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

如何阻止AWS账号B中特定EC2实例访问账号A的AWS REST API

可行解决方案

方案1:AWS WAF 精准IP拦截(修正之前的配置问题)

你之前用WAF没生效,大概率是配置环节出错了,按以下步骤调整:

  • 先获取账号B中目标EC2实例的公网IP地址(如果是内网访问则取私网IP,需确保VPC peering或网络连通)
  • 在账号A的WAF控制台创建新规则:
    • 规则类型选「IP匹配」,填入目标EC2的IP(格式x.x.x.x/32)
    • 动作设置为「阻止」,并将该规则的优先级设为最高(确保先于其他允许规则触发)
  • 将WAF关联到你的API所在的资源:如果是API Gateway部署的API,关联到对应API;如果是ALB后端的API,关联到目标ALB
  • 验证:用目标EC2实例发起请求,确认被拦截;用账号B其他实例或外部来源测试,确保正常访问

方案2:API Gateway 资源策略(仅适用于API Gateway部署的API)

如果你的REST API是基于AWS API Gateway,直接修改其资源策略,实现「允许账号B所有访问,但排除特定EC2 IP」的逻辑:

  1. 打开API Gateway控制台,进入目标API的「资源策略」页面
  2. 替换为类似以下的策略(替换占位符为你的实际信息):
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:你的区域:账号A ID:API ID/*/*/*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalAccount": "账号B ID"
        },
        "NotIpAddress": {
          "aws:SourceIp": ["目标EC2的IP/32"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:你的区域:账号A ID:API ID/*/*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:PrincipalAccount": "账号B ID"
        }
      }
    }
  ]
}
  1. 保存策略后,测试访问效果:目标EC2被拦截,账号B其他实例及外部来源正常访问

方案3:应用层拦截(适用于EC2/容器部署的API)

如果你的API部署在账号A的EC2或容器中,可直接在应用的反向代理或代码中添加IP拦截规则:

  • 比如用Nginx:在配置文件中添加deny x.x.x.x;(x.x.x.x为目标EC2的IP),重启Nginx后生效
  • 比如在API代码中(如Python/Java),添加请求IP校验逻辑,若匹配目标IP则返回403禁止访问

补充:之前方案失败的原因分析

  • AWS WAF:未正确关联资源、规则优先级低于允许规则,或IP地址填写错误
  • 安全组:跨账号安全组只能引用整个安全组,无法针对单个EC2实例做限制
  • NACLs:其实可以添加单个IP的拒绝规则,但需注意NACLs是无状态的,要同时配置入站和出站规则,且拒绝规则优先级高于允许规则,但灵活性不如WAF或资源策略

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:06:10