Nous avons une application Rails Heroku qui a besoin d'accéder à un très grand cluster Elasticsearch. Nous avons envisagé d'utiliser des services Elasticsearch Heroku tels que Bonsai, mais leur prix augmente très rapidement. Nous avons donc décidé d'utiliser le service Elasticsearch d'AWS.
Le cluster Elasticsearch peut être sécurisé en le gardant complètement hors d'internet, en utilisant un proxy inverse ou en autorisant les sources de trafic.
En théorie, il est possible d'autoriser la région dans laquelle se trouve une application Heroku, en autorisant toute la région AWS sous-jacente. Même s'il s'agit toujours d'un grand bloc d'adresses IP, et qu'il est possible que des scanners de ports puissent fonctionner depuis AWS, c'est tout de même une amélioration.
Cependant, la liste des adresses IP à autoriser est assez longue (voir ci-dessous). Y a-t-il un moyen plus efficace de le faire ?
Confirmer la région AWS
curl -n -X GET https://api.heroku.com/regions/eu -H "Accept:
application/vnd.heroku+json; version=3"
{
"country":"Irlande",
"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"
}
Télécharger le fichier des régions AWS
https://ip-ranges.amazonaws.com/ip-ranges.json
Le lire
jq '.prefixes[] | select(.region=="eu-west-1")' < ip-ranges.json
De nombreuses entrées :
{
"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