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 di Identity and Access Management (IAM) in Cloud Storage o BigQuery.

Il processo di migrazione delle autorizzazioni è costituito dai seguenti passaggi:

  1. Genera un file di mappatura delle entità creando innanzitutto 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à e i file dei 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. Poi, esegui lo strumento di migrazione delle autorizzazioni con il file YAML del set di regole delle autorizzazioni, i file di configurazione della mappatura delle tabelle e i file di metadati HDFS o Ranger per generare un file di mappatura 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 in autonomia.

Prima di iniziare

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

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

Genera un file di mappatura delle entità

Un file di mappatura delle entità definisce le regole di mappatura che mappano le entità dall'origine alle entità IAM di Google Cloud .

Per generare un file di mappatura delle entità, devi prima creare manualmente un file YAML del set di regole delle entità per definire il modo in cui le entità vengono mappate dall'origine alle entità Google Cloud IAM. Nel file YAML del set di regole delle entità, definisci le regole di mappatura per ciascuna delle tue origini, ranger, HDFS o entrambe.

L'esempio seguente mostra un file YAML di un set di regole per le entità che mappa i gruppi Apache Ranger ai service account in 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.'"

    role_rules:
      - skip: true

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

L'esempio seguente mostra un file YAML di un set di regole per le entità che mappa gli utenti HDFS a utenti Google 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 saperne di più sulla sintassi per la creazione di un file YAML del set di regole per le entità, consulta File YAML del set di regole.

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

L'esempio seguente mostra come eseguire lo strumento di migrazione delle autorizzazioni per eseguire la migrazione sia da HDFS che da Apache Ranger, generando un file di mappatura delle entità 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, controlla il file principals.yaml generato per verificare che contenga le entità dell'origine mappate alle entità IAM Google Cloud. Puoi modificare il file manualmente 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 impostato nel cluster Hadoop ai ruoli IAM per le cartelle gestite di BigQuery o Cloud Storage. Per generare un file delle autorizzazioni di destinazione, devi prima creare manualmente un file YAML del set di regole delle autorizzazioni che specifica in che modo 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, ad eccezione dell'entità hadoop:

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

L'esempio seguente esegue l'override della mappatura dei ruoli predefinita 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 ulteriori informazioni sulla sintassi per la creazione di un file YAML del set di regole di autorizzazione, consulta File YAML del set di regole.

Dopo aver creato un file YAML del set di regole di autorizzazione, caricalo in un bucket Cloud Storage. Devi anche includere il file HDFS, il file Apache Ranger generato dallo strumento dwh-migration-dumper o entrambi, a seconda della sorgente da cui stai eseguendo la migrazione delle autorizzazioni. Devi anche includere i file YAML di configurazione delle tabelle e il file di mappatura delle entità.

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 sia da HDFS che da Apache Ranger, con i file di configurazione della mappatura delle tabelle e il file di mappatura delle entità denominato principals.yaml, con un file di mappatura delle entità 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.

Dopo aver eseguito lo strumento, esamina il file permissions.yaml generato per verificare che contenga le autorizzazioni dell'origine mappate alle associazioni IAM di Cloud Storage o BigQuery. Puoi modificarli manualmente prima dei passaggi successivi.

Applica autorizzazioni

Dopo aver generato un file delle 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) inGoogle Cloud.
  • Hai creato le cartelle o le tabelle gestite di Cloud Storage che ospiteranno i dati di cui è stata eseguita la migrazione.
  • L'utente che esegue lo strumento dispone delle autorizzazioni per gestire i ruoli per le cartelle o le tabelle gestite di Cloud Storage.

Puoi applicare le autorizzazioni eseguendo questo 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.

Applica le autorizzazioni come configurazione Terraform

Per applicare le autorizzazioni migrate, 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 entità e ruoli durante la migrazione delle autorizzazioni da HDFS o Apache Ranger aGoogle Cloud. I file YAML del set di regole utilizzano il Common Expression Language (CEL) per specificare i predicati (dove il risultato è booleano) e le espressioni (dove il risultato è una stringa).

I file YAML dei 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 a un altro valore come serviceAccount.
  • Deve esserci 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 mappatura nei file YAML dei set di regole

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

  • when: una clausola di predicato che limita l'applicabilità della regola
    • Una stringa che 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 segue:
    • 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 di predicato che aiuta a eseguire il debug o a sviluppare regole
    • Una stringa che 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 nell'esecuzione

Creazione di un file YAML del set di regole principale

Un file di mappatura delle entità viene utilizzato per generare identificatori delle entità fornendo un valore per email_address e type.

  • Utilizza email_address per specificare l'indirizzo email dell'entità Google Cloud .
  • Utilizza type per specificare la natura dell'entità in Google Cloud. Il valore di type può essere user, group o serviceAccount.

Qualsiasi espressione CEL utilizzata nelle regole ha accesso alle variabili che rappresentano l'oggetto elaborato. I campi delle 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 da HDFS agli utenti in Google 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'"

Esegui l'override della mappatura dei ruoli predefinita

Per utilizzare entità non predefinite, puoi saltare o modificare le mappature dei ruoli predefinite 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 di autorizzazione, utilizza le espressioni CEL nel file YAML del set di regole di autorizzazione 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 nessuno dei due 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 il set di accesso non contiene nessuna delle autorizzazioni precedenti, il ruolo è vuoto

Cloud Storage:

  • roles/storage.objectUser - Autore
  • roles/storage.objectViewer - Lettore

BigQuery:

  • roles/bigquery.dataOwner - Autore
  • roles/bigquery.dataViewer - Lettore

L'esempio seguente mostra come accettare le mappature predefinite senza apportare modifiche al file YAML del set di regole:

ranger_hdfs_rules:
  - map: {}

Esegui l'override della mappatura dei ruoli predefinita

Per utilizzare ruoli non predefiniti, puoi saltare o modificare le mappature 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 role 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 target, viene utilizzata la mappatura con l'accesso più ampio. Ad esempio, se una regola HDFS assegna un ruolo di visualizzatore all'entità pa1 in una posizione HDFS e una regola Ranger assegna un ruolo di writer alla stessa entità nella stessa posizione, viene assegnato il ruolo di writer.

Virgolette per le 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 racchiudere le stringhe. Ad esempio:

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