Berechtigungen aus Hadoop migrieren

In diesem Dokument wird beschrieben, wie Sie Berechtigungen aus 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 umfasst die folgenden Schritte:

  1. Erstellen Sie eine YAML-Konfigurationsdatei für das Hauptkonto-Regelsatz um eine Zuordnungsdatei für Hauptkonten zu generieren. Führen Sie dann das Tool zur Migration von Berechtigungen mit der YAML-Datei für das Hauptkonto-Regelsatz mit den HDFS- oder Ranger-Metadatendateien aus, um eine Zuordnungsdatei für Hauptkonten zu generieren.
  2. Erstellen Sie zuerst eine YAML-Datei für den Berechtigungsregelsatz um eine Zuordnungsdatei für Zielberechtigungen zu generieren. Führen Sie dann das Tool zur Migration von Berechtigungen mit der YAML-Datei für den Berechtigungsregelsatz, den Konfigurationsdateien für die Tabellenzuordnung und den HDFS- oder Ranger-Metadatendateien aus, um eine Zuordnungsdatei für Zielberechtigungen zu generieren.
  3. Führen Sie das Tool zur Migration von Berechtigungen mit der Datei für 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

Bevor Sie Berechtigungen migrieren, prüfen Sie, ob Sie Folgendes getan haben:

Das Terraform-Generatorskript finden Sie auch in der Datei terraform.zip im Release-Paket.

Zuordnungsdatei für Hauptkonten generieren

In einer Zuordnungsdatei für Hauptkonten werden Zuordnungsregeln definiert, mit denen Hauptkonten aus Ihrer QuelleIAM-Hauptkonten zugeordnet werden. Google Cloud

Um eine Zuordnungsdatei für Hauptkonten zu generieren, müssen Sie zuerst manuell eine YAML-Datei für das Hauptkonto-Regelsatz erstellen, um zu definieren, wie Hauptkonten aus Ihrer Quelle IAM-Hauptkonten zugeordnet werden. Google Cloud Definieren Sie in der YAML-Datei für das Hauptkonto-Regelsatz Zuordnungsregeln für jede Ihrer Quellen, entweder ranger, HDFS oder beide.

Das folgende Beispiel zeigt eine YAML-Datei für das Hauptkonto-Regelsatz, in der Apache Ranger-Gruppen Dienstkonten in zugeordnet werden 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.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 für das Hauptkonto-Regelsatz, 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 das Hauptkonto-Regelsatz finden Sie unter YAML-Dateien für Regelsätze.

Nachdem Sie eine YAML-Datei für das Hauptkonto-Regelsatz erstellt haben, laden Sie sie in einen Cloud Storage-Bucket hoch. Je nachdem, aus welcher Quelle Sie Berechtigungen migrieren, müssen Sie auch die HDFS-Datei, die Apache Ranger-Datei, die mit dem Tool dwh-migration-dumper generiert wurde, oder beide einfügen. Anschließend können Sie das Tool zur Migration von Berechtigungen ausführen, um die Zuordnungsdatei für Hauptkonten zu generieren.

Das folgende Beispiel zeigt, wie Sie das Tool zur Migration von Berechtigungen ausführen können, um sowohl aus HDFS als auch aus Apache Ranger zu migrieren. Das Ergebnis ist eine Zuordnungsdatei für 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.

Datei für Zielberechtigungen generieren

Die Datei für Zielberechtigungen enthält Informationen zur Zuordnung von Quellberechtigungen, die im Hadoop-Cluster festgelegt sind, zuIAM-Rollen für verwaltete Ordner in BigQuery oder Cloud Storage. Um eine Datei für Zielberechtigungen zu generieren, müssen Sie zuerst manuell eine YAML-Datei für den Berechtigungsregelsatz erstellen, in der angegeben wird, wie Berechtigungen aus 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 außer dem Hauptkonto 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 Standardeinstellungen 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 den Berechtigungsregelsatz finden Sie unter YAML-Dateien für Regelsätze.

Nachdem Sie eine YAML-Datei für den Berechtigungsregelsatz erstellt haben, laden Sie sie in einen Cloud Storage-Bucket hoch. Je nachdem, aus welcher Quelle Sie Berechtigungen migrieren, müssen Sie auch die HDFS-Datei, die Apache Ranger-Datei, die mit dem Tool dwh-migration-dumper generiert wurde, oder beide einfügen. Sie müssen auch die YAML-Konfigurationsdateien für die Tabellen und die Zuordnungsdatei für Hauptkonten einfügen.

Anschließend können Sie das Tool zur Migration von Berechtigungen ausführen, um die Datei für Zielberechtigungen zu generieren.

Das folgende Beispiel zeigt, wie Sie das Tool zur Migration von Berechtigungen ausführen können, um sowohl aus HDFS als auch aus Apache Ranger zu migrieren. Dabei werden die Konfigurationsdateien für die Tabellenzuordnung und die Zuordnungsdatei für Hauptkonten mit dem Namen principals.yaml verwendet. Das Ergebnis ist eine Zuordnungsdatei für Hauptkonten mit dem 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.

Nachdem Sie das Tool ausgeführt haben, prüfen Sie die generierte Datei permissions.yaml, um sicherzustellen, dass sie Berechtigungen aus Ihrer Quelle enthält, dieIAM-Bindungen für Cloud Storage oder BigQuery zugeordnet sind. Sie können die Datei vor den nächsten Schritten manuell bearbeiten.

Berechtigungen anwenden

Nachdem Sie eine Datei für Zielberechtigungen generiert haben, können Sie das Tool zur Migration von Berechtigungen ausführen, um dieIAM-Berechtigungen auf Cloud Storage oder BigQuery anzuwenden.

Bevor Sie das Tool zur Migration von Berechtigungen ausführen, prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  • Sie haben die erforderlichen Hauptkonten (Nutzer, Gruppen, Dienstkonten) in Google Clouderstellt.
  • Sie haben die verwalteten Ordner oder Tabellen in Cloud Storage erstellt, in denen die migrierten Daten gehostet werden.
  • Der Nutzer, der das Tool ausführt, hat Berechtigungen zum Verwalten von Rollen für die verwalteten Ordner oder Tabellen in Cloud Storage.

Sie können Berechtigungen anwenden, indem Sie den folgenden Befehl ausführen:

./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 Datei für Zielberechtigungen auch in eine Terraform-Konfiguration für Infrastruktur als Code (Infrastructure as Code, IaC) konvertieren und auf Cloud Storage anwenden.

  1. Prüfen Sie, ob Sie Python 3.7 oder höher haben.
  2. Erstellen Sie eine neue virtuelle Umgebung und aktivieren Sie sie.
  3. Installieren Sie im Verzeichnis permissions-migration/terraform die Abhängigkeiten aus der Datei requirements.txt mit dem folgenden Befehl:

    python -m pip install -r requirements.txt
  4. Führen Sie den Generatorbefehl aus:

    python tf_generator PATH LOCATION OUTPUT

    Ersetzen Sie Folgendes:

    • PATH: der Pfad zur generierten Datei permissions.yaml.
    • LOCATION: der Speicherort Ihres Cloud Storage-Buckets in dem das Skript Ordner anhand der Berechtigungskonfiguration prüft und erstellt.
    • OUTPUT: der Pfad zur Ausgabedatei main.tf.

YAML-Dateien für Regelsätze

YAML-Dateien für Regelsätze werden verwendet, um Hauptkonten und Rollen zuzuordnen, wenn Berechtigungen aus HDFS oder Apache Ranger zu Google Cloudmigriert werden. In YAML-Dateien für Regelsätze wird die Common Expression Language (CEL) verwendet, um Prädikate (bei denen das Ergebnis boolesch ist) und Ausdrücke (bei denen das Ergebnis ein String ist) anzugeben.

YAML-Dateien für Regelsätze haben die folgenden Merkmale:

  • Zuordnungsregeln jedes Typs werden für jedes Eingabeobjekt sequenziell von oben nach unten ausgeführt.
  • CEL-Ausdrücke haben Zugriff auf Kontextvariablen. Kontextvariablen hängen vom Abschnitt des Regelsatzes ab. Sie können beispielsweise die Variable user verwenden, um Quellnutzerobjekte zuzuordnen, und die Variable group, 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 type vom Standardwert group in einen anderen Wert wie serviceAccount ändern.
  • Es muss mindestens eine Regel vorhanden sein, die mit jedem Eingabeobjekt übereinstimmt.

Bei der Migration von Berechtigungen aus HDFS oder Apache Ranger kann eine YAML-Datei für Regelsätze verwendet werden, um entweder eine Zuordnungsdatei für Hauptkonten oder eine Zuordnungsdatei für Rollen zu definieren.

Zuordnungsregeln in YAML-Dateien für Regelsätze

Die YAML-Datei für Regelsätze besteht aus Zuordnungsregeln, die angeben, wie Objekte bei der Migration von Berechtigungen von Ihrer Quelle zu Ihrem Ziel passen. 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. Die Werte können true oder false sein.
    • Die Regel wird nur angewendet, wenn die Klausel when zu true ausgewertet wird.
    • Der Standardwert ist true.
  • 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 zur Auswertung als String
    • value für einen konstanten String
  • skip: Gibt an, dass das Eingabeobjekt nicht zugeordnet werden soll.
    • Kann entweder true oder false sein.
  • log: Eine Prädikatklausel, die beim Debuggen oder Entwickeln von Regeln hilft.
    • Ein String stellt einen booleschen CEL-Ausdruck dar. Die Werte können true oder false sein.
    • Der Standardwert ist false.
    • Wenn diese Option auf true gesetzt ist, enthält die Ausgabe ein Ausführungsprotokoll, mit dem Probleme bei der Ausführung überwacht oder diagnostiziert werden können.

YAML-Datei für das Hauptkonto-Regelsatz erstellen

Eine Zuordnungsdatei für Hauptkonten wird verwendet, um Hauptkonto IDs zu generieren, indem ein Wert für email_address und type angegeben wird.

  • Verwenden Sie email_address, um die E‑Mail-Adresse für das Google Cloud Hauptkonto anzugeben.
  • Verwenden Sie type, um die Art des Hauptkontos in Google Cloudanzugeben. Der Wert für type kann entweder user, group oder serviceAccount sein.

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_rules die Variable user.
  • Verwenden Sie für group_rules die Variable group.
  • Verwenden Sie für other_rules die Variable other.
  • Verwenden Sie für role_rules die Variable role.

Im folgenden Beispiel werden Nutzer aus HDFS Nutzern in der Google Cloud zugeordnet. Dabei wird der Nutzername gefolgt von @google.com als E‑Mail-Adresse verwendet:

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 andere Hauptkonten als die Standardeinstellungen verwenden möchten, können Sie die Standardrollenzuordnungen mit den Regelsatzdateien überspringen oder ändern.

Das folgende Beispiel zeigt, wie Sie einen Abschnitt von Regeln überspringen können:

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

YAML-Datei für den Berechtigungsregelsatz erstellen

Eine YAML-Datei für den Berechtigungsregelsatz wird verwendet, um eine Zuordnungsdatei für Zielberechtigungen zu generieren. Verwenden Sie CEL-Ausdrücke in der YAML-Datei für den Berechtigungsregelsatz, um HDFS- oder Apache Ranger-Berechtigungen Cloud Storage- oder BigQuery-Rollen zuzuordnen.

Standardrollenzuordnung

Die Rollen für HDFS-Dateien werden durch die Berechtigungen der Quelldatei bestimmt:

  • Wenn das Bit w gesetzt ist, ist die Standardrolle writer.
  • Wenn das r Bit gesetzt ist, ist die Standardrolle reader.
  • Wenn keines der Bits gesetzt ist, ist die Rolle leer.

Ranger HDFS:

  • Wenn die Zugriffsgruppe write enthält, ist die Standardrolle writer.
  • Wenn die Zugriffsgruppe read enthält, ist die Standardrolle reader.
  • Wenn die Zugriffsgruppe keines von beiden enthält, ist die Rolle leer.

Ranger:

  • Wenn die Zugriffsgruppe update, create, drop, alter, index, lock, all, write oder refresh enthält, ist die Standardrolle writer.
  • Wenn die Zugriffsgruppe select oder read enthält, ist die Standardrolle reader
  • Wenn die Zugriffsgruppe keine der oben genannten Berechtigungen enthält, ist die Rolle leer.

Cloud Storage:

  • roles/storage.objectUser – Writer
  • roles/storage.objectViewer – Leser

BigQuery:

  • roles/bigquery.dataOwner – Writer
  • roles/bigquery.dataViewer – Leser

Das folgende Beispiel zeigt, wie Sie Standardzuordnungen ohne Änderungen in der YAML-Datei für den Regelsatz akzeptieren können:

ranger_hdfs_rules:
  - map: {}

Standardrollenzuordnung überschreiben

Wenn Sie andere Rollen als die Standardeinstellungen verwenden möchten, können Sie die Standardrollenzuordnungen mit den Regelsatzdateien überspringen oder ändern.

Das folgende Beispiel zeigt, wie Sie eine Standardrollenzuordnung mit einer Zuordnungsklausel mit dem Feld „Rolle“ und einer Wertklausel überschreiben können:

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

Berechtigungszuordnungen zusammenführen

Wenn mehrere Berechtigungszuordnungen für dieselbe Zielressource generiert werden, wird die Zuordnung mit dem weitesten Zugriff verwendet. Wenn beispielsweise eine HDFS-Regel dem Hauptkonto pa1 eine Leserrolle für einen HDFS-Speicherort zuweist und eine Ranger-Regel demselben Hauptkonto eine Writerrolle für denselben Speicherort zuweist, wird die Writerrolle zugewiesen.

Strings in CEL-Ausdrücken in Anführungszeichen setzen

Setzen Sie den gesamten CEL-Ausdruck in YAML in Anführungszeichen "". Setzen Sie Strings im CEL-Ausdruck in einfache Anführungszeichen '' Beispiel:

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