Blog de Amazon Web Services (AWS)
Políticas de Seguridad en Amazon OpenSearch Service para AWS Lambda
Por Servio Tulio Reyes Castillo, Arquitecto de soluciones en AWS México
OpenSearch es una suite de análisis y búsqueda de código abierto, el cual está formado por un daemon de motor de búsqueda (OpenSearch) y visualizaciones, así como una interfaz gráfica por medio de OpenSearch Dashboards. Siendo Amazon OpenSearch Service un servicio administrado en la nube de AWS, listo para su consumo, que incluye el motor de búsqueda, las visualizaciones, funciones de seguridad, y complementos para las visualizaciones y las búsquedas.
Dependiendo los diferentes desarrollos, Amazon OpenSearch Service puede ser utilizado directamente desde su interfaz gráfica para visualizar gráficas o generar reportes, y hacerle peticiones programáticas para ejecutar consultas de la información dentro de su clúster. Peticiones siendo ejecutadas usando Python, Java, y otros lenguajes de programación.
Arquitectura
Siguiendo el segundo ejemplo, una forma de consumo es por medio de funciones o microservicios (existentes en contenedores u otras instancias de cómputo). En esta publicación nos enfocaremos en la configuración de una función de AWS Lambda para acceder a Amazon OpenSearch Service, pero los pasos para dar permisos son muy similares al de las otras opciones de cómputo comentadas. La arquitectura general es:
Para tener los permisos necesarios se deben ajustar 2 políticas. Una relacionada con la política de acceso hacia el clúster y una segunda que involucra el control de acceso detallado para Amazon OpenSearch Service, y otra dentro del motor de OpenSearch. Para comprender más sobre la toma de decisiones y las prioridades revisar la siguiente documentación. La política de acceso es mandatoria de agregar. Mientras que el control de acceso detallado es opcional, es una buena práctica de seguridad tenerla habilitada.
Política de Acceso
La política de acceso establece el acceso al clúster en Amazon OpenSearch Service. Por medio de una política estructurada en JSON, podemos definir que entidades pueden acceder al clúster de Amazon OpenSearch Service. Limitando el acceso por usuario, rol, cuenta de AWS, u otras opciones. Esta puede ser definida durante la creación del clúster y ser modificada las veces necesarias durante la existencia del mismo. Teniendo 3 opciones como se muestra en la siguiente imagen.
Si selecciona la opción de “Usar solo el control de acceso detallado” el clúster puede ser accedido desde cualquier recurso u ubicación; la autenticación y autorización serán manejados por el motor de OpenSearch. Opción recomendada si se busca hacer un dashboard de acceso general a múltiples usuarios, o si está embebida en algún otro sitio web.
La segunda opción denegará todas las peticiones hacia el clúster. Usado en caso que se haya identificado un comportamiento anómalo y se busque preservar el estado del clúster.
Y la tercera le permitirá establecer los usuarios, IP’s, o entidades a las cuales únicamente quiere darles acceso. Idóneo cuando la información quiera ser consumida por entidades en su infraestructura o de manera privada.
Para el ejemplo de este blog, usaremos la primera opción ya que buscamos poder acceder al clúster desde múltiples entidades e IP’s no definidas.
Control de Acceso Detallado
El control de acceso detallado ofrece formas adicionales de manejar el consumo de los datos en Amazon OpenSearch Service. Donde se pueden definir diferentes roles para el acceso y administración del clúster. Aquí se puede establecer qué usuarios pueden hacer consultas, qué índices pueden consumir, y las acciones que pueden realizar.
Dentro del ambiente de AWS la forma más directa de establecer las relaciones de confianza y permisos entre Amazon OpenSearch Service y las funciones es por medio de los roles de AWS Identity and Access Management (AWS IAM) asignados.
A continuación, se describe el proceso para vincular el rol de una función de AWS Lambda dentro del motor de OpenSearch:
- Seleccionar y copiar el ARN del rol asociado a la función de AWS Lambda.
2. Dentro del clúster de Amazon OpenSearch Service usando la interfaz gráfica. En la página de inicio, seleccionar el menú de hamburguesa (tres líneas horizontales) en la parte superior izquierda.
3. Dar clic en el apartado de seguridad (Security) dentro de la sección de OpenSearch Plugins.
4. Ir a los roles.
- Seleccionar el rol con los permisos que necesiten o, en su defecto, crear uno nuevo. Dado que esta Lambda únicamente ejecutará consultas de lectura en los índices, seleccionaremos la opción de readall. Para hacer roles personalizados revisar esta documentación.
6. Dentro del rol, hacer clic en usuarios mapeados (Mapped users).
7. Hacer clic en manejar el mapeo (Manage mapping) de los roles con los servicios para modificar las entidades que utilizan este rol.
8. Agregar el ARN del recurso en la sección de roles (Backend roles).
- Hacer clic en mapear (Map) en la parte inferior de la pantalla.
- De ser exitoso el mapeo saldrá el siguiente pop-up:
11. ¡Felicidades! Se agregaron permisos de una función de AWS Lambda para consumir recursos de manera segura en Amazon OpenSearch Service. Solo resta probar la función de AWS Lambda y consumir los recursos.
Conclusión
En esta publicación comentamos sobre los diferentes niveles de seguridad que tiene Amazon OpenSearch Service y cómo hacer su configuración para que una función de AWS Lambda pueda consumir sus datos. A continuación, se encuentran ejemplos de diferentes casos de uso de Amazon OpenSearch Service:
- https://docs.aws.amazon.com/es_es/opensearch-service/latest/developerguide/search-example.html
- https://github.com/aws-samples/siem-on-amazon-opensearch-service
Además de la documentación con cada una de las características de seguridad de Amazon OpenSearch Service:
Sobre el autor
Servio Tulio Reyes Castillo es arquitecto de soluciones en AWS México. Le interesan las ciencias de la computación y las tecnologías aeroespaciales.
Revisores
Arturo Minor Bahena es un arquitecto de soluciones de prototipado con sede en la Ciudad de México. Disfruta del aire libre y viajando, y le interesan las ciencias de la computación, los idiomas y la tecnología. Trabaja en AWS para ayudar a los clientes a innovar, desarrollar y vislumbrar nuevas soluciones.
René Roldán es arquitecto de soluciones de Juegos en AWS for Games México. Le interesan las ciencias de la computación y el desarrollo de videojuegos.
Marco Sáenz es arquitecto de soluciones en AWS Colombia. En su rol actual, ayuda a clientes del segmento de pequeñas y medianas industrias en su camino en la nube. Es un apasionado por la seguridad y el mundo gaming. Anteriormente, trabajó como desarrollador de software.