Migrer les autorisations depuis Hadoop
Ce document explique comment migrer les autorisations depuis Apache Hadoop Distributed File System (HDFS), Ranger HDFS et Apache Hive vers des rôles Identity and Access Management (IAM) dans Cloud Storage ou BigQuery.
Le processus de migration des autorisations comprend les étapes suivantes :
- Générez un fichier de mappage des principaux en créant d'abord un fichier de configuration YAML pour l'ensemble de règles des principaux. Exécutez ensuite l'outil de migration des autorisations avec le fichier YAML du règlement principal et les fichiers de métadonnées HDFS ou Ranger pour générer un fichier de mappage des principaux.
- Générez un fichier de mappage des autorisations cibles en créant d'abord un fichier YAML de règles d'autorisation. Exécutez ensuite l'outil de migration des autorisations avec le fichier YAML de règles d'autorisation, les fichiers de configuration de mappage des tables et les fichiers de métadonnées HDFS ou Ranger pour générer un fichier de mappage des autorisations cibles.
- Exécutez l'outil de migration des autorisations avec le fichier d'autorisations cible pour appliquer les autorisations à Cloud Storage ou BigQuery. Vous pouvez également utiliser le script Python fourni pour générer un fichier Terraform que vous pourrez utiliser pour appliquer vous-même les autorisations.
Avant de commencer
Avant de migrer les autorisations, vérifiez que vous avez effectué les opérations suivantes :
- Installez l'outil
dwh-migration-dumper
. - Exécutez l'outil
dwh-migration-dumper
pour générer les métadonnées nécessaires à votre source de données.
Vous trouverez également le script du générateur Terraform dans le fichier terraform.zip
du package de version.
Générer un fichier de mappage des principaux
Un fichier de mappage des entités principales définit des règles de mappage qui associent les entités principales de votre source aux entités principales IAM de Trusted Cloud .
Pour générer un fichier de mappage des principaux, vous devez d'abord créer manuellement un fichier YAML de règles de principaux afin de définir comment les principaux sont mappés de votre source aux principaux IAM Trusted Cloud . Dans le fichier YAML du groupe de règles des principaux, définissez des règles de mappage pour chacune de vos sources, soit ranger
, HDFS
ou les deux.
L'exemple suivant montre un fichier YAML de règles de comptes principaux qui mappe les groupes Apache Ranger aux comptes de service dans Trusted Cloud by S3NS :
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.s3ns-system.iam.gserviceaccount.com'" role_rules: - skip: true hdfs: user_rules: - skip: true group_rules: - skip: true other_rules: - skip: true
L'exemple suivant montre un fichier YAML de règles de principaux qui mappe les utilisateurs HDFS à des utilisateurs Trusted Cloud spécifiques :
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
Pour en savoir plus sur la syntaxe permettant de créer un fichier YAML de règles de principaux, consultez Fichiers YAML de règles.
Une fois que vous avez créé un fichier YAML de règles pour les comptes principaux, importez-le dans un bucket Cloud Storage. Vous devez également inclure le fichier HDFS, le fichier Apache Ranger généré par l'outil dwh-migration-dumper
, ou les deux, selon la source à partir de laquelle vous migrez les autorisations. Vous pouvez ensuite exécuter l'outil de migration des autorisations pour générer le fichier de mappage des principaux.
L'exemple suivant montre comment exécuter l'outil de migration des autorisations pour migrer à la fois depuis HDFS et Apache Ranger, ce qui génère un fichier de mappage des principaux nommé 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
Remplacez MIGRATION_BUCKET
par le nom du bucket Cloud Storage contenant vos fichiers de migration.
Une fois l'outil exécuté, inspectez le fichier principals.yaml
généré pour vérifier qu'il contient les entités principales de votre source mappées aux entités principales IAM Trusted Cloud. Vous pouvez modifier le fichier manuellement avant les prochaines étapes.
Générer le fichier d'autorisations cibles
Le fichier d'autorisations cible contient des informations sur le mappage des autorisations sources définies dans le cluster Hadoop aux rôles IAM pour les dossiers gérés BigQuery ou Cloud Storage. Pour générer un fichier d'autorisations cible, vous devez d'abord créer manuellement un fichier YAML de règles d'autorisation qui spécifie comment les autorisations de Ranger ou HDFS sont mappées à Cloud Storage ou BigQuery.
L'exemple suivant accepte toutes les autorisations Ranger pour Cloud Storage :
gcs: ranger_hive_rules: - map: {} log: true
L'exemple suivant accepte toutes les autorisations HDFS, à l'exception du compte principal hadoop
:
gcs: hdfs_rules: - when: source_principal.name == 'hadoop' skip: true - map: {}
L'exemple suivant remplace le mappage de rôle par défaut pour la table tab0
et utilise les valeurs par défaut pour toutes les autres autorisations.
gcs: ranger_hive_rules: ranger_hive_rules: - when: table.name == 'tab0' map: role: value: "roles/customRole" - map: {}
Pour en savoir plus sur la syntaxe permettant de créer un fichier YAML de règles d'autorisation, consultez Fichiers YAML de règles.
Une fois que vous avez créé un fichier YAML de règles d'autorisation, importez-le dans un bucket Cloud Storage. Vous devez également inclure le fichier HDFS, le fichier Apache Ranger généré par l'outil dwh-migration-dumper
, ou les deux, selon la source à partir de laquelle vous migrez les autorisations. Vous devez également inclure les fichiers YAML de configuration des tables et le fichier de mappage des principaux.
Vous pouvez ensuite exécuter l'outil de migration des autorisations pour générer le fichier d'autorisations cible.
L'exemple suivant montre comment exécuter l'outil de migration des autorisations pour migrer à la fois depuis HDFS et Apache Ranger, avec les fichiers de configuration de mappage des tables et le fichier de mappage des principaux nommé principals.yaml
, ce qui génère un fichier de mappage des principaux nommé 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
Remplacez MIGRATION_BUCKET
par le nom du bucket Cloud Storage contenant vos fichiers de migration.
Une fois l'outil exécuté, inspectez le fichier permissions.yaml
généré pour vérifier qu'il contient les autorisations de votre source mappées sur les liaisons IAM Cloud Storage ou BigQuery. Vous pouvez modifier manuellement les valeurs avant de passer aux étapes suivantes.
Appliquer des autorisations
Une fois que vous avez généré un fichier d'autorisations cibles, vous pouvez exécuter l'outil de migration des autorisations pour appliquer les autorisations IAM à Cloud Storage ou BigQuery.
Avant d'exécuter l'outil de migration des autorisations, vérifiez que vous remplissez les conditions préalables suivantes :
- Vous avez créé les comptes principaux (utilisateurs, groupes, comptes de service) requis dansTrusted Cloud.
- Vous avez créé les tables ou les dossiers gérés Cloud Storage qui hébergeront les données migrées.
- L'utilisateur qui exécute l'outil est autorisé à gérer les rôles pour les tables ou les dossiers gérés Cloud Storage.
Vous pouvez appliquer des autorisations en exécutant la commande suivante :
./dwh-permissions-migration apply \ --permissions gs://MIGRATION_BUCKET/permissions.yaml
Où MIGRATION_BUCKET
est le nom du bucket Cloud Storage contenant vos fichiers de migration.
Appliquer des autorisations en tant que configuration Terraform
Pour appliquer les autorisations migrées, vous pouvez également convertir le fichier d'autorisations cible en configuration Terraform Infrastructure-as-Code (IaC), puis l'appliquer à Cloud Storage.
- Vérifiez que vous avez Python 3.7 ou version ultérieure.
- Créez un environnement virtuel et activez-le.
Depuis le répertoire
permissions-migration/terraform
, installez les dépendances à partir du fichierrequirements.txt
à l'aide de la commande suivante :python -m pip install -r requirements.txt
Exécutez la commande du générateur :
python tf_generator PATH LOCATION OUTPUT
Remplacez les éléments suivants :
PATH
: chemin d'accès au fichierpermissions.yaml
généré.LOCATION
: emplacement de votre bucket Cloud Storage où le script vérifie et crée des dossiers en fonction de la configuration des autorisations.OUTPUT
: chemin d'accès au fichier de sortie,main.tf
.
Fichiers YAML de l'ensemble de règles
Les fichiers YAML de règles sont utilisés pour mapper les comptes principaux et les rôles lors de la migration des autorisations de HDFS ou Apache Ranger versTrusted Cloud. Les fichiers YAML de règles utilisent le langage CEL (Common Expression Language) pour spécifier les prédicats (où le résultat est booléen) et les expressions (où le résultat est une chaîne).
Les fichiers YAML de règles présentent les caractéristiques suivantes :
- Les règles de mappage de chaque type sont exécutées de manière séquentielle de haut en bas pour chaque objet d'entrée.
- Les expressions CEL ont accès aux variables de contexte, qui dépendent de la section de l'ensemble de règles. Par exemple, vous pouvez utiliser la variable
user
pour mapper les objets utilisateur sources et la variablegroup
pour mapper les groupes. - Vous pouvez utiliser des expressions CEL ou des valeurs statiques pour modifier les valeurs par défaut. Par exemple, lorsque vous mappez un groupe, vous pouvez remplacer la valeur de sortie
type
par une autre valeur, commeserviceAccount
, au lieu de la valeur par défautgroup
. - Il doit y avoir au moins une règle qui correspond à chaque objet d'entrée.
Lors d'une migration des autorisations HDFS ou Apache Ranger, un fichier YAML de règles peut être utilisé pour définir un fichier de mappage des principaux ou un fichier de mappage des rôles.
Règles de mappage dans les fichiers YAML de règles
Le fichier YAML du règlement se compose de règles de mappage qui spécifient comment les objets correspondent de votre source à votre cible lors d'une migration des autorisations. Une règle de mappage peut contenir les sections ou clauses suivantes :
when
: clause de prédicat qui limite l'applicabilité de la règle.- Une chaîne représente une expression CEL booléenne. Les valeurs peuvent être
true
oufalse
. - La règle ne s'applique que si la clause
when
est évaluée surtrue
. - La valeur par défaut est
true
.
- Une chaîne représente une expression CEL booléenne. Les valeurs peuvent être
map
: clause qui spécifie le contenu d'un champ de résultat. La valeur de cette clause dépend du type d'objet traité et peut être définie comme suit :expression
à évaluer en tant que chaînevalue
pour une chaîne constante
skip
: indique que l'objet d'entrée ne doit pas être mappé.- Peut correspondre à
true
oufalse
- Peut correspondre à
log
: clause de prédicat qui permet de déboguer ou de développer des règles- Une chaîne représente une expression CEL booléenne. Les valeurs peuvent être
true
oufalse
. - La valeur par défaut est
false
. - Si la valeur est définie sur
true
, la sortie contient un journal d'exécution qui peut être utilisé pour surveiller ou diagnostiquer les problèmes d'exécution.
- Une chaîne représente une expression CEL booléenne. Les valeurs peuvent être
Créer un fichier YAML de règles de principal
Un fichier de mappage des principaux permet de générer des identifiants principaux en fournissant une valeur pour email_address
et type
.
- Utilisez
email_address
pour spécifier l'adresse e-mail du principal Trusted Cloud . - Utilisez
type
pour spécifier la nature du compte principal dans Trusted Cloud. La valeur detype
peut êtreuser
,group
ouserviceAccount
.
Toute expression CEL utilisée dans les règles a accès à des variables qui représentent l'objet traité. Les champs des variables sont basés sur le contenu des fichiers de métadonnées HDFS ou Apache Ranger. Les variables disponibles dépendent de la section de l'ensemble de règles :
- Pour
user_rules
, utilisez la variableuser
. - Pour
group_rules
, utilisez la variablegroup
. - Pour
other_rules
, utilisez la variableother
. - Pour
role_rules
, utilisez la variablerole
.
L'exemple suivant mappe les utilisateurs de HDFS aux utilisateurs dans Trusted Cloudavec leur nom d'utilisateur, suivi de @google.com
comme adresse e-mail :
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'"
Ignorer le mappage de rôle par défaut
Pour utiliser des principaux non définis par défaut, vous pouvez ignorer ou modifier les mappages de rôles par défaut à l'aide des fichiers de règles.
L'exemple suivant montre comment ignorer une section de règles :
hdfs: user_rules: - skip: true group_rules: - skip: true other_rules: - skip: true
Créer un fichier YAML de règles d'autorisation
Un fichier YAML de règles d'autorisation est utilisé pour générer un fichier de mappage des autorisations cibles. Pour créer un fichier YAML de règles d'autorisation, utilisez des expressions CEL dans votre fichier YAML de règles d'autorisation afin de mapper les autorisations HDFS ou Apache Ranger sur les rôles Cloud Storage ou BigQuery.
Mappage des rôles par défaut
Les rôles des fichiers HDFS sont déterminés par les autorisations des fichiers sources :
- Si le bit
w
est défini, le rôle par défaut estwriter
. - Si le bit
r
est défini, le rôle par défaut estreader
. - Si aucun bit n'est défini, le rôle est vide.
Ranger HDFS :
- Si l'ensemble d'accès contient
write
, le rôle par défaut estwriter
. - Si l'ensemble d'accès contient
read
, le rôle par défaut estreader
. - Si l'ensemble d'accès ne contient aucun des deux, le rôle est vide.
Ranger :
- Si l'ensemble d'accès contient
update
,create
,drop
,alter
,index
,lock
,all
,write
ourefresh
, le rôle par défaut estwriter
. - Si l'ensemble d'accès contient
select
ouread
, le rôle par défaut estreader
. - Si l'ensemble d'accès ne contient aucune des autorisations précédentes, le rôle est vide.
Cloud Storage :
roles/storage.objectUser
– Writerroles/storage.objectViewer
– Lecteur
BigQuery :
roles/bigquery.dataOwner
– Writerroles/bigquery.dataViewer
– Lecteur
L'exemple suivant montre comment accepter les mappages par défaut sans apporter de modifications au fichier YAML du règlement :
ranger_hdfs_rules: - map: {}
Ignorer le mappage de rôle par défaut
Pour utiliser des rôles autres que ceux par défaut, vous pouvez ignorer ou modifier les mappages de rôles par défaut à l'aide des fichiers de règles.
L'exemple suivant montre comment remplacer un mappage de rôle par défaut à l'aide d'une clause de mappage avec le champ de rôle à l'aide d'une clause de valeur :
ranger_hdfs_rules: - map: role: value: "roles/customRole"
Fusionner les mappages d'autorisations
Si plusieurs mappages d'autorisations sont générés pour la même ressource cible, celui qui offre l'accès le plus large est utilisé. Par exemple, si une règle HDFS attribue un rôle de lecteur au compte principal pa1
sur un emplacement HDFS, et qu'une règle Ranger attribue un rôle de rédacteur au même compte principal sur le même emplacement, le rôle de rédacteur est attribué.
Guillemets dans les expressions CEL
Utilisez des guillemets ""
pour encadrer l'intégralité de l'expression CEL dans YAML. Dans l'expression CEL, utilisez des guillemets simples ''
pour délimiter les chaînes. Exemple :
"'permissions-migration-' + group.name + '@google.com'"