Jon*_*n B 7 amazon-web-services amazon-iam aws-api-gateway aws-resource-group
我有一个要限制访问的 API Gateway api 设置。我在 AWS Route 53 中有一个子域设置,它指向我的应用程序所在的 CloudFront 分配。此应用程序向 API 发出 POST 请求。
我已经考虑过基于示例“AWS API 白名单”为我的 api 添加资源策略,但我似乎无法获得正确的语法,我经常遇到错误。
我还尝试创建一个 IAM 用户并使用 AWS_IAM auth 锁定 API,但随后我需要创建一个签名请求,这似乎有很多工作,通过资源策略应该会容易得多?
这是我尝试附加到 API 的资源策略示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity {{CloudFrontID}}"
},
"Action": "execute-api:Invoke",
"Resource": [
"execute-api:/*/*/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
这将返回以下错误:
Invalid policy document. Please check the policy syntax and ensure that Principals are valid.
小智 3
"AWS": "arn:aws:iam::cloudfront:user/CloudFront 源访问身份 {{CloudFrontID}}"
这个概念的问题在于这是一个公共 HTTP 请求。除非它是签名的请求,否则AWS不会知道任何IAM或ARN资源,它只知道它有一个标准的HTTP请求。如果您使用curl -v命令发出请求,您将看到请求参数如下所示:
得到
/测试/映射的cokerheaders
HTTP/2
主机:APIID.execute-api.REGION.amazonaws.com
用户代理:curl/7.61.1
接受: */*
您可以过滤用户代理,因为我确实看到了此处定义的条件。
我将通过在响应标头中捕获 api gw 请求 ID 并在 API 网关访问日志中查找这些值,来检查来自 cloudfront 的请求中的所有值以及从您的 curl 直接发送到 API 的请求。不过,您必须启用访问日志,并定义要记录的参数,您可以在此处查看如何操作。
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |