【发布时间】:2018-09-18 13:24:19
【问题描述】:
我在 AWS 中配置了一个 API Gateway 端点,并尝试使用其访问策略来保护它。
我知道可以将端点的访问限制为特定的 IP 地址,但是否也可以根据调用 API 的主机来限制访问? AWS 有关于这些访问策略示例的文档,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"arn:aws:execute-api:region:account-id:api-id/*"
]
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"arn:aws:execute-api:region:account-id:api-id/*"
],
"Condition" : {
"IpAddress": {
"aws:SourceIp": ["192.0.2.0/24", "198.51.100.0/24" ]
}
}
}
]
}
例如,我有一个应用程序 www.example.com。我想在访问策略中添加一些内容,只允许 www.example.com 成功向 API 提交请求。
【问题讨论】:
-
您指的是来自 www.example.com 所在服务器的 API 请求吗?或者这是一个在访问者的网络浏览器中运行的 JavaScript 网络应用程序,其中 API 请求实际上来自每台最终用户的计算机,而不是 www.example.com 服务器?
-
请求实际上来自 JS webapp。 webapp 在 www.example.com 上运行。希望这可以澄清事情。
-
JavaScript webapp 不会“在 www.example.com 上运行”,它从 www.example.com 加载并在每个用户计算机上的网络浏览器中运行。因此,您无法将 IP 和/或主机名列入白名单,因为它将是每个潜在用户的个人计算机的 ip/主机名。
-
我明白,这是有道理的。据我了解,如果请求直接来自运行 www.example.com 的服务器怎么办?我假设服务器运行的 IP 可用于保护 API 是否正确?
-
是的,如果请求来自服务器,那么显然您可以将该服务器的 IP 列入白名单。但是,如果您使用 API Gateway 为 Web 应用程序提供 API 以从浏览器进行 AJAX 样式调用,那么这种安全方法根本不起作用,您应该考虑使用 API 密钥或 JWT 令牌或其他东西.
标签: amazon-web-services authentication aws-api-gateway aws-access-policy