我们有一个 Heroku Rails 应用,需要访问非常大的 Elasticsearch 集群。我们考虑过使用 Heroku Elasticsearch 服务,例如 Bonsai,但它们的价格涨得非常快。因此,我们决定使用 AWS Elasticsearch 服务。
可以通过将 Elasticsearch 集群完全隔离在互联网之外、使用反向代理或将流量源列入白名单来确保其安全。
理论上,通过将整个底层 AWS 区域列入白名单,可以将 Heroku 应用程序所在的区域列入白名单。虽然这仍然是一大块 IP,并且端口扫描程序可能在 AWS 内部运行,但这仍然是一项改进。
但是,白名单中的 IP 列表很长(见下文)。有没有更好的方法?
确认 AWS 区域
curl -n -X GET https://api.heroku.com/regions/eu -H "Accept:
application/vnd.heroku+json; version=3"
{
"country":"Ireland",
"created_at":"2013-09-19T01:29:12Z",
"description":"Europe",
"id":"ed30241c-ed8c-4bb6-9714-61953675d0b4",
"locale":"Dublin",
"name":"eu",
"private_capable":false,
"provider":{
"name":"amazon-web-services",
"region":"eu-west-1"
},
"updated_at":"2016-08-09T22:03:28Z"
}
下载 AWS 区域文件
https://ip-ranges.amazonaws.com/ip-ranges.json
解析
jq '.prefixes[] | select(.region=="eu-west-1")' < ip-ranges.json
许多条目:
{
"ip_prefix": "52.218.0.0/17",
"region": "eu-west-1",
"service": "S3"
}
{
"ip_prefix": "54.231.128.0/19",
"region": "eu-west-1",
"service": "S3"
}
{
"ip_prefix": "34.240.0.0/13",
"region": "eu-west-1",
"service": "EC2"
}
{
"ip_prefix": "34.248.0.0/13",
"region": "eu-west-1",
"service": "EC2"
ETC
答案1
我不太确定我是否理解了你的问题,但它似乎类似于这个问题来自 Heroku 帮助。
从他们的回答来看:
Heroku 在任何给定时间使用的 IP 都是高度动态的,这意味着已发布的范围可能涵盖 Heroku 当前未使用的其他 IP 地址。这意味着出于安全原因,通常不希望将防火墙开放给整个 AWS 区域。如果您无论如何都想这样做,可以在此处找到 AWS 发布的 IP 范围: http://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html
对于通用运行时中的应用,更好的方法是使用插件来提供静态出站 IP 地址 https://elements.heroku.com/addons/categories/network或依赖通过 TLS 进行的安全通信。
因此您可以考虑使用提供静态 IP 的附加组件。
根据我自己的经验,我一直在使用QuotaGuard 静态我非常满意。它使用起来非常简单(就像 Heroku 中的许多东西一样)。
但是,如果您需要运行大量查询,它可能是一个昂贵的解决方案。