Cómo automatizar la orquestación de derechos de acceso en el cubo AWS S3 en 3 sencillos pasos

toadmin. ru

Hace unos años, cuando los servidores UNIX locales con sistemas de archivos grandes eran populares, las empresas desarrollaron amplias reglas y estrategias de gestión de carpetas para administrar derechos de acceso a diferentes carpetas para diferentes personas.

Por lo general, la plataforma de una organización atiende a diferentes grupos de usuarios con intereses muy diferentes, restricciones de nivel de privacidad o definiciones de contenido. En el caso de las organizaciones globales, esto incluso puede significar separar el contenido en función de la ubicación, es decir, básicamente entre usuarios que pertenecen a diferentes países.

Otros ejemplos típicos pueden incluir:

  • Separación de datos entre el desarrollo, las pruebas y los entornos de producción
  • Contenido de ventas que no está disponible para una audiencia general
  • Contenido legislativo específico del país que no se puede ver o acceder desde otra región
  • Contenido relacionado con el proyecto donde los «datos de gobernanza» solo deben estar a disposición de un número limitado de personas, etc.

Hay una lista potencialmente interminable de tales ejemplos. El punto es que siempre es necesario organizar los derechos de acceso a los archivos y datos entre todos los usuarios a quienes la plataforma otorga acceso.

En el caso de las soluciones locales, esta fue una tarea de rutina. El administrador del sistema de archivos simplemente configuró algunas reglas, utilizó la herramienta de elección, y luego las personas fueron asignadas a grupos de usuarios y los grupos de usuarios se asignaron a una lista de carpetas o puntos de montaje a los que deberían tener acceso. En el camino, el nivel de acceso se definió como acceso de solo lectura o lectura.

Ahora que mira las plataformas de AWS Cloud, es obvio que las personas tendrán requisitos similares para las restricciones de acceso a contenido. La solución a este problema, sin embargo, ahora debe ser diferente. Los archivos ya no se resisten en los servidores Unix, sino que residen en la nube (y potencialmente accesible no solo para toda la organización, sino incluso en el mundo), y el contenido se almacena en latas de basura S3 en lugar de carpetas.

A continuación se describe un enfoque alternativo para este problema. Se basa en la experiencia del mundo real que he tenido desarrollando tales soluciones para un proyecto específico.

Un enfoque simple pero en gran medida manual

Una forma de resolver este problema sin ninguna automatización es relativamente simple:

  • Cree un nuevo cubo para cada grupo individual de personas.
  • Asigne permisos al CART para que solo ese grupo específico pueda acceder al carrito S3.

Esto es ciertamente posible si se requiere una solución muy simple y rápida. Sin embargo, hay algunas limitaciones que debe tener en cuenta.

Por defecto, no se pueden crear más de 100 canastas S3 en una sola cuenta de AWS. Este límite se puede aumentar a 1000 especificando un aumento en el límite de servicio en el boleto de AWS. Si estos límites no son una preocupación en su caso de implementación particular, puede permitir que cada uno de sus usuarios de dominio individuales ejecute un carrito S3 separado y poner fin a esto.

Pueden surgir problemas si hay grupos de personas con responsabilidades interfuncionales o solo personas que necesitan acceso al contenido de más dominios al mismo tiempo. Por ejemplo:

  • Analistas de datos que evalúan el contenido de datos para varios dominios, regiones, etc. diferentes
  • El equipo de pruebas utilizó servicios compartidos que atienden a diferentes equipos de desarrollo.
  • Los usuarios informan que necesitan construir análisis de tablero para diferentes países de la misma región.

Como puede imaginar, esta lista puede volver a crecer tanto como puede imaginar, y las necesidades de las organizaciones pueden generar todo tipo de casos de uso.

Cuanto más compleja se vuelva esta lista, se requerirá una orquestación más compleja de los derechos de acceso para dar a todos estos diferentes grupos derechos de acceso diferentes a diferentes canastas S3 en la organización. Se requerirán herramientas adicionales, y quizás incluso un recurso dedicado (el administrador) necesitará mantener las listas de derechos de acceso y actualizarlas cada vez que se solicite un cambio (que será muy a menudo, especialmente si la organización es grande).

Entonces, ¿cómo logras lo mismo de una manera más organizada y automatizada?

Si el enfoque de «segmento por dominio» no funciona, cualquier otra solución dará como resultado el uso de segmentos comunes para más grupos de usuarios. En tales casos, debe construir una lógica completa para asignar permisos en algún área que se puedan cambiar o actualizar dinámicamente fácilmente.

Una forma de lograr esto es usar etiquetas en cestas S3. Se recomiendan las etiquetas de todos modos (aunque solo sea para simplificar la categorización de facturación). Sin embargo, la etiqueta se puede cambiar en cualquier momento en el futuro para cualquier segmento.

Si toda la lógica se basa en las etiquetas del carrito de la compra y todo lo demás depende de la configuración de los valores de la etiqueta, la propiedad dinámica está garantizada porque puede anular el propósito del carrito de la compra simplemente actualizando los valores de la etiqueta.

¿Qué etiquetas debo usar para que esto funcione?

Esto depende de su caso de uso específico. Por ejemplo:

  • Es posible que desee separar los segmentos por tipo de entorno. Entonces, en este caso, uno de los nombres de las etiquetas debería ser algo así como «ENV» con valores posibles de «DEV», «TEST», «PROD», etc.
  • Tal vez quieras separar el equipo por país. En ese caso, otra etiqueta sería «PAÍS» con el valor del nombre del país.
  • O tal vez desee dividir a los usuarios según el departamento funcional al que pertenecen, como analistas de negocios, usuarios de almacenamiento de datos, científicos de datos, etc. Entonces crea una etiqueta llamada «USER_TYPE» con el valor correspondiente.
  • Otra opción podría ser que desee definir explícitamente una estructura de carpetas fija para que la usen grupos específicos de usuarios (para que no creen su propio desorden de carpetas y se pierdan allí con el tiempo). Puede hacer esto nuevamente con etiquetas, donde puede especificar múltiples directorios de trabajo como: «datos/importación», «datos/procesados», «datos/error», etc.

Idealmente, desea definir etiquetas para que puedan combinarse lógicamente para formar una estructura de carpetas completa en el carrito.

Por ejemplo, podría combinar las siguientes etiquetas de los ejemplos anteriores para crear una estructura de carpetas personalizada para diferentes tipos de usuarios de diferentes países con carpetas de importación predefinidas que deberían usar:

Simplemente cambiando el valor de , puede anular el propósito de la etiqueta (ya sea para asignarla al ecosistema del entorno de prueba, desarrollo, producción, etc.).

Esto permitirá que muchos usuarios diferentes utilicen el mismo depósito. Los segmentos no admiten carpetas explícitamente, pero admiten «etiquetas». En última instancia, estas etiquetas funcionan como subcarpetas porque los usuarios deben pasar por una serie de etiquetas para acceder a sus datos (tal como lo harían con las subcarpetas).

Habiendo definido las etiquetas en alguna forma utilizable, el siguiente paso es crear políticas de carrito de compras de S3 que usarán las etiquetas.

Si las políticas usan los nombres de las etiquetas, crea algo llamado «Políticas dinámicas». Básicamente, esto significa que su política se comportará de manera diferente para los segmentos con diferentes valores de etiqueta que la política hace referencia en la forma o marcadores de posición.

Este paso obviamente implica una codificación personalizada de políticas dinámicas, pero puede simplificar este paso utilizando la herramienta de editor de políticas de Amazon AWS para guiarlo a través del proceso.

En la política en sí, querrá codificar los derechos de acceso específicos que se aplicarán al CART y al nivel de acceso de esos derechos (leer, escribir). La lógica leerá las etiquetas en las canastas y creará una estructura de carpetas para las canastas (creando etiquetas basadas en las etiquetas). Las subcarpetas se crearán en función de los valores de etiqueta específicos, y los derechos de acceso necesarios se asignarán en el camino.

La ventaja de esta política dinámica es que puede crear solo una política dinámica y luego asignar la misma política dinámica a muchas canastas. Esta política se comportará de manera diferente para las canastas con diferentes valores de etiqueta, pero siempre coincidirá con sus expectativas para una canasta con esos valores de etiqueta.

Esta es una forma realmente eficiente de gestionar la asignación de los derechos de acceso de una manera organizada y centralizada para una gran cantidad de segmentos, donde se espera que cada segmento siga algunas estructuras de plantillas previas a accesorios y sea utilizado por sus usuarios en toda la organización.

Automatizar el registro de nuevas entidades

Una vez que las políticas dinámicas se definen y asignan a las canastas existentes, los usuarios pueden comenzar a usar las mismas canastas sin el riesgo de que los usuarios de diferentes grupos no accedan al contenido (almacenados en la misma canasta) ubicada en una estructura de carpetas donde no tienen acceso.

Además, será fácil para algunos grupos de usuarios con un acceso más amplio para acceder a los datos porque todo se almacenará en el mismo segmento.

El último paso es hacer que sea lo más fácil posible adaptar nuevos usuarios, nuevos segmentos e incluso nuevas etiquetas. Esto llevó a otro código personalizado, que, sin embargo, no tiene que ser demasiado complejo, siempre que su proceso de adaptación tenga algunas reglas muy claras que pueden encapsularse con una lógica de algoritmo simple y directa (al menos de esta manera puede probar que suEl proceso tiene algo de lógica y no es demasiado caótico).

Podría ser tan simple como crear un script ejecutable utilizando un comando AWS CLI con los parámetros necesarios para integrar con éxito un nuevo objeto en la plataforma. Incluso podría ser una serie de scripts CLI ejecutados en un orden específico, como:

  • create_new_bucket (,,,,,, …)
  • create_new_tag (,,,)
  • update_existing_tag (, ,,)
  • create_user_group (,,,)
  • etc.

Consejo profesional 👨‍💻

Si lo desea, hay un consejo profesional que se puede aplicar fácilmente sobre lo anterior.

Las políticas dinámicas se pueden utilizar no solo para asignar permisos a las ubicaciones de la carpeta, sino también para asignar automáticamente permisos de servicio a canastas y grupos de usuarios.

Todo lo que se requerirá es expandir la lista de etiquetas en las canastas y luego agregar derechos de acceso a la política dinámica para usar servicios específicos para grupos específicos de usuarios.

Por ejemplo, puede haber un grupo de usuarios que también requieren acceso a un servidor de clúster de base de datos en particular. Esto ciertamente se puede lograr con políticas dinámicas que utilizan tareas de carritos de compras, especialmente si el acceso a los servicios está controlado por un enfoque basado en roles. Simplemente agregue una parte al código de política dinámica que manejará las etiquetas relacionadas con la especificación del clúster de la base de datos y asigne privilegios de acceso a políticas directamente a ese clúster de base de datos en particular y grupo de usuarios.

De esta manera, agregar un nuevo grupo de usuarios solo será manejado por esta política dinámica única. Además, debido a que es dinámico, la misma política puede reutilizarse para conectar muchos grupos de usuarios diferentes (se espera que sigan el mismo patrón, pero no necesariamente los mismos servicios).

También puede consultar estos comandos AWS S3 para la gestión de segmentos y datos.