amazon-web-services - pricing - elasticsearch precio
PolĂtica de acceso adecuada para Amazon Elastic Search Cluster (5)
Recientemente comencé a usar el nuevo servicio Amazon Elasticsearch y parece que no puedo entender la política de acceso que necesito, de modo que solo puedo acceder a los servicios desde mis instancias EC2 que tienen asignada una función específica de IAM.
Aquí hay un ejemplo de la política de acceso que actualmente he asignado para el dominio ES:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::[ACCOUNT_ID]:role/my_es_role",
]
},
"Action": "es:*",
"Resource": "arn:aws:es:us-east-1:[ACCOUNT_ID]:domain/[ES_DOMAIN]/*"
}
]
}
Pero como dije, esto no funciona.
Me conecto a la instancia EC2 (que tiene el rol
my_es_role
asociado) e intento ejecutar una llamada curl simple en el punto final "https: //*.es.amazonaws.com", aparece el siguiente error:
{"Mensaje": "Usuario: anónimo no está autorizado para realizar: es: ESHttp Obtenga el recurso: arn: aws: es: us-east-1: [ACCOUNT_ID]: dominio / [ES_DOMAIN] /“}
¿Alguien sabe lo que tengo que cambiar en la política de acceso para que esto funcione?
De acuerdo con el documento de AWS y como usted (y yo) acabamos de probar, no puede restringir el acceso a un dominio de AWS ES a un rol / cuenta / usuario / ... ¡y simplemente eliminarlo!
Los clientes estándar, como curl, no pueden realizar la firma de solicitud que se requiere de las políticas de acceso basadas en identidad. Debe usar una política de acceso basada en la dirección IP que permita el acceso anónimo para realizar con éxito las instrucciones de este paso. ( http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg-search.html )
Entonces tienes básicamente dos soluciones:
- cambiar su política de acceso y restringirla a IP (s), creo que no puede usar una IP privada porque su clúster ES no parece pertenecer a su VPC (predeterminado o no). Por favor use la IP pública
- firme su solicitud: http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-signing-service-requests
Firmar su solicitud es probablemente la mejor solución si desea mantener su política de acceso como está (que es más flexible que restringir a una IP), pero parece ser un poco más complejo. No lo he intentado hasta ahora y no puedo encontrar ningún documento para ayudar.
Llegué un poco tarde a la fiesta, pero pude lidiar exactamente con el mismo problema agregando firma a mis solicitudes.
Si usa Python (como yo), puede usar la siguiente biblioteca para que sea particularmente fácil de implementar: https://github.com/DavidMuller/aws-requests-auth
Funcionó perfectamente para mí.
Puede bloquear el acceso solo a IAM, pero ¿cómo verá Kibana en su navegador? Puede configurar un proxy ( consulte el módulo Gist y / o NPM ) o habilitar tanto el acceso basado en IP como IAM para ver los resultados.
Pude obtener acceso restringido a IP de IAM con la siguiente Política de acceso. Tenga en cuenta que el orden es importante: no pude hacerlo funcionar con la declaración basada en IP antes de la declaración IAM.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.168.1.0",
"192.168.1.1"
]
}
}
}
]
}
Mi instancia EC2 tiene un perfil de instancia con la
arn:aws:iam::aws:policy/AmazonESFullAccess
.
Logstash debe firmar las solicitudes utilizando el
complemento de salida logstash-output-amazon-es
.
Logstash que se ejecuta en mi instancia EC2 incluye una sección de salida como esta:
output {
amazon_es {
hosts => ["ELASTICSEARCH_HOST"]
region => "AWS_REGION"
}
# If you need to do some testing & debugging, uncomment this line:
# stdout { codec => rubydebug }
}
Puedo acceder a Kibana desde las dos IP en la política de acceso (192.168.1.0 y 192.168.1.1).
Puede usar una política basada en recursos o una política basada en identidad en lugar de una política basada en IP, que es como codificar la dirección IP.
Pero debe usar la versión 4 de Signature para firmar la solicitud
Para la implementación de Java, consulte http://mytechbites.blogspot.in/2017/04/secure-amazon-elastic-search-service.html
También estoy tratando de hacer esto, y lo hice funcionar usando la opción
Allow access to the domain from specific IP(s)
con la IP elástica de mi instancia EC2 (también podría funcionar usando la IP privada de la instancia, pero estoy no estoy muy seguro)