Berechtigungen von Hadoop migrieren
In diesem Dokument wird beschrieben, wie Sie Berechtigungen aus Apache Hadoop Distributed File System (HDFS), Ranger HDFS und Apache Hive zu IAM-Rollen (Identity and Access Management) in Cloud Storage oder BigQuery migrieren können.
Die Berechtigungsmigration umfasst die folgenden Schritte:
- Generieren Sie eine Zuordnungsdatei für Hauptkonten, indem Sie zuerst eine YAML-Konfigurationsdatei für Hauptkonto-Regelsätze erstellen. Führen Sie dann das Tool zur Berechtigungsmigration mit der YAML-Datei für das Hauptkonto-Regelset und den HDFS- oder Ranger-Metadatendateien aus, um eine Zuordnungsdatei für Hauptkonten zu generieren.
- Generieren Sie eine Zuordnungsdatei für Zielberechtigungen, indem Sie zuerst eine YAML-Datei mit Berechtigungsregeln erstellen. Führen Sie dann das Tool zur Berechtigungsmigration mit der YAML-Datei für den Berechtigungsregelsatz, den Konfigurationsdateien für die Tabellenzuordnung und den HDFS- oder Ranger-Metadatendateien aus, um eine Zieldatei für die Berechtigungszuordnung zu generieren.
- Führen Sie das Tool zur Berechtigungsmigration mit der Datei mit den Zielberechtigungen aus, um Berechtigungen auf Cloud Storage oder BigQuery anzuwenden. Sie können auch das bereitgestellte Python-Skript verwenden, um eine Terraform-Datei zu generieren, mit der Sie Berechtigungen selbst anwenden können.
Hinweis
Prüfen Sie vor der Migration von Berechtigungen, ob Sie Folgendes getan haben:
- Installieren Sie das
dwh-migration-dumper-Tool. - Führen Sie das
dwh-migration-dumper-Tool aus, um die erforderlichen Metadaten für Ihre Datenquelle zu generieren.
Sie finden das Terraform-Generatorskript auch in der Datei terraform.zip im Release-Paket.
Datei für die Zuordnung von Hauptkonten generieren
In einer Zuordnungsdatei für Hauptkonten werden Zuordnungsregeln definiert, mit denen Hauptkonten aus Ihrer Quelle Google Cloud IAM-Hauptkonten zugeordnet werden.
Wenn Sie eine Datei für die Zuordnung von Hauptkonten generieren möchten, müssen Sie zuerst manuell eine YAML-Datei mit einem Regelsatz für Hauptkonten erstellen. Darin wird definiert, wie Hauptkonten von Ihrer Quelle zu Google Cloud IAM-Hauptkonten zugeordnet werden. Definieren Sie in der YAML-Datei des Regelsets für Hauptkonten Zuordnungsregeln für jede Ihrer Quellen, entweder ranger, HDFS oder beide.
Das folgende Beispiel zeigt eine YAML-Datei mit einem Regelset für Hauptkonten, in der Apache Ranger-Gruppen Dienstkonten in Google Cloudzugeordnet werden:
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.iam.gserviceaccount.com'" role_rules: - skip: true hdfs: user_rules: - skip: true group_rules: - skip: true other_rules: - skip: true
Das folgende Beispiel zeigt eine YAML-Datei mit einem Regelset für Hauptkonten, in der HDFS-Nutzer bestimmten Google Cloud -Nutzern zugeordnet werden:
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
Weitere Informationen zur Syntax zum Erstellen einer YAML-Datei für ein Regelset für Hauptkonten finden Sie unter YAML-Dateien für Regelsets.
Nachdem Sie eine YAML-Datei mit einem Regelset für Hauptkonten erstellt haben, laden Sie sie in einen Cloud Storage-Bucket hoch. Außerdem müssen Sie entweder die HDFS-Datei, die vom dwh-migration-dumper-Tool generierte Apache Ranger-Datei oder beide Dateien angeben, je nachdem, von welcher Quelle Sie Berechtigungen migrieren. Anschließend können Sie das Tool zur Berechtigungsmigration ausführen, um die Zuordnungsdatei für Hauptkonten zu generieren.
Im folgenden Beispiel wird gezeigt, wie Sie das Tool zur Berechtigungsmigration ausführen, um sowohl von HDFS als auch von Apache Ranger zu migrieren. Das Ergebnis ist eine Datei zur Zuordnung von Hauptkonten mit dem Namen 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
Ersetzen Sie MIGRATION_BUCKET durch den Namen des Cloud Storage-Buckets, der Ihre Migrationsdateien enthält.
Nachdem Sie das Tool ausgeführt haben, prüfen Sie die generierte principals.yaml-Datei, um sicherzustellen, dass sie Hauptkonten aus Ihrer Quelle enthält, die Google Cloud-IAM-Hauptkonten zugeordnet sind. Sie können die Datei vor den nächsten Schritten manuell bearbeiten.
Zieldatei für Berechtigungen generieren
Die Zieldatei für Berechtigungen enthält Informationen zur Zuordnung von Quellberechtigungen, die im Hadoop-Cluster festgelegt sind, zu IAM-Rollen für verwaltete BigQuery- oder Cloud Storage-Ordner. Wenn Sie eine Datei mit Zielberechtigungen generieren möchten, müssen Sie zuerst manuell eine YAML-Datei mit Berechtigungsregeln erstellen, in der angegeben ist, wie Berechtigungen von Ranger oder HDFS Cloud Storage oder BigQuery zugeordnet werden.
Im folgenden Beispiel werden alle Ranger-Berechtigungen für Cloud Storage akzeptiert:
gcs: ranger_hive_rules: - map: {} log: true
Im folgenden Beispiel werden alle HDFS-Berechtigungen mit Ausnahme des Hauptkontos hadoop akzeptiert:
gcs: hdfs_rules: - when: source_principal.name == 'hadoop' skip: true - map: {}
Im folgenden Beispiel wird die Standardrollenzuordnung für die Tabelle tab0 überschrieben und für alle anderen Berechtigungen werden die Standardwerte verwendet.
gcs: ranger_hive_rules: ranger_hive_rules: - when: table.name == 'tab0' map: role: value: "roles/customRole" - map: {}
Weitere Informationen zur Syntax zum Erstellen einer YAML-Datei mit Berechtigungsregeln finden Sie unter YAML-Dateien für Regelsätze.
Nachdem Sie eine YAML-Datei mit Berechtigungsregeln erstellt haben, laden Sie sie in einen Cloud Storage-Bucket hoch. Außerdem müssen Sie entweder die HDFS-Datei, die vom dwh-migration-dumper-Tool generierte Apache Ranger-Datei oder beide Dateien angeben, je nachdem, von welcher Quelle Sie Berechtigungen migrieren. Sie müssen auch die YAML-Dateien für die Tabellenkonfiguration und die Datei für die Zuordnung von Hauptkonten angeben.
Anschließend können Sie das Tool zur Berechtigungsmigration ausführen, um die Zieldatei mit den Berechtigungen zu generieren.
Im folgenden Beispiel wird gezeigt, wie Sie das Tool zur Berechtigungsmigration ausführen, um sowohl von HDFS als auch von Apache Ranger zu migrieren. Dabei werden die Konfigurationsdateien für die Tabellenzuordnung und die Datei für die Hauptkontenzuordnung mit dem Namen principals.yaml verwendet, was zu einer Datei für die Hauptkontenzuordnung mit dem Namen permissions.yaml führt.
./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
Ersetzen Sie MIGRATION_BUCKET durch den Namen des Cloud Storage-Bucket, der Ihre Migrationsdateien enthält.
Prüfen Sie nach dem Ausführen des Tools die generierte permissions.yaml-Datei, um festzustellen, ob sie Berechtigungen aus Ihrer Quelle enthält, die Cloud Storage- oder BigQuery-IAM-Bindungen zugeordnet sind. Sie können sie vor den nächsten Schritten manuell bearbeiten.
Berechtigungen anwenden
Nachdem Sie eine Zieldatei für Berechtigungen generiert haben, können Sie das Tool zur Berechtigungsmigration ausführen, um die IAM-Berechtigungen auf Cloud Storage oder BigQuery anzuwenden.
Bevor Sie das Tool zur Berechtigungsmigration ausführen, müssen die folgenden Voraussetzungen erfüllt sein:
- Sie haben die erforderlichen Hauptkonten (Nutzer, Gruppen, Dienstkonten) inGoogle Clouderstellt.
- Sie haben die verwalteten Cloud Storage-Ordner oder -Tabellen erstellt, in denen die migrierten Daten gehostet werden.
- Der Nutzer, der das Tool ausführt, hat die Berechtigung, Rollen für die verwalteten Cloud Storage-Ordner oder -Tabellen zu verwalten.
Sie können Berechtigungen mit dem folgenden Befehl anwenden:
./dwh-permissions-migration apply \ --permissions gs://MIGRATION_BUCKET/permissions.yaml
Dabei ist MIGRATION_BUCKET der Name des Cloud Storage-Bucket, der Ihre Migrationsdateien enthält.
Berechtigungen als Terraform-Konfiguration anwenden
Wenn Sie die migrierten Berechtigungen anwenden möchten, können Sie die Zieldatei mit den Berechtigungen auch in eine Terraform-IaC-Konfiguration (Infrastructure as Code) konvertieren und auf Cloud Storage anwenden.
- Prüfen Sie, ob Sie Python 3.7 oder höher haben.
- Erstellen Sie eine neue virtuelle Umgebung und aktivieren Sie sie.
Installieren Sie im Verzeichnis
permissions-migration/terraformdie Abhängigkeiten aus der Dateirequirements.txtmit dem folgenden Befehl:python -m pip install -r requirements.txt
Führen Sie den Generatorbefehl aus:
python tf_generator PATH LOCATION OUTPUT
Ersetzen Sie Folgendes:
PATH: der Pfad zur generierten Dateipermissions.yaml.LOCATION: der Speicherort Ihres Cloud Storage-Buckets, in dem das Script Ordner basierend auf der Berechtigungskonfiguration prüft und erstellt.OUTPUT: der Pfad zur Ausgabedateimain.tf.
YAML-Dateien für Regelsätze
Regelsatz-YAML-Dateien werden verwendet, um Hauptkonten und Rollen zuzuordnen, wenn Berechtigungen von HDFS oder Apache Ranger zuGoogle Cloudmigriert werden. In YAML-Dateien für Regelsätze wird die Common Expression Language (CEL) verwendet, um Prädikate (mit booleschem Ergebnis) und Ausdrücke (mit String-Ergebnis) anzugeben.
YAML-Dateien für Regelsätze haben die folgenden Merkmale:
- Zuordnungsregeln jedes Typs werden für jedes Eingabeobjekt nacheinander von oben nach unten ausgeführt.
- CEL-Ausdrücke haben Zugriff auf Kontextvariablen, die vom Abschnitt des Regelsatzes abhängen. Sie können beispielsweise die Variable
userverwenden, um Quellnutzerobjekte zuzuordnen, und die Variablegroup, um Gruppen zuzuordnen. - Sie können CEL-Ausdrücke oder statische Werte verwenden, um Standardwerte zu ändern. Wenn Sie beispielsweise eine Gruppe zuordnen, können Sie den Ausgabewert
typevom Standardwertgroupin einen anderen Wert wieserviceAccountändern. - Es muss mindestens eine Regel vorhanden sein, die mit jedem Eingabeobjekt übereinstimmt.
Bei einer Migration von HDFS- oder Apache Ranger-Berechtigungen kann eine YAML-Datei mit einem Regelsatz verwendet werden, um entweder eine Datei für die Hauptkontenzuordnung oder eine Datei für die Rollenzuordnung zu definieren.
Zuordnungsregeln in YAML-Dateien für Regelsätze
Die YAML-Datei mit dem Regelsatz enthält Zuordnungsregeln, die festlegen, wie Objekte während einer Berechtigungsmigration von der Quelle zum Ziel abgeglichen werden. Eine Zuordnungsregel kann die folgenden Abschnitte oder Klauseln enthalten:
when: Eine Prädikatsklausel, die die Anwendbarkeit der Regel einschränkt- Ein String, der einen booleschen CEL-Ausdruck darstellt. Werte können
trueoderfalsesein. - Die Regel gilt nur, wenn die
when-Klausel alstrueausgewertet wird. - Der Standardwert ist
true.
- Ein String, der einen booleschen CEL-Ausdruck darstellt. Werte können
map: Eine Klausel, die den Inhalt eines Ergebnisfelds angibt. Der Wert für diese Klausel hängt vom Typ des verarbeiteten Objekts ab und kann so definiert werden:expression, der als String ausgewertet werden sollvaluefür einen konstanten String
skip: Gibt an, dass das Eingabeobjekt nicht zugeordnet werden soll.- Kann entweder
trueoderfalsesein.
- Kann entweder
log: Eine Prädikatklausel, die beim Debuggen oder Entwickeln von Regeln hilft.- Ein String, der einen booleschen CEL-Ausdruck darstellt. Werte können
trueoderfalsesein. - Der Standardwert ist
false. - Wenn der Wert auf
truegesetzt ist, enthält die Ausgabe ein Ausführungsprotokoll, mit dem Probleme bei der Ausführung überwacht oder diagnostiziert werden können.
- Ein String, der einen booleschen CEL-Ausdruck darstellt. Werte können
YAML-Datei für Hauptkonten-Regelsatz erstellen
Eine Datei für die Hauptkontenzuordnung wird verwendet, um Hauptkonto-IDs zu generieren. Dazu wird ein Wert für email_address und type angegeben.
- Verwenden Sie
email_address, um die E-Mail-Adresse für das Hauptkonto Google Cloud anzugeben. - Verwenden Sie
type, um die Art des Hauptkontos in Google Cloudanzugeben. Der Wert fürtypekann entwederuser,groupoderserviceAccountsein.
Jeder in den Regeln verwendete CEL-Ausdruck hat Zugriff auf Variablen, die das verarbeitete Objekt darstellen. Die Felder in den Variablen basieren auf dem Inhalt der HDFS- oder Apache Ranger-Metadatendateien. Die verfügbaren Variablen hängen vom Abschnitt des Regelsatzes ab:
- Verwenden Sie für
user_rulesdie Variableuser. - Verwenden Sie für
group_rulesdie Variablegroup. - Verwenden Sie für
other_rulesdie Variableother. - Verwenden Sie für
role_rulesdie Variablerole.
Im folgenden Beispiel werden Nutzer aus HDFS Nutzern in der Google Cloudmit ihrem Nutzernamen zugeordnet, gefolgt von @google.com als E-Mail-Adresse:
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'"
Standardrollenzuordnung überschreiben
Wenn Sie nicht standardmäßige Hauptkonten verwenden möchten, können Sie die Standardrollenzuweisungen entweder überspringen oder mithilfe der Regelsatzdateien ändern.
Im folgenden Beispiel wird gezeigt, wie Sie einen Abschnitt mit Regeln überspringen können:
hdfs: user_rules: - skip: true group_rules: - skip: true other_rules: - skip: true
YAML-Datei für Berechtigungsregelsatz erstellen
Eine YAML-Datei mit Berechtigungsregeln wird verwendet, um eine Zieldatei für die Berechtigungszuordnung zu generieren. Wenn Sie eine YAML-Datei für ein Berechtigungsregelset erstellen möchten, verwenden Sie CEL-Ausdrücke in der YAML-Datei für das Berechtigungsregelset, um HDFS- oder Apache Ranger-Berechtigungen Cloud Storage- oder BigQuery-Rollen zuzuordnen.
Standardrollenzuordnung
HDFS-Dateiberechtigungen werden durch die Berechtigungen der Quelldatei bestimmt:
- Wenn das
w-Bit festgelegt ist, ist die Standardrollewriter. - Wenn das
r-Bit festgelegt ist, ist die Standardrollereader. - Wenn keines der Bits festgelegt ist, ist die Rolle leer.
Ranger HDFS:
- Wenn die Zugriffsgruppe
writeenthält, ist die Standardrollewriter. - Wenn die Zugriffsgruppe
readenthält, ist die Standardrollereader. - Wenn die Zugriffsgruppe weder das eine noch das andere enthält, ist die Rolle leer.
Ranger:
- Wenn der Zugriffssatz
update,create,drop,alter,index,lock,all,writeoderrefreshenthält, ist die Standardrollewriter. - Wenn die Zugriffsgruppe
selectoderreadenthält, ist die Standardrollereader. - Wenn die Zugriffsgruppe keine der vorherigen Berechtigungen enthält, ist die Rolle leer.
Cloud Storage:
roles/storage.objectUser– Writerroles/storage.objectViewer– Leser
BigQuery:
roles/bigquery.dataOwner– Writerroles/bigquery.dataViewer– Leser
Im folgenden Beispiel wird gezeigt, wie Sie Standardzuordnungen ohne Änderungen in der YAML-Datei des Regelsatzes akzeptieren können:
ranger_hdfs_rules: - map: {}
Standardrollenzuordnung überschreiben
Wenn Sie nicht standardmäßige Rollen verwenden möchten, können Sie die Standardrollenzuordnungen entweder überspringen oder mithilfe der Regelsatzdateien ändern.
Im folgenden Beispiel wird gezeigt, wie Sie eine Standardrollenzuordnung mit einer map-Klausel mit dem role-Feld und einer value-Klausel überschreiben können:
ranger_hdfs_rules: - map: role: value: "roles/customRole"
Berechtigungszuordnungen zusammenführen
Wenn für dieselbe Zielressource mehrere Berechtigungszuordnungen generiert werden, wird die Zuordnung mit dem umfassendsten Zugriff verwendet. Wenn beispielsweise eine HDFS-Regel dem Hauptkonto pa1 eine Leserrolle für einen HDFS-Speicherort zuweist und eine Ranger-Regel demselben Hauptkonto am selben Speicherort eine Schreibrolle zuweist, wird die Schreibrolle zugewiesen.
String-Anführungszeichen in CEL-Ausdrücken
Verwenden Sie Anführungszeichen "", um den gesamten CEL-Ausdruck in YAML einzuschließen. Verwenden Sie im CEL-Ausdruck einfache Anführungszeichen '', um Strings in Anführungszeichen zu setzen. Beispiel:
"'permissions-migration-' + group.name + '@google.com'"