amazon web services - precio - Política de acceso basado en roles IAM de AWS Elasticsearch Service
elasticsearch precio (4)
He estado luchando para descubrir cómo comunicarme con el servicio de Amazon ES desde mis instancias de EC2.
La documentación indica claramente que el servicio de Amazon ES es compatible con las políticas de acceso basadas en roles y usuarios de IAM. http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-access-policies
Sin embargo, cuando tengo esta política de acceso para mi dominio ES:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:role/my-ec2-role"
},
"Action": "es:*",
"Resource": "arn:aws:es:us-west-2:123456789:domain/myDomain/*"
}
]
}
No puedo iniciar sesión en una instancia de ec2 y ejecutar un rizo para golpear mi clúster elasticsearch.
Tratando de hacer un simple rizo de la API _search:
curl "http://search-myDomain.es.amazonaws.com/_search"
Produce una respuesta de error de autenticación:
{"Message":"User: anonymous is not authorized to perform: es:ESHttpGet on resource: arn:aws:es:us-west-2:123456789:domain/myDomain/_search"}
Solo para estar más seguro, puse la Política de AmazonESFullAccess
en mi rol de IAM, todavía no funciona.
Debo estar perdiendo algo, porque ser capaz de interactuar de manera programática con Elasticsearch desde instancias de ec2 que usan un rol de IAM es esencial para lograr cualquier cosa con el servicio de Amazon ES.
También veo esta declaración contradictoria en los documentos.
Ejemplo de política basada en IAM Usted crea políticas de acceso basadas en IAM utilizando la consola IAM de AWS en lugar de la consola de Amazon ES. Para obtener información sobre cómo crear políticas de acceso basadas en IAM, consulte la documentación de IAM.
Ese enlace a la documentación de IAM, es a la página de inicio de IAM y contiene exactamente cero información sobre cómo hacerlo. ¿Alguien tiene una solución para mí?
¿Por qué no crea un proxy con ip elástica y le permite a su proxy acceder a su ES? Básicamente existen tres formularios a los que puede limitar el acceso en su ES:
- Permitir a todos
- Lista blanca de IP
- Firmando la clave de acceso y la clave secreta proporcionada por AWS.
Estoy usando dos formularios, en mis aplicaciones php prefiero usar proxy detrás de la conexión a ES y en mi aplicación nodejs prefiero firmar mis solicitudes usando el módulo de nodo http-aws-es. Es útil crear un entorno de proxy porque mis usuarios necesitan acceder a la interfaz de Kibana para ver algunos informes y es posible porque han configurado el proxy en sus navegadores =)
Debo recomendarle que cierre el acceso a sus índices de ES, ya que es bastante fácil de eliminarlos, curl -XDELETE https://your_es_address/index cualquiera puede hacerlo pero puede decir: "cómo los demás usuarios obtendrán mi dirección de ES ? " y te responderé: "La seguridad basada en la oscuridad no es una seguridad real"
Mi política de acceso de seguridad es básicamente algo así:
Al utilizar el servicio IAM con AWS, debe firmar sus solicitudes. curl no admite solicitudes firmadas (que consiste en hash de la solicitud y agregar un parámetro al encabezado de la solicitud). Puede usar uno de sus SDK que tiene incorporado el algoritmo de firma y luego enviar esa solicitud.
Puede encontrar los SDK para los idiomas más populares aquí: http://aws.amazon.com/tools/
Me encontré con este problema recientemente y el problema raíz es que ninguno de los SDK de Amazon admite las operaciones de Elasticsearch como buscar, poner, etc.
La única solución alternativa en este momento es ejecutar solicitudes directamente contra el punto final utilizando solicitudes firmadas: http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html
El ejemplo aquí es para llamar a EC2, pero se puede modificar para que llame contra Elasticsearch. Simplemente modifique el valor de "servicio" a "es". A partir de ahí, hay que rellenar los valores para
- el punto final (que es la URL completa de su grupo, incluida la operación sin parámetros de solicitud)
- el host (la parte entre https: // y su URI canónica como / _status
- el uri canónico que es el URI después del primer / inclusive (como / _status) pero sin la cadena de consulta
- Los parámetros de solicitud (todo después de? inclusive)
Tenga en cuenta que solo logré que esto funcionara hasta el momento utilizando las credenciales de AWS, ya que se supone que usted pasa una clave de acceso y una clave secreta a las diversas llamadas de firma (clave de acceso y clave secreta en el ejemplo). Debería ser factible usar roles IAM, pero primero tendrá que llamar al servicio de token de seguridad para obtener credenciales temporales que se pueden usar para firmar la solicitud. Hasta que haga eso, asegúrese de editar su política de acceso en el clúster de Elasticsearch para permitir las credenciales de usuario (user /
Primero, ¿dijo que no puede iniciar sesión en una instancia de EC2 para curvar la instancia de ES? ¿No puedes iniciar sesión? ¿O no puedes rizarlo desde EC2?
Tengo mi instancia de Elasticsearch (Servicio) abierta al mundo (sin nada) y puedo enrollarla bien, sin firmar. Cambié la política de acceso a prueba, pero desafortunadamente, se tarda una eternidad en volver después de cambiarla ...
Mi política se ve así:
{ "Version": "2012-10-17", "Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": "es:*",
"Resource": "arn:aws:es:us-east-1:843348267853:domain/myDomain/*"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": "es:*",
"Resource": "arn:aws:es:us-east-1:843348267853:domain/myDomain"
}
]
}
Me doy cuenta de que esto no es exactamente lo que desea, pero comience con esto (abierto al mundo), enrósquelo desde fuera de AWS y pruébelo. Luego, restringe, de esa manera puedes aislar los problemas.
Además, creo que tiene un problema con el "Principal" en su política de acceso. Usted tiene su papel de EC2. Entiendo por qué lo está haciendo, pero creo que el Director requiere un USUARIO, no un rol.
Vea abajo:
Director de escuela
Especifica la cuenta de AWS o el usuario IAM que tiene permitido o denegado el acceso a un recurso. La especificación de un comodín (*) habilita el acceso anónimo al dominio, lo cual no se recomienda. Si habilita el acceso anónimo, le recomendamos encarecidamente que agregue una condición basada en IP para restringir qué direcciones IP pueden enviar solicitudes al dominio de Amazon ES.
EDITAR 1
Para ser claros, ¿ha agregado la política de AmazonESFullAccess al rol my-ec2? Si va a utilizar políticas de acceso IAM, no creo que pueda tener una política basada en recursos adjunta (que es lo que está haciendo).
http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_compare-resource-policies.html
Para algunos servicios de AWS, puede otorgar acceso cruzado a sus recursos. Para hacer esto, adjunte una política directamente al recurso que desea compartir, en lugar de usar una función como proxy. El recurso que desea compartir debe admitir políticas basadas en recursos. A diferencia de una política basada en el usuario, una política basada en recursos especifica quién (en forma de una lista de números de ID de cuenta de AWS) puede acceder a ese recurso.
Posiblemente intente eliminar la política de acceso por completo?