Migrazione delle autorizzazioni da Hadoop

Questo documento descrive come eseguire la migrazione delle autorizzazioni da Apache Hadoop Distributed File System (HDFS), Ranger HDFS e Apache Hive ai ruoli Identity and Access Management (IAM) in Cloud Storage o BigQuery.

La procedura di migrazione delle autorizzazioni è costituita dai seguenti passaggi:

  1. Genera un file di mappatura delle entità creando prima un file di configurazione YAML del set di regole delle entità. Quindi, esegui lo strumento di migrazione delle autorizzazioni con il file YAML del set di regole delle entità con i file di metadati HDFS o Ranger per generare un file di mappatura delle entità.
  2. Genera un file di mappatura delle autorizzazioni di destinazione creando prima un file YAML del set di regole delle autorizzazioni. Quindi, esegui lo strumento di migrazione delle autorizzazioni con il file YAML del set di regole delle autorizzazioni e i file di configurazione del mapping delle tabelle, nonché i file di metadati HDFS o Ranger, per generare un file di mapping delle autorizzazioni di destinazione.
  3. Esegui lo strumento di migrazione delle autorizzazioni con il file delle autorizzazioni di destinazione per applicare le autorizzazioni a Cloud Storage o BigQuery. Puoi anche utilizzare lo script Python fornito per generare un file Terraform che puoi utilizzare per applicare le autorizzazioni autonomamente.

Prima di iniziare

Prima di eseguire la migrazione delle autorizzazioni, verifica di aver eseguito le seguenti operazioni:

Puoi trovare lo script del generatore Terraform anche nel file terraform.zip all'interno del pacchetto di rilascio.

Genera un file di mappatura delle entità

Un file di mappatura delle entità definisce le regole di mappatura che mappano le entità dalla tua origine alle entità IAM. Trusted Cloud

Per generare un file di mapping dei principal, devi prima creare manualmente un file YAML del set di regole dei principal per definire come vengono mappati i principal dalla sorgente ai principal IAM. Trusted Cloud Nel file YAML del set di regole dei principal, definisci le regole di mapping per ciascuna delle tue origini, ranger, HDFS o entrambe.

L'esempio seguente mostra un file YAML del set di regole dei principal che mappa i gruppi Apache Ranger agli account di servizio in 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'esempio seguente mostra un file YAML del set di regole dei principal che mappa gli utenti HDFS a utenti Trusted Cloud specifici:

  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

Per ulteriori informazioni sulla sintassi per la creazione di un file YAML del set di regole dei principali, consulta File YAML del set di regole.

Dopo aver creato un file YAML del set di regole dei principal, caricalo in un bucket Cloud Storage. Devi includere anche il file HDFS, il file Apache Ranger generato dallo strumento dwh-migration-dumper o entrambi, a seconda dell'origine da cui esegui la migrazione delle autorizzazioni. Puoi quindi eseguire lo strumento di migrazione delle autorizzazioni per generare il file di mapping dei principal.

L'esempio seguente mostra come eseguire lo strumento di migrazione delle autorizzazioni per eseguire la migrazione sia da HDFS che da Apache Ranger, ottenendo un file di mapping dei principal denominato 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

Sostituisci MIGRATION_BUCKET con il nome del bucket Cloud Storage che contiene i file di migrazione.

Dopo aver eseguito lo strumento, esamina il file principals.yaml generato per verificare che contenga i principal della tua origine mappati ai principal IAM. Trusted CloudPuoi modificare manualmente il file prima dei passaggi successivi.

Genera il file delle autorizzazioni di destinazione

Il file delle autorizzazioni di destinazione contiene informazioni sulla mappatura del set di autorizzazioni di origine nel cluster Hadoop ai ruoli IAM per BigQuery o alle cartelle gestite di Cloud Storage. Per generare un file di autorizzazioni di destinazione, devi prima creare manualmente un file YAML del set di regole di autorizzazione che specifica come le autorizzazioni di Ranger o HDFS vengono mappate a Cloud Storage o BigQuery.

L'esempio seguente accetta tutte le autorizzazioni Ranger per Cloud Storage:

gcs:
  ranger_hive_rules:
    - map: {}
      log: true

L'esempio seguente accetta tutte le autorizzazioni HDFS, tranne l'entità hadoop:

gcs:
  hdfs_rules:
    - when:
        source_principal.name == 'hadoop'
      skip: true
    - map: {}

L'esempio seguente esegue l'override del mapping dei ruoli predefinito per la tabella tab0 e utilizza i valori predefiniti per tutte le altre autorizzazioni

gcs:
  ranger_hive_rules:
    ranger_hive_rules:
      - when: table.name == 'tab0'
        map:
          role:
            value: "roles/customRole"
      - map: {}

Per saperne di più sulla sintassi per la creazione di un file YAML del set di regole delle autorizzazioni, consulta File YAML del set di regole.

Dopo aver creato un file YAML del set di regole delle autorizzazioni, caricalo in un bucket Cloud Storage. Devi includere anche il file HDFS, il file Apache Ranger generato dallo strumento dwh-migration-dumper o entrambi, a seconda dell'origine da cui esegui la migrazione delle autorizzazioni. Devi anche includere i file YAML di configurazione delle tabelle e il file di mappatura dei principal.

Puoi quindi eseguire lo strumento di migrazione delle autorizzazioni per generare il file delle autorizzazioni di destinazione.

L'esempio seguente mostra come eseguire lo strumento di migrazione delle autorizzazioni per eseguire la migrazione da HDFS e Apache Ranger, con i file di configurazione del mapping delle tabelle e il file di mapping dei principal denominato principals.yaml, ottenendo un file di mapping dei principal denominato 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

Sostituisci MIGRATION_BUCKET con il nome del bucket Cloud Storage che contiene i file di migrazione.

Una volta eseguito lo strumento, esamina il file permissions.yaml generato per verificare che contenga le autorizzazioni dell'origine mappate ai binding IAM di Cloud Storage o BigQuery. Puoi modificare manualmente prima dei passaggi successivi.

Applica autorizzazioni

Dopo aver generato un file di autorizzazioni di destinazione, puoi eseguire lo strumento di migrazione delle autorizzazioni per applicare le autorizzazioni IAM a Cloud Storage o BigQuery.

Prima di eseguire lo strumento di migrazione delle autorizzazioni, verifica di aver soddisfatto i seguenti prerequisiti:

  • Hai creato le entità richieste (utenti, gruppi, service account) in Trusted Cloud.
  • Hai creato le tabelle o le cartelle gestite di Cloud Storage che ospiteranno i dati migrati.
  • L'utente che esegue lo strumento dispone delle autorizzazioni per gestire i ruoli per le tabelle o le cartelle gestite di Cloud Storage.

Puoi applicare le autorizzazioni eseguendo il seguente comando:

./dwh-permissions-migration apply \
--permissions gs://MIGRATION_BUCKET/permissions.yaml

dove MIGRATION_BUCKET è il nome del bucket Cloud Storage che contiene i file di migrazione.

Applicare le autorizzazioni come configurazione Terraform

Per applicare le autorizzazioni di cui è stata eseguita la migrazione, puoi anche convertire il file delle autorizzazioni di destinazione in una configurazione Infrastructure as Code (IaC) di Terraform e applicarla a Cloud Storage.

  1. Verifica di avere Python 3.7 o versioni successive.
  2. Crea un nuovo ambiente virtuale e attivalo.
  3. Dalla directory permissions-migration/terraform, installa le dipendenze dal file requirements.txt utilizzando il seguente comando:

    python -m pip install -r requirements.txt
  4. Esegui il comando del generatore:

    python tf_generator PATH LOCATION OUTPUT

    Sostituisci quanto segue:

    • PATH: il percorso del file permissions.yaml generato.
    • LOCATION: la posizione del bucket Cloud Storage in cui lo script controlla e crea le cartelle in base alla configurazione delle autorizzazioni.
    • OUTPUT: il percorso del file di output, main.tf.

File YAML del set di regole

I file YAML del set di regole vengono utilizzati per mappare i principal e i ruoli durante la migrazione delle autorizzazioni da HDFS o Apache Ranger a Trusted Cloud. I file YAML del set di regole utilizzano Common Expression Language (CEL) per specificare i predicati (dove il risultato è booleano) e le espressioni (dove il risultato è una stringa).

I file YAML del set di regole hanno le seguenti caratteristiche:

  • Le regole di mappatura di ogni tipo vengono eseguite in sequenza dall'alto verso il basso per ogni oggetto di input.
  • Le espressioni CEL hanno accesso alle variabili di contesto, che dipendono dalla sezione del set di regole. Ad esempio, puoi utilizzare la variabile user per mappare gli oggetti utente di origine e la variabile group per mappare i gruppi.
  • Puoi utilizzare espressioni CEL o valori statici per modificare i valori predefiniti. Ad esempio, quando mappi un gruppo, puoi sostituire il valore di output type dal valore predefinito group con un altro valore, ad esempio serviceAccount.
  • Deve essere presente almeno una regola che corrisponda a ogni oggetto di input.

In una migrazione delle autorizzazioni HDFS o Apache Ranger, è possibile utilizzare un file YAML del set di regole per definire un file di mappatura delle entità o un file di mappatura dei ruoli.

Regole di mapping nei file YAML del ruleset

Il file YAML del set di regole è costituito da regole di mappatura che specificano la corrispondenza degli oggetti dall'origine alla destinazione durante una migrazione delle autorizzazioni. Una regola di mappatura può contenere le seguenti sezioni o clausole:

  • when: una clausola predicativa che limita l'applicabilità della regola
    • Una stringa rappresenta un'espressione CEL booleana. I valori possono essere true o false
    • La regola si applica solo se la clausola when restituisce true
    • Il valore predefinito è true
  • map: una clausola che specifica i contenuti di un campo dei risultati. Il valore di questa clausola dipende dal tipo di oggetto elaborato e può essere definito come:
    • expression da valutare come stringa
    • value per una stringa costante
  • skip: Specifica che l'oggetto di input non deve essere mappato
    • Può essere true o false
  • log: Una clausola predicativa che aiuta a eseguire il debug o a sviluppare regole
    • Una stringa rappresenta un'espressione CEL booleana. I valori possono essere true o false
    • Il valore predefinito è false
    • Se impostato su true, l'output contiene un log di esecuzione che può essere utilizzato per monitorare o diagnosticare i problemi durante l'esecuzione

Creazione di un file YAML del set di regole principale

Un file di mapping dei principal viene utilizzato per generare identificatori principal fornendo un valore per email_address e type.

  • Utilizza email_address per specificare l'email del Trusted Cloud principal.
  • Utilizza type per specificare la natura del principale in Trusted Cloud. Il valore di type può essere user, group o serviceAccount.

Qualsiasi espressione CEL utilizzata nelle regole ha accesso a variabili che rappresentano l'oggetto elaborato. I campi nelle variabili si basano sui contenuti dei file di metadati HDFS o Apache Ranger. Le variabili disponibili dipendono dalla sezione del set di regole:

  • Per user_rules, utilizza la variabile user
  • Per group_rules, utilizza la variabile group
  • Per other_rules, utilizza la variabile other
  • Per role_rules, utilizza la variabile role

L'esempio seguente mappa gli utenti di HDFS con gli utenti in Trusted Cloud con il loro nome utente, seguito da @google.com come indirizzo email:

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'"

Ignorare la mappatura dei ruoli predefinita

Per utilizzare principal non predefiniti, puoi ignorare o modificare i mapping dei ruoli predefiniti utilizzando i file del set di regole.

Il seguente esempio mostra come saltare una sezione di regole:

hdfs:
  user_rules:
    - skip: true
  group_rules:
    - skip: true
  other_rules:
    - skip: true

Creazione di un file YAML del set di regole delle autorizzazioni

Un file YAML del set di regole delle autorizzazioni viene utilizzato per generare un file di mappatura delle autorizzazioni di destinazione. Per creare un file YAML del set di regole delle autorizzazioni, utilizza le espressioni CEL nel file YAML del set di regole delle autorizzazioni per mappare le autorizzazioni HDFS o Apache Ranger ai ruoli Cloud Storage o BigQuery.

Mappatura dei ruoli predefinita

I ruoli dei file HDFS sono determinati dalle autorizzazioni dei file di origine:

  • Se il bit w è impostato, il ruolo predefinito è writer
  • Se il bit r è impostato, il ruolo predefinito è reader
  • Se non è impostato alcun bit, il ruolo è vuoto

Ranger HDFS:

  • Se il set di accesso contiene write, il ruolo predefinito è writer
  • Se il set di accesso contiene read, il ruolo predefinito è reader
  • Se il set di accesso non contiene nessuno dei due, il ruolo è vuoto.

Ranger:

  • Se il set di accesso contiene update, create, drop, alter, index, lock, all, write o refresh, il ruolo predefinito è writer
  • Se il set di accesso contiene select o read, il ruolo predefinito è reader
  • Se l'insieme di accesso non contiene nessuna delle autorizzazioni precedenti, il ruolo è vuoto

Cloud Storage:

  • roles/storage.objectUser - Writer
  • roles/storage.objectViewer - Reader

BigQuery:

  • roles/bigquery.dataOwner - Writer
  • roles/bigquery.dataViewer - Reader

L'esempio seguente mostra come accettare i mapping predefiniti senza apportare modifiche al file YAML del ruleset:

ranger_hdfs_rules:
  - map: {}

Ignorare la mappatura dei ruoli predefinita

Per utilizzare ruoli non predefiniti, puoi ignorare o modificare i mapping dei ruoli predefiniti utilizzando i file del set di regole.

L'esempio seguente mostra come eseguire l'override di una mappatura dei ruoli predefinita utilizzando una clausola map con il campo del ruolo utilizzando una clausola value:

ranger_hdfs_rules:
  - map:
    role:
      value: "roles/customRole"

Unione delle mappature delle autorizzazioni

Se vengono generate più mappature delle autorizzazioni per la stessa risorsa di destinazione, viene utilizzata la mappatura con l'accesso più ampio. Ad esempio, se una regola HDFS assegna un ruolo di lettore all'entità pa1 in una posizione HDFS e una regola Ranger assegna un ruolo di scrittore alla stessa entità nella stessa posizione, viene assegnato il ruolo di scrittore.

Citazione di stringhe nelle espressioni CEL

Utilizza le virgolette "" per racchiudere l'intera espressione CEL in YAML. All'interno dell'espressione CEL, utilizza le virgolette singole '' per citare le stringhe. Ad esempio:

"'permissions-migration-' + group.name + '@google.com'"