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

如何限制仅允许https://app.datadoghq.com访问我的API网关?

解决API Gateway仅允许Datadog Webhook访问的安全配置问题

首先明确:CORS配置对Datadog的服务器端Webhook请求无效,CORS是浏览器端的跨域限制机制,而Datadog发送的是服务器到服务器的请求,不受CORS规则约束,所以你需要通过以下几种方式组合实现访问限制:

1. 配置API Gateway资源策略做基础过滤

资源策略可以直接在API Gateway层面限制请求来源,结合Datadog的IP范围和请求头做双重校验。

示例资源策略(适配HTTP API)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:你的AWS区域:你的账号ID:你的API ID/*/*/*",
      "Condition": {
        "StringEquals": {
          "aws:Referer": "https://app.datadoghq.com"
        },
        "IpAddress": {
          "aws:SourceIp": [
            "3.216.0.0/14",
            "34.192.0.0/12",
            "52.0.0.0/7"
          ]
        }
      }
    }
  ]
}
  • 替换你的AWS区域、你的账号ID、你的API ID为实际值
  • SourceIp里的IP段是Datadog公开的Webhook出站IP范围,建议定期确认官方更新
  • aws:Referer验证请求来自Datadog官方域名

2. 验证Datadog请求签名(最可靠的身份校验)

Datadog Webhook支持基于HMAC的签名验证,会在请求头中携带DD-SIGNATURE,你可以在Lambda函数中验证这个签名,确保请求确实来自Datadog。

步骤:

  1. 在Datadog的Webhook设置页面,配置一个自定义签名密钥
  2. 在Lambda函数中添加签名验证逻辑,示例代码(Python):
import hmac
import hashlib
import base64

def verify_datadog_signature(request_body, signature_header, secret):
    # 拆分签名格式:v1=xxx
    if not signature_header or '=' not in signature_header:
        return False
    _, signature = signature_header.split('=', 1)
    # 计算请求体的HMAC-SHA256签名
    computed_hmac = hmac.new(
        secret.encode('utf-8'),
        request_body.encode('utf-8'),
        hashlib.sha256
    ).digest()
    computed_signature = base64.b64encode(computed_hmac).decode('utf-8')
    # 用安全的比较方式避免时序攻击
    return hmac.compare_digest(computed_signature, signature)

def lambda_handler(event, context):
    # 获取请求体和签名头
    request_body = event.get('body', '')
    signature_header = event['headers'].get('DD-SIGNATURE', '')
    datadog_secret = '你在Datadog配置的签名密钥'
    
    # 验证签名
    if not verify_datadog_signature(request_body, signature_header, datadog_secret):
        return {
            'statusCode': 403,
            'body': 'Invalid request signature'
        }
    
    # 后续存储数据到S3的逻辑
    # ...
    
    return {
        'statusCode': 200,
        'body': 'Data received successfully'
    }

3. 额外添加请求头验证规则

在HTTP API的路由配置中,你可以添加强制请求头校验,比如要求请求必须包含DD-SIGNATURE或X-Datadog-Webhook-Name这类Datadog专属请求头,直接拒绝不符合要求的请求。

配置方式:

  • 进入API Gateway控制台,找到你的HTTP API对应的路由
  • 在“请求验证”中添加“请求头”验证规则,设置为“必须存在”指定的Datadog请求头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:09:19