Migra permisos desde Hadoop
En este documento, se describe cómo puedes migrar permisos del sistema de archivos distribuidos de Apache Hadoop (HDFS), Ranger HDFS y Apache Hive a roles de Identity and Access Management (IAM) en Cloud Storage o BigQuery.
El proceso de migración de permisos consta de los siguientes pasos:
- Genera un archivo de asignación de principales creando primero un archivo de configuración YAML de conjunto de reglas de principales. Luego, ejecuta la herramienta de migración de permisos con el archivo YAML del conjunto de reglas de principales con los archivos de metadatos de HDFS o Ranger para generar un archivo de asignación de principales.
- Genera un archivo de asignación de permisos de destino creando primero un archivo YAML de conjunto de reglas de permisos. Luego, ejecuta la herramienta de migración de permisos con el archivo YAML del conjunto de reglas de permisos, los archivos de configuración de asignación de tablas y los archivos de metadatos de HDFS o Ranger para generar un archivo de asignación de permisos de destino.
- Ejecuta la herramienta de migración de permisos con el archivo de permisos de destino para aplicar permisos a Cloud Storage o BigQuery. También puedes usar la secuencia de comandos de Python proporcionada para generar un archivo de Terraform que puedes usar para aplicar permisos por tu cuenta.
Antes de comenzar
Antes de migrar los permisos, verifica que hayas hecho lo siguiente:
- Instala la herramienta de
dwh-migration-dumper. - Ejecuta la herramienta
dwh-migration-dumperpara generar los metadatos necesarios para tu fuente de datos.
También puedes encontrar la secuencia de comandos del generador de Terraform en el archivo terraform.zip
dentro del paquete de la versión.
Genera un archivo de asignación de principales
Un archivo de asignación de principales define reglas de asignación que asignan principales de tu origen a principales de IAM de Google Cloud .
Para generar un archivo de asignación de principales, primero debes crear de forma manual un
archivo YAML de conjunto de reglas de principales para definir cómo se asignan las principales de tu fuente
a las principales de IAM de Google Cloud . En el archivo YAML del conjunto de reglas de principales,
define reglas de asignación para cada una de tus fuentes, ya sea
ranger, HDFS o ambas.
En el siguiente ejemplo, se muestra un archivo YAML de conjunto de reglas de principales que asigna grupos de Apache Ranger a cuentas de servicio en Google Cloud:
ranger: user_rules: - skip: true group_rules: # Skip internal Ranger groups. - skip: true when: "group.groupSource == 0" # Map all roles to Google Cloud Platform service accounts. - map: type: value: serviceAccount email_address: expression: "group.name + 'my-service-account@my-project.iam.gserviceaccount.com'" role_rules: - skip: true hdfs: user_rules: - skip: true group_rules: - skip: true other_rules: - skip: true
En el siguiente ejemplo, se muestra un archivo YAML de conjunto de reglas de principales que asigna usuarios de HDFS a usuarios de Google Cloud específicos:
ranger: user_rules: - skip: true group_rules: - skip: true role_rules: - skip: true hdfs: user_rules: # Skip user named 'example' - when: "user.name == 'example'" skip: true # Map all other users to their name at google.com - when: "true" map: type: value: user email_address: expression: "user.name + '@google.com'" group_rules: - skip: true other_rules: - skip: true
Para obtener más información sobre la sintaxis para crear un archivo YAML de conjunto de reglas de principales, consulta Archivos YAML de conjunto de reglas.
Una vez que hayas creado un archivo YAML de conjunto de reglas de principales, súbelo a un
bucket de Cloud Storage. También debes incluir el archivo de HDFS, el
archivo de Apache Ranger generado por la herramienta dwh-migration-dumper o ambos,
según la fuente desde la que migres los permisos. Luego, puedes ejecutar
la herramienta de migración de permisos para generar el archivo de asignación de principales.
En el siguiente ejemplo, se muestra cómo puedes ejecutar la herramienta de migración de permisos para
migrar desde HDFS y Apache Ranger, lo que genera un
archivo de asignación de principales llamado principals.yaml.
./dwh-permissions-migration expand \ --principal-ruleset gs://MIGRATION_BUCKET/principals-ruleset.yaml \ --hdfs-dumper-output gs://MIGRATION_BUCKET/hdfs-dumper-output.zip \ --ranger-dumper-output gs://MIGRATION_BUCKET/ranger-dumper-output.zip \ --output-principals gs://MIGRATION_BUCKET/principals.yaml
Reemplaza MIGRATION_BUCKET por el nombre del bucket de Cloud Storage
que contiene tus archivos de migración.
Una vez que hayas ejecutado la herramienta, inspecciona el archivo principals.yaml generado para verificar
que contenga principales de tu fuente asignadas a las principales de IAM de
Google Cloud. Puedes editar el archivo de forma manual antes de los próximos
pasos.
Genera el archivo de permisos de destino
El archivo de permisos de destino contiene información sobre la asignación de los conjuntos de permisos de origen establecidos en el clúster de Hadoop a los roles de IAM para las carpetas administradas de BigQuery o Cloud Storage. Para generar un archivo de permisos de destino, primero debes crear de forma manual un archivo YAML de conjunto de reglas de permisos que especifique cómo se asignan los permisos de Ranger o HDFS a Cloud Storage o BigQuery.
En el siguiente ejemplo, se aceptan todos los permisos de Ranger para Cloud Storage:
gcs: ranger_hive_rules: - map: {} log: true
En el siguiente ejemplo, se aceptan todos los permisos de HDFS, excepto la principal hadoop:
gcs: hdfs_rules: - when: source_principal.name == 'hadoop' skip: true - map: {}
En el siguiente ejemplo, se anula la asignación de roles predeterminada para la tabla tab0 y se usan los valores predeterminados para todos los demás permisos
gcs: ranger_hive_rules: ranger_hive_rules: - when: table.name == 'tab0' map: role: value: "roles/customRole" - map: {}
Para obtener más información sobre la sintaxis para crear un archivo YAML de conjunto de reglas de permisos, consulta Archivos YAML de conjunto de reglas.
Una vez que hayas creado un archivo YAML de conjunto de reglas de permisos, súbelo a un
bucket de Cloud Storage. También debes incluir el archivo de HDFS, el
archivo de Apache Ranger generado por la herramienta dwh-migration-dumper o ambos,
según la fuente desde la que migres los permisos. También debes
incluir los archivos YAML de configuración de tablas y el archivo de asignación de principales.
Luego, puedes ejecutar la herramienta de migración de permisos para generar el archivo de permisos de destino.
En el siguiente ejemplo, se muestra cómo puedes ejecutar la herramienta de migración de permisos para
migrar desde HDFS y Apache Ranger, con los archivos de configuración de asignación de tablas
y el archivo de asignación de principales llamado principals.yaml,
lo que genera un archivo de asignación de principales llamado permissions.yaml.
./dwh-permissions-migration build \ --permissions-ruleset gs://MIGRATION_BUCKET/permissions-config.yaml \ --tables gs://MIGRATION_BUCKET/tables/ \ --principals gs://MIGRATION_BUCKET/principals.yaml \ --ranger-dumper-output gs://MIGRATION_BUCKET/ranger-dumper-output.zip \ --hdfs-dumper-output gs://MIGRATION_BUCKET/hdfs-dumper-output.zip \ --output-permissions gs://MIGRATION_BUCKET/permissions.yaml
Reemplaza MIGRATION_BUCKET por el nombre del
bucket de Cloud Storage que contiene tus archivos de migración.
Una vez que hayas ejecutado la herramienta, inspecciona el archivo permissions.yaml generado para verificar
que contenga permisos de tu fuente asignados a las vinculaciones de IAM de Cloud Storage o
BigQuery. Puedes editarlos manualmente antes de los siguientes pasos.
Aplica permisos
Una vez que hayas generado un archivo de permisos de destino, puedes ejecutar la herramienta de migración de permisos para aplicar los permisos de IAM a Cloud Storage o BigQuery.
Antes de ejecutar la herramienta de migración de permisos, verifica que cumplas con los siguientes requisitos previos:
- Creaste las principales requeridas (usuarios, grupos y cuentas de servicio) en Google Cloud.
- Creaste las carpetas o tablas administradas de Cloud Storage que alojarán los datos migrados.
- El usuario que ejecuta la herramienta tiene permisos para administrar roles de las carpetas o tablas administradas de Cloud Storage.
Puedes aplicar permisos ejecutando el siguiente comando:
./dwh-permissions-migration apply \ --permissions gs://MIGRATION_BUCKET/permissions.yaml
En el ejemplo anterior, MIGRATION_BUCKET es el nombre del
bucket de Cloud Storage que contiene tus archivos de migración.
Aplica permisos como una configuración de Terraform
Para aplicar los permisos migrados, también puedes convertir el archivo de permisos de destino en una configuración de infraestructura como código (IaC) de Terraform y aplicarla a Cloud Storage.
- Verifica que tengas Python 3.7 o una versión posterior.
- Crea un entorno virtual nuevo y actívalo.
Desde el directorio
permissions-migration/terraform, instala las dependencias del archivorequirements.txtcon el siguiente comando:python -m pip install -r requirements.txt
Ejecuta el comando del generador:
python tf_generator PATH LOCATION OUTPUT
Reemplaza lo siguiente:
PATH: Es la ruta de acceso al archivopermissions.yamlgenerado.LOCATION: Es la ubicación de tu bucket de Cloud Storage en la que la secuencia de comandos verifica y crea carpetas según la configuración de permisos.OUTPUT: Es la ruta de acceso al archivo de salida,main.tf.
Archivos YAML de conjuntos de reglas
Los archivos YAML de reglas se usan para asignar principales y roles cuando se migran permisos de HDFS o Apache Ranger a Google Cloud. Los archivos YAML de conjuntos de reglas usan Common Expression Language (CEL) para especificar predicados (en los que el resultado es booleano) y expresiones (en las que el resultado es una cadena).
Los archivos YAML de conjunto de reglas tienen las siguientes características:
- Las reglas de asignación de cada tipo se ejecutan de forma secuencial de arriba abajo para cada objeto de entrada.
- Las expresiones de CEL tienen acceso a las variables de contexto, y estas dependen
de la sección del conjunto de reglas. Por ejemplo, puedes usar la variable
userpara asignar objetos de usuario de origen y la variablegrouppara asignar grupos. - Puedes usar expresiones de CEL o valores estáticos para cambiar los valores predeterminados. Por
ejemplo, cuando asignas un grupo, puedes anular el valor de salida
typedel valor predeterminadogroupa otro valor, comoserviceAccount. - Debe haber al menos una regla que coincida con cada objeto de entrada.
En una migración de permisos de HDFS o Apache Ranger, se puede usar un archivo YAML de conjunto de reglas para definir un archivo de asignación de principales o un archivo de asignación de roles.
Reglas de asignación en archivos YAML de conjuntos de reglas
El archivo YAML del conjunto de reglas consta de reglas de asignación que especifican cómo coinciden los objetos de tu origen con tu destino durante una migración de permisos. Una regla de asignación puede contener las siguientes secciones o cláusulas:
when: Es una cláusula de predicado que limita la aplicabilidad de la regla.- Una cadena que representa una expresión CEL booleana. Los valores pueden ser
trueofalse. - La regla se aplica solo si la cláusula
whense evalúa comotrue - El valor predeterminado es
true.
- Una cadena que representa una expresión CEL booleana. Los valores pueden ser
map: Es una cláusula que especifica el contenido de un campo de resultado. El valor de esta cláusula depende del tipo de objeto procesado y se puede definir de la siguiente manera:expressionque se evaluará como una cadenavaluepara una cadena constante
skip: Especifica que el objeto de entrada no se debe asignar.- Puede ser
trueofalse.
- Puede ser
log: Es una cláusula de predicado que ayuda a depurar o desarrollar reglas.- Una cadena que representa una expresión CEL booleana. Los valores pueden ser
trueofalse. - El valor predeterminado es
false. - Si se establece en
true, el resultado contiene un registro de ejecución que se puede usar para supervisar o diagnosticar problemas en la ejecución.
- Una cadena que representa una expresión CEL booleana. Los valores pueden ser
Crea un archivo YAML de conjunto de reglas de principal
Se usa un archivo de asignación de principales para generar identificadores
de principales proporcionando un valor para
email_address y type.
- Usa
email_addresspara especificar el correo electrónico de la principal de Google Cloud . - Usa
typepara especificar la naturaleza de la principal en Google Cloud. El valor detypepuede seruser,grouposerviceAccount.
Cualquier expresión de CEL que se use en las reglas tiene acceso a variables que representan el objeto procesado. Los campos de las variables se basan en el contenido de los archivos de metadatos de HDFS o Apache Ranger. Las variables disponibles dependen de la sección del conjunto de reglas:
- Para
user_rules, usa la variableuser. - Para
group_rules, usa la variablegroup. - Para
other_rules, usa la variableother. - Para
role_rules, usa la variablerole.
En el siguiente ejemplo, se asignan usuarios de HDFS a usuarios en el Google Cloud
con su nombre de usuario, seguido de @google.com como su dirección de correo electrónico:
hdfs: user_rules: # Skip user named 'example' - when: "user.name == 'example'" skip: true # Map all other users to their name at google.com - when: "true" map: type: value: user email_address: expression: "user.name + '@google.com'"
Anula la asignación de roles predeterminada
Para usar principales no predeterminadas, puedes omitir o modificar las asignaciones de roles predeterminadas con los archivos de conjunto de reglas.
En el siguiente ejemplo, se muestra cómo omitir una sección de reglas:
hdfs: user_rules: - skip: true group_rules: - skip: true other_rules: - skip: true
Crea un archivo YAML de conjunto de reglas de permisos
Se usa un archivo YAML de conjunto de reglas de permisos para generar un archivo de asignación de permisos de destino. Para crear un archivo YAML de conjunto de reglas de permisos, usa expresiones de CEL en tu YAML de conjunto de reglas de permisos para asignar permisos de HDFS o Apache Ranger a roles de Cloud Storage o BigQuery.
Asignación de roles predeterminada
Los roles de archivo de HDFS se determinan según los permisos de archivo de origen:
- Si se establece el bit
w, el rol predeterminado eswriter - Si se establece el bit
r, el rol predeterminado esreader - Si no se establece ninguno de los bits, el rol está vacío.
Ranger HDFS:
- Si el conjunto de acceso contiene
write, el rol predeterminado eswriter. - Si el conjunto de acceso contiene
read, el rol predeterminado esreader - Si el conjunto de acceso no contiene ninguno de los dos, el rol está vacío.
Ranger:
- Si el conjunto de acceso contiene
update,create,drop,alter,index,lock,all,writeorefresh, el rol predeterminado eswriter. - Si el conjunto de acceso contiene
selectoread, el rol predeterminado esreader. - Si el conjunto de acceso no contiene ninguno de los permisos anteriores, el rol estará vacío.
Cloud Storage:
roles/storage.objectUser- Escritorroles/storage.objectViewer: Lector
BigQuery:
roles/bigquery.dataOwner- Escritorroles/bigquery.dataViewer: Lector
En el siguiente ejemplo, se muestra cómo puedes aceptar asignaciones predeterminadas sin ningún cambio en el archivo YAML del conjunto de reglas:
ranger_hdfs_rules: - map: {}
Anula la asignación de roles predeterminada
Para usar roles no predeterminados, puedes omitir o modificar las asignaciones de roles predeterminadas con los archivos de conjunto de reglas.
En el siguiente ejemplo, se muestra cómo puedes anular una asignación de rol predeterminada con una cláusula map con el campo role que usa una cláusula value:
ranger_hdfs_rules: - map: role: value: "roles/customRole"
Combina asignaciones de permisos
Si se generan varias asignaciones de permisos para el mismo recurso de destino,
se usa la asignación con el acceso más amplio. Por ejemplo, si una regla de HDFS otorga un rol de lector a la principal pa1 en una ubicación de HDFS y una regla de Ranger otorga un rol de escritor a la misma principal en la misma ubicación, se asigna el rol de escritor.
Uso de comillas en cadenas en expresiones de CEL
Usa comillas "" para unir toda la expresión CEL en YAML. Dentro de la
expresión de CEL, usa comillas simples '' para citar cadenas. Por ejemplo:
"'permissions-migration-' + group.name + '@google.com'"