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:
- 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à.
- 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.
- 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:
- Installa lo strumento
dwh-migration-dumper. - Esegui lo strumento
dwh-migration-dumperper generare i metadati necessari per l'origine dati.
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.
- Verifica di avere Python 3.7 o versioni successive.
- Crea un nuovo ambiente virtuale e attivalo.
Dalla directory
permissions-migration/terraform, installa le dipendenze dal filerequirements.txtutilizzando il seguente comando:python -m pip install -r requirements.txt
Esegui il comando del generatore:
python tf_generator PATH LOCATION OUTPUT
Sostituisci quanto segue:
PATH: il percorso del filepermissions.yamlgenerato.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
userper mappare gli oggetti utente di origine e la variabilegroupper 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
typedal valore predefinitogroupa un altro valore comeserviceAccount. - 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
trueofalse - La regola si applica solo se la clausola
whenrestituiscetrue - Il valore predefinito è
true
- Una stringa che rappresenta un'espressione CEL booleana. I valori possono essere
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:expressionda valutare come stringavalueper una stringa costante
skip: specifica che l'oggetto di input non deve essere mappato- Può essere
trueofalse
- Può essere
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
trueofalse - 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
- Una stringa che rappresenta un'espressione CEL booleana. I valori possono essere
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_addressper specificare l'indirizzo email dell'entità Google Cloud . - Utilizza
typeper specificare la natura dell'entità in Google Cloud. Il valore ditypepuò essereuser,grouposerviceAccount.
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 variabileuser - Per
group_rules, utilizza la variabilegroup - Per
other_rules, utilizza la variabileother - Per
role_rules, utilizza la variabilerole
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,writeorefresh, il ruolo predefinito èwriter - Se il set di accesso contiene
selectoread, il ruolo predefinito èreader - Se il set di accesso non contiene nessuna delle autorizzazioni precedenti, il ruolo è vuoto
Cloud Storage:
roles/storage.objectUser- Autoreroles/storage.objectViewer- Lettore
BigQuery:
roles/bigquery.dataOwner- Autoreroles/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'"