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 :

  1. 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.
  2. 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.
  3. 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 :

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

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.

  1. Vérifiez que vous avez Python 3.7 ou version ultérieure.
  2. Créez un environnement virtuel et activez-le.
  3. Depuis le répertoire permissions-migration/terraform, installez les dépendances à partir du fichier requirements.txt à l'aide de la commande suivante :

    python -m pip install -r requirements.txt
  4. 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 fichier permissions.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 variable group 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, comme serviceAccount, au lieu de la valeur par défaut group.
  • 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 ou false.
    • La règle ne s'applique que si la clause when est évaluée sur true.
    • La valeur par défaut est true.
  • 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îne
    • value pour une chaîne constante
  • skip : indique que l'objet d'entrée ne doit pas être mappé.
    • Peut correspondre à true ou false
  • 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 ou false.
    • 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.

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 de type peut être user, group ou serviceAccount.

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 variable user.
  • Pour group_rules, utilisez la variable group.
  • Pour other_rules, utilisez la variable other.
  • Pour role_rules, utilisez la variable role.

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 est writer.
  • Si le bit r est défini, le rôle par défaut est reader.
  • 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 est writer.
  • Si l'ensemble d'accès contient read, le rôle par défaut est reader.
  • 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 ou refresh, le rôle par défaut est writer.
  • Si l'ensemble d'accès contient select ou read, le rôle par défaut est reader.
  • Si l'ensemble d'accès ne contient aucune des autorisations précédentes, le rôle est vide.

Cloud Storage :

  • roles/storage.objectUser – Writer
  • roles/storage.objectViewer – Lecteur

BigQuery :

  • roles/bigquery.dataOwner – Writer
  • roles/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'"