Berechtigungen aus Hadoop migrieren
In diesem Dokument wird beschrieben, wie Sie Berechtigungen aus dem Apache Hadoop Distributed File System (HDFS), Ranger HDFS und Apache Hive in IAM-Rollen (Identity and Access Management) in Cloud Storage oder BigQuery migrieren können.
Der Prozess zur Migration von Berechtigungen besteht aus den folgenden Schritten:
- Erstellen Sie eine Datei mit der Zuordnung von Identitäten, indem Sie zuerst eine YAML-Konfigurationsdatei für die Identitätsregeln erstellen. Führen Sie dann das Tool zur Berechtigungsübertragung mit der YAML-Datei des Prinzipalregelsatzes und den HDFS- oder Ranger-Metadatendateien aus, um eine Prinzipalzuordnungsdatei zu generieren.
- Generieren Sie eine Datei mit der Zuordnung der Zielberechtigungen, indem Sie zuerst eine YAML-Datei mit Berechtigungsregeln erstellen. Führen Sie dann das Tool zur Berechtigungsübertragung mit der YAML-Datei des Berechtigungsregelsatzes, 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 Berechtigungsübertragung mit der Zieldatei für Berechtigungen 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.
Hinweise
Bevor Sie Berechtigungen migrieren, sollten Sie Folgendes prüfen:
- 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.
Das Terraform-Generator-Skript finden Sie auch in der Datei terraform.zip
im Release-Paket.
Datei zur Zuordnung von Identitäten generieren
In einer Datei zur Zuordnung von Hauptkonten werden Zuordnungsregeln definiert, mit denen Hauptkonten aus Ihrer Quelle Trusted Cloud IAM-Hauptkonten zugeordnet werden.
Wenn Sie eine Datei mit der Zuordnung von Hauptkonten generieren möchten, müssen Sie zuerst manuell eine YAML-Datei mit Hauptkontoregeln erstellen, um zu definieren, wie Hauptkonten aus Ihrer Quelle Trusted Cloud IAM-Hauptkonten zugeordnet werden. Definieren Sie in der YAML-Datei für den Regelsatz für Identitäten Zuordnungsregeln für jede Ihrer Quellen, entweder ranger
, HDFS
oder beides.
Das folgende Beispiel zeigt eine YAML-Datei für ein Hauptkonto-Regelsatz, in der Apache Ranger-Gruppen Dienstkonten in Trusted Cloud by S3NSzugeordnet 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.s3ns-system.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 Regelsatz für Principals, in der HDFS-Nutzer bestimmten Trusted 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 Prinzipal-Regelsatz finden Sie unter YAML-Dateien für Regelsätze.
Nachdem Sie eine YAML-Datei mit dem Regelsatz für Hauptkonten erstellt haben, laden Sie sie in einen Cloud Storage-Bucket hoch. Sie müssen auch die HDFS-Datei, die vom dwh-migration-dumper
-Tool generierte Apache Ranger-Datei oder beide Dateien einfügen, je nachdem, aus welcher Quelle Sie Berechtigungen migrieren. Anschließend können Sie das Tool zur Berechtigungsübertragung ausführen, um die Datei mit der Hauptkontozuordnung zu generieren.
Im folgenden Beispiel sehen Sie, wie Sie das Tool zur Berechtigungsmigration ausführen, um sowohl von HDFS als auch von Apache Ranger zu migrieren. Das Ergebnis ist eine Datei mit der Zuordnung von Identitäten 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 zu bestätigen, dass sie Hauptkonten aus Ihrer Quelle enthält, die Trusted Cloud-IAM-Hauptkonten zugeordnet sind. Sie können die Datei vor den nächsten Schritten manuell bearbeiten.
Zieldatei für Berechtigungen generieren
Die Zielberechtigungsdatei enthält Informationen zur Zuordnung von Quellberechtigungen, die im Hadoop-Cluster festgelegt sind, zu IAM-Rollen für BigQuery oder verwaltete Cloud Storage-Ordner. Um eine Zielberechtigungsdatei zu generieren, müssen Sie zuerst manuell eine YAML-Datei mit Berechtigungsregeln erstellen, in der angegeben wird, 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 Prinzipal 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 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 für Berechtigungsregelsätze 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. Sie müssen auch die HDFS-Datei, die vom dwh-migration-dumper
-Tool generierte Apache Ranger-Datei oder beide Dateien einfügen, je nachdem, aus welcher Quelle Sie Berechtigungen migrieren. Sie müssen auch die YAML-Konfigurationsdateien für Tabellen und die Datei für die Zuordnung von Identitäten einfügen.
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 Berechtigungsübertragung ausführen, um sowohl von HDFS als auch von Apache Ranger zu migrieren. Die Konfigurationsdateien für die Tabellenzuordnung und die Datei für die Prinzipalzuordnung haben den Namen principals.yaml
. Die resultierende Datei für die Prinzipalzuordnung hat den Namen 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
Ersetzen Sie MIGRATION_BUCKET
durch den Namen des Cloud Storage-Bucket, der Ihre Migrationsdateien enthält.
Sehen Sie sich nach dem Ausführen des Tools die generierte permissions.yaml
-Datei an, um zu prüfen, ob sie Berechtigungen aus Ihrer Quelle enthält, die Cloud Storage- oder BigQuery-IAM-Bindungen zugeordnet sind. Sie können die manuell bearbeiten, bevor Sie mit den nächsten Schritten fortfahren.
Berechtigungen anwenden
Nachdem Sie eine Datei mit Zielberechtigungen 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 Berechtigungsübertragung ausführen, müssen Sie die folgenden Voraussetzungen erfüllen:
- Sie haben die erforderlichen Hauptkonten (Nutzer, Gruppen, Dienstkonten) inTrusted Clouderstellt.
- Sie haben die verwalteten Cloud Storage-Ordner oder -Tabellen erstellt, in denen die migrierten Daten gespeichert werden.
- Der Nutzer, der das Tool ausführt, hat Berechtigungen zum Verwalten von Rollen für die verwalteten Cloud Storage-Ordner oder -Tabellen.
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
Um die migrierten Berechtigungen anzuwenden, können Sie die Zieldatei mit 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/terraform
die Abhängigkeiten aus der Dateirequirements.txt
mit 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 Skript 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 Prinzipale und Rollen zuzuordnen, wenn Berechtigungen von HDFS oder Apache Ranger zuTrusted 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 der einzelnen Typen werden für jedes Eingabeobjekt sequenziell von oben nach unten ausgeführt.
- CEL-Ausdrücke haben Zugriff auf Kontextvariablen. Diese hängen vom Abschnitt des Regelsatzes ab. Mit der Variablen
user
können Sie beispielsweise Quellnutzerobjekte zuordnen und mit der Variablengroup
Gruppen zuordnen. - 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
type
vom Standardwertgroup
in einen anderen Wert wieserviceAccount
ändern. - Für jedes Eingabeobjekt muss mindestens eine Regel vorhanden sein, die darauf zutrifft.
Bei der Migration von HDFS- oder Apache Ranger-Berechtigungen kann eine YAML-Datei für Regelsätze verwendet werden, um entweder eine Datei für die Prinzipalzuordnung oder eine Datei für die Rollenzuordnung zu definieren.
Zuordnungsregeln in YAML-Dateien für Regelsätze
Die YAML-Datei für den Regelsatz besteht aus Zuordnungsregeln, die angeben, wie Objekte bei der Berechtigungsübertragung von der Quelle zum Ziel zugeordnet werden. Eine Zuordnungsregel kann die folgenden Abschnitte oder Klauseln enthalten:
when
: Eine Prädikatklausel, die die Anwendbarkeit der Regel einschränkt.- Ein String stellt einen booleschen CEL-Ausdruck dar. Mögliche Werte sind
true
undfalse
. - Die Regel gilt nur, wenn die
when
-Klausel alstrue
ausgewertet wird. - Der Standardwert ist
true
.
- Ein String stellt einen booleschen CEL-Ausdruck dar. Mögliche Werte sind
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
als String auswertenvalue
für einen konstanten String
skip
: Gibt an, dass das Eingabeobjekt nicht zugeordnet werden soll.- Kann entweder
true
oderfalse
sein.
- Kann entweder
log
: Eine Bedingungsklausel, die beim Debuggen oder Entwickeln von Regeln hilft- Ein String stellt einen booleschen CEL-Ausdruck dar. Mögliche Werte sind
true
undfalse
. - Der Standardwert ist
false
. - Wenn der Wert auf
true
gesetzt ist, enthält die Ausgabe ein Ausführungsprotokoll, mit dem Probleme bei der Ausführung überwacht oder diagnostiziert werden können.
- Ein String stellt einen booleschen CEL-Ausdruck dar. Mögliche Werte sind
YAML-Datei für Haupt-Regelsatz erstellen
Mit einer Datei für die Zuordnung von Identitäten werden Identitäten generiert, indem ein Wert für email_address
und type
angegeben wird.
- Verwenden Sie
email_address
, um die E-Mail-Adresse für das Trusted Cloud -Hauptkonto anzugeben. - Verwenden Sie
type
, um die Art des Hauptkontos in Trusted Cloudanzugeben. Der Wert fürtype
kann entwederuser
,group
oderserviceAccount
sein.
Jeder CEL-Ausdruck, der in den Regeln verwendet wird, 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_rules
die Variableuser
. - Verwenden Sie für
group_rules
die Variablegroup
. - Verwenden Sie für
other_rules
die Variableother
. - Verwenden Sie für
role_rules
die Variablerole
.
Im folgenden Beispiel werden Nutzer aus HDFS mit ihrem Nutzernamen und @google.com
als E-Mail-Adresse den Nutzern in Trusted Cloudzugeordnet:
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 Identitäten verwenden möchten, können Sie die Standardrollenzuweisungen mit den Regelsatzdateien überspringen oder ändern.
Das folgende Beispiel zeigt, 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 Datei mit Zielberechtigungszuordnungen zu generieren. Um eine YAML-Datei für Berechtigungsregeln zu erstellen, verwenden Sie CEL-Ausdrücke in der YAML-Datei für Berechtigungsregeln, um HDFS- oder Apache Ranger-Berechtigungen Cloud Storage- oder BigQuery-Rollen zuzuordnen.
Standardmäßige Rollenzuordnung
HDFS-Dateirollen werden durch die Berechtigungen der Quelldatei bestimmt:
- Wenn das
w
-Bit gesetzt ist, ist die Standardrollewriter
. - Wenn das
r
-Bit gesetzt ist, ist die Standardrollereader
. - Wenn keines der beiden Bits festgelegt ist, ist die Rolle leer.
Ranger HDFS:
- Wenn die Zugriffsgruppe
write
enthält, ist die Standardrollewriter
. - Wenn die Zugriffsgruppe
read
enthält, ist die Standardrollereader
. - Wenn das nicht der Fall ist, ist die Rolle leer.
Ranger:
- Wenn die Zugriffsgruppe
update
,create
,drop
,alter
,index
,lock
,all
,write
oderrefresh
enthält, ist die Standardrollewriter
. - Wenn die Zugriffsgruppe
select
oderread
enthält, ist die Standardrollereader
. - Wenn die Zugriffsmenge keine der oben genannten Berechtigungen enthält, ist die Rolle leer.
Cloud Storage:
roles/storage.objectUser
– Writerroles/storage.objectViewer
– Reader
BigQuery:
roles/bigquery.dataOwner
– Writerroles/bigquery.dataViewer
– Reader
Im folgenden Beispiel sehen Sie, 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 mithilfe der Regelsatzdateien überspringen oder ändern.
Das folgende Beispiel zeigt, wie Sie eine Standardrollenzuordnung mit einer map-Klausel mit dem Rollenfeld 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
die Rolle „Leser“ für einen HDFS-Speicherort zuweist und eine Ranger-Regel demselben Hauptkonto die Rolle „Autor“ für denselben Speicherort zuweist, wird die Rolle „Autor“ zugewiesen.
String-Anführungszeichen in CEL-Ausdrücken
Setzen Sie den gesamten CEL-Ausdruck in YAML in Anführungszeichen ""
. Verwenden Sie im CEL-Ausdruck einfache Anführungszeichen ''
, um Strings in Anführungszeichen zu setzen. Beispiel:
"'permissions-migration-' + group.name + '@google.com'"