Zephyrnet-Logo

Interagieren Sie mit Apache Iceberg-Tabellen mithilfe von Amazon Athena und kontoübergreifenden fein abgestuften Berechtigungen mithilfe von AWS Lake Formation

Datum:

Wir haben vor kurzem angekündigt Unterstützung für AWS Lake-Formation fein abgestufte Zugriffskontrollrichtlinien in Amazonas Athena Abfragen von Daten, die in einem beliebigen unterstützten Dateiformat gespeichert sind, unter Verwendung von Tabellenformaten wie Apache Iceberg, Apache Hudi und Apache Hive. Mit AWS Lake Formation können Sie Zugriffsrichtlinien auf Datenbank-, Tabellen- und Spaltenebene definieren und durchsetzen, um in Amazon S3 gespeicherte Iceberg-Tabellen abzufragen. Lake Formation bietet eine Autorisierungs- und Governance-Ebene für in Amazon S3 gespeicherte Daten. Diese Funktion erfordert ein Upgrade auf Athena-Engine-Version 3.

Große Organisationen haben oft Geschäftsbereiche (LoBs), die bei der Verwaltung ihrer Geschäftsdaten autonom agieren. Es macht das Teilen von Daten über LoBs hinweg nicht trivial. Diese Organisationen haben ein föderiertes Modell eingeführt, bei dem jede LoB die Autonomie hat, Entscheidungen über ihre Daten zu treffen. Sie verwenden das Publisher/Consumer-Modell mit einer zentralisierten Governance-Schicht, die zur Durchsetzung von Zugriffskontrollen verwendet wird. Wenn Sie mehr über die Data-Mesh-Architektur erfahren möchten, besuchen Sie Entwerfen Sie eine Data-Mesh-Architektur mit AWS Lake Formation und AWS Glue. Mit der Version 3 der Athena-Engine können Kunden die gleichen feinkörnigen Steuerelemente für Open-Data-Frameworks wie Apache Iceberg, Apache Hudi und Apache Hive verwenden.

In diesem Beitrag tauchen wir tief in einen Anwendungsfall ein, in dem Sie ein Producer/Consumer-Modell mit aktivierter Datenfreigabe haben, um eingeschränkten Zugriff auf eine Apache Iceberg-Tabelle zu gewähren, die der Consumer abfragen kann. Wir besprechen die Spaltenfilterung zum Einschränken bestimmter Zeilen, die Filterung zum Einschränken des Zugriffs auf Spaltenebene, Schemaentwicklung und Zeitreisen.

Lösungsüberblick

Um die Funktionalität feingranularer Berechtigungen für Apache Iceberg-Tabellen mit Athena und Lake Formation zu veranschaulichen, richten wir die folgenden Komponenten ein:

  • Im Produzentenkonto:
    • An AWS-Kleber Data Catalog zum Registrieren des Schemas einer Tabelle im Apache Iceberg-Format
    • Lake Formation, um einen differenzierten Zugriff auf das Verbraucherkonto bereitzustellen
    • Athena, um Daten aus dem Produzentenkonto zu überprüfen
  • Im Verbraucherkonto:
    • AWS-Ressourcenzugriffsmanager (AWS RAM), um einen Handshake zwischen dem Producer Data Catalog und dem Consumer zu erstellen
    • Lake Formation, um einen differenzierten Zugriff auf das Verbraucherkonto bereitzustellen
    • Athena, um Daten vom Produzentenkonto zu überprüfen

Das folgende Diagramm zeigt die Architektur.

Kontoübergreifende feinkörnige Berechtigungsarchitektur

Voraussetzungen:

Bevor Sie beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:

Einrichtung des Datenproduzenten

In diesem Abschnitt stellen wir die Schritte zum Einrichten des Datenproduzenten vor.

Erstellen Sie einen S3-Bucket zum Speichern der Tabellendaten

Wir erstellen einen neuen S3-Bucket, um die Daten für die Tabelle zu speichern:

  1. Auf der Amazon S3-Konsole, Erstellen Sie einen S3-Bucket mit eindeutigem Namen (für diesen Beitrag verwenden wir iceberg-athena-lakeformation-blog).
  2. Erstellen Sie den Producer-Ordner innerhalb des Buckets, der für die Tabelle verwendet werden soll.

Erstellung von Amazon S3-Buckets und -Ordnern

Registrieren Sie den S3-Pfad, in dem die Tabelle gespeichert ist, mit Lake Formation

Wir registrieren den vollständigen S3-Pfad in Lake Formation:

  1. Navigieren Sie zur Lake Formation-Konsole.
  2. Wenn Sie sich zum ersten Mal anmelden, werden Sie aufgefordert, einen Admin-Benutzer zu erstellen.
  3. Im Navigationsbereich unter Registrieren und einnehmen, wählen Datenseestandorte.
  4. Auswählen Ort registrieren, und geben Sie den zuvor erstellten S3-Bucket-Pfad an.
  5. Auswählen AWSServiceRoleForLakeFormationDataAccess für IAM-Rolle.

Weitere Informationen zu Rollen finden Sie unter Anforderungen für Rollen, die zum Registrieren von Standorten verwendet werden.

Wenn Sie die Verschlüsselung Ihres S3-Buckets aktiviert haben, müssen Sie Lake Formation Berechtigungen erteilen, um Verschlüsselungs- und Entschlüsselungsvorgänge durchzuführen. Beziehen auf Registrieren eines verschlüsselten Amazon S3-Standorts zur Führung.

  1. Auswählen Ort registrieren.

Registrieren Sie den Standort der Seeformation

Erstellen Sie mit Athena eine Iceberg-Tabelle

Lassen Sie uns nun die Tabelle mit Athena erstellen, das vom Apache Iceberg-Format unterstützt wird:

  1. Wählen Sie auf der Athena-Konsole Abfrage-Editor im Navigationsbereich.
  2. Wenn Sie Athena zum ersten Mal verwenden, unter Einstellungen , wählen Verwalten und geben Sie den S3-Bucket-Standort ein, den Sie zuvor erstellt haben (iceberg-athena-lakeformation-blog/producer).
  3. Auswählen Speichern.
  4. Geben Sie im Abfrageeditor die folgende Abfrage ein (ersetzen Sie den Standort durch den S3-Bucket, den Sie bei Lake Formation registriert haben). Beachten Sie, dass wir die Standarddatenbank verwenden, aber Sie können jede andere Datenbank verwenden.
CREATE TABLE consumer_iceberg (
customerid bigint,
customername string,
email string,
city string,
country string,
territory string,
contactfirstname string,
contactlastname string)
LOCATION 's3://YOUR-BUCKET/producer/' -- *** Change bucket name to your bucket***
TBLPROPERTIES ('table_type'='ICEBERG')

  1. Auswählen Führen Sie.

Athena-Abfrageeditor zum Erstellen einer Iceberg-Tabelle

Teilen Sie die Tabelle mit dem Verbraucherkonto

Um die Funktionalität zu veranschaulichen, implementieren wir die folgenden Szenarien:

  • Gewähren Sie Zugriff auf ausgewählte Spalten
  • Gewähren Sie basierend auf einem Filter Zugriff auf ausgewählte Zeilen

Führen Sie die folgenden Schritte aus:

  1. Auf der Lake Formation-Konsole im Navigationsbereich unter Datenkatalog, wählen Datenfilter.
  2. Auswählen Neuen Filter erstellen.
  3. Aussichten für Name des Datenfilters, eingeben blog_data_filter.
  4. Aussichten für Zieldatenbank, eingeben lf-demo-db.
  5. Aussichten für Zieltabelle, eingeben consumer_iceberg.
  6. Aussichten für Zugriff auf SpaltenebeneWählen Spalten einschließen.
  7. Wählen Sie die Spalten aus, die Sie mit dem Verbraucher teilen möchten: country, address, contactfirstname, city, customerid, und customername.
  8. Aussichten für Zeilenfilterausdruck, geben Sie den Filter ein country='France'.
  9. Auswählen Filter erstellen.

Datenfilter erstellen

Lassen Sie uns nun Zugriff auf das Verbraucherkonto auf der gewähren consumer_iceberg Tabelle.

  1. Wählen Sie im Navigationsbereich Tische.
  2. Wählen Sie die Tabelle „consumer_iceberg“ aus und wählen Sie Gewähren auf die Aktionen Menü.
    Gewähren Sie Zugriff auf das Verbraucherkonto in der Tabelle „consumer_iceberg“.
  3. Auswählen Externe Konten.
  4. Geben Sie die externe Konto-ID ein.
    Datenberechtigungen erteilen
  5. Auswählen Benannte Datenkatalogressourcen.
  6. Wählen Sie Ihre Datenbank und Tabelle.
  7. Aussichten für Datenfilter, wählen Sie den von Ihnen erstellten Datenfilter aus.
    Datenfilter hinzufügen
  8. Aussichten für Berechtigungen für Datenfilter und Erteilbare BerechtigungenWählen Auswählen.
  9. Auswählen Gewähren.

Berechtigungen zum Erstellen von Grants

Einrichtung des Datenkonsumenten

Um den Datenkonsumenten einzurichten, akzeptieren wir die Ressourcenfreigabe und erstellen eine Tabelle mit AWS RAM und Lake Formation. Führen Sie die folgenden Schritte aus:

  1. Melden Sie sich beim Verbraucherkonto an und navigieren Sie zur AWS RAM-Konsole.
  2. Der Mit mir geteilt Wählen Sie im Navigationsbereich Ressourcenfreigaben.
  3. Wählen Sie Ihren Ressourcenanteil.
    Ressourcenanteil im Verbraucherkonto
  4. Auswählen Ressourcenfreigabe akzeptieren.
  5. Notieren Sie sich den Namen der Ressourcenfreigabe, der in den nächsten Schritten verwendet werden soll.
    Ressourcenfreigabe akzeptieren
  6. Navigieren Sie zur Lake Formation-Konsole.
  7. Wenn Sie sich zum ersten Mal anmelden, werden Sie aufgefordert, einen Admin-Benutzer zu erstellen.
  8. Auswählen Datenbanken im Navigationsbereich und wählen Sie dann Ihre Datenbank aus.
  9. Auf dem Aktionen Menü, wählen Sie Ressourcenlink erstellen.
    Erstellen Sie einen Ressourcenlink
  10. Aussichten für Name des Ressourcenlinks, geben Sie den Namen Ihres Ressourcenlinks ein (z. B. consumer_iceberg).
  11. Wählen Sie Ihre Datenbank und gemeinsam genutzte Tabelle aus.
  12. Auswählen Erstellen.
    Tabelle mit Ressourcenverknüpfung erstellen

Validieren Sie die Lösung

Jetzt können wir verschiedene Operationen auf den Tabellen ausführen, um die differenzierten Zugriffskontrollen zu validieren.

Einfügevorgang

Lassen Sie uns Daten in die einfügen consumer_iceberg Tabelle im Producer-Konto und überprüfen Sie, ob die Datenfilterung wie erwartet im Consumer-Konto funktioniert.

  1. Melden Sie sich beim Produzentenkonto an.
  2. Wählen Sie auf der Athena-Konsole Abfrage-Editor im Navigationsbereich.
  3. Verwenden Sie die folgende SQL, um Daten in die Iceberg-Tabelle zu schreiben und einzufügen. Verwenden Sie den Abfrageeditor, um jeweils eine Abfrage auszuführen. Sie können jeweils eine Abfrage markieren/auswählen und auf „Ausführen“/„Erneut ausführen“ klicken:
INSERT INTO consumer_iceberg VALUES (1, 'Land of Toys Inc.', 'gladys.rim@rim.org', 'NYC','USA', 'NA', 'James', 'xxxx 118th NE'); INSERT INTO consumer_iceberg VALUES (2, 'Reims Collectables', 'yuki_whobrey@aol.com', 'Reims','France', 'EMEA', 'Josephine', 'Darakjy'); INSERT INTO consumer_iceberg VALUES (3, 'Lyon Souveniers', 'fletcher.flosi@yahoo.com', 'Paris', 'France', 'EMEA','Art', 'Venere');

Fügen Sie Daten in die Consumer_iceberg-Tabelle im Produzentenkonto ein

  1. Verwenden Sie die folgende SQL, um Daten in der Iceberg-Tabelle zu lesen und auszuwählen:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Führen Sie eine Auswahlabfrage aus, um zu überprüfen, ob Zeilen eingefügt wurden

  1. Melden Sie sich beim Verbraucherkonto an.
  2. Führen Sie im Athena-Abfrage-Editor die folgende SELECT-Abfrage für die freigegebene Tabelle aus:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Führen Sie dieselbe Abfrage im Verbraucherkonto aus

Basierend auf den Filtern hat der Verbraucher Einblick in eine Teilmenge von Spalten und Zeilen, in denen das Land Frankreich ist.

Vorgänge aktualisieren/löschen

Lassen Sie uns nun eine der Zeilen aktualisieren und eine aus dem für den Verbraucher freigegebenen Dataset löschen.

  1. Melden Sie sich beim Produzentenkonto an.
  2. Aktualisierung city='Paris' WHERE city='Reims' und lösche die Zeile customerid = 3;
    UPDATE consumer_iceberg SET city= 'Paris' WHERE city= 'Reims' ;

    Führen Sie die Aktualisierungsabfrage im Produzentenkonto aus

DELETE FROM consumer_iceberg WHERE customerid =3;

Führen Sie eine Löschabfrage im Produzentenkonto aus

  1. Überprüfen Sie das aktualisierte und gelöschte Dataset:
SELECT * FROM consumer_iceberg;

Überprüfen Sie die Aktualisierung und löschen Sie sie im Produzentenkonto

  1. Melden Sie sich beim Verbraucherkonto an.
  2. Führen Sie im Athena-Abfrage-Editor die folgende SELECT-Abfrage für die freigegebene Tabelle aus:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Überprüfen Sie die Aktualisierung und löschen Sie das Verbraucherkonto

Wir können beobachten, dass nur eine Zeile verfügbar ist und die Stadt auf Paris aktualisiert wird.

Schemaentwicklung: Fügen Sie eine neue Spalte hinzu

Lassen Sie uns eine der Zeilen aktualisieren und eine aus dem für den Verbraucher freigegebenen Dataset löschen.

  1. Melden Sie sich beim Produzentenkonto an.
  2. Fügen Sie eine neue Spalte mit dem Namen hinzu geo_loc in der Iceberg-Tabelle. Verwenden Sie den Abfrageeditor, um jeweils eine Abfrage auszuführen. Sie können jeweils eine Abfrage markieren/auswählen und auf „Ausführen“/„Erneut ausführen“ klicken:
ALTER TABLE consumer_iceberg ADD COLUMNS (geo_loc string); INSERT INTO consumer_iceberg VALUES (5, 'Test_user', 'test_user@aol.com', 'Reims','France', 'EMEA', 'Test_user', 'Test_user', 'test_geo'); SELECT * FROM consumer_iceberg;

Fügen Sie eine neue Spalte in Producer aaccount hinzu

Um die neu hinzugefügten sichtbar zu machen geo_loc Spalte müssen wir den Datenfilter Lake Formation aktualisieren.

  1. Wählen Sie in der Lake Formation-Konsole aus Datenfilter im Navigationsbereich.
  2. Wählen Sie Ihren Datenfilter und wählen Sie Bearbeiten.
    Datenfilter aktualisieren
  3. Der Zugriff auf Spaltenebene, fügen Sie die neue Spalte hinzu (geo_loc).
  4. Auswählen Speichern.
    Neue Spalte zum Datenfilter hinzufügen
  5. Melden Sie sich beim Verbraucherkonto an.
  6. Führen Sie im Athena-Abfrage-Editor Folgendes aus SELECT Abfrage auf der gemeinsam genutzten Tabelle:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Bestätigen Sie, dass die neue Spalte im Verbraucherkonto angezeigt wird

Die neue Kolumne geo_loc sichtbar ist und eine zusätzliche Zeile.

Schemaentwicklung: Spalte löschen

Lassen Sie uns eine der Zeilen aktualisieren und eine aus dem für den Verbraucher freigegebenen Dataset löschen.

  1. Melden Sie sich beim Produzentenkonto an.
  2. Ändern Sie die Tabelle, um die Adressspalte aus der Iceberg-Tabelle zu löschen. Verwenden Sie den Abfrageeditor, um jeweils eine Abfrage auszuführen. Sie können jeweils eine Abfrage markieren/auswählen und auf „Ausführen“/„Erneut ausführen“ klicken:
ALTER TABLE consumer_iceberg DROP COLUMN address; SELECT * FROM consumer_iceberg;

Löschen Sie eine Spalte im Produzentenkonto

Wir können beobachten, dass die Spaltenadresse nicht in der Tabelle vorhanden ist.

  1. Melden Sie sich beim Verbraucherkonto an.
  2. Führen Sie im Athena-Abfrage-Editor die folgende SELECT-Abfrage für die freigegebene Tabelle aus:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Überprüfen Sie die Spaltenlöschung im Verbraucherkonto

Die Spaltenadresse ist in der Tabelle nicht vorhanden.

Zeitreise

Wir haben die Iceberg-Tabelle nun mehrfach geändert. Die Iceberg-Tabelle verfolgt die Snapshots. Führen Sie die folgenden Schritte aus, um die Zeitreisefunktion zu erkunden:

  1. Melden Sie sich beim Produzentenkonto an.
  2. Abfrage der Systemtabelle:
SELECT * FROM "lf-demo-db"."consumer_iceberg$snapshots" limit 10;

Wir können beobachten, dass wir mehrere Snapshots generiert haben.

  1. Notieren Sie eine der committed_at Werte, die in den nächsten Schritten verwendet werden sollen (für dieses Beispiel 2023-01-29 21:35:02.176 UTC).
    Zeitreiseabfrage im Verbraucherkonto
  2. Verwenden Sie die Zeitreise, um den Tabellenschnappschuss zu finden. Verwenden Sie den Abfrageeditor, um jeweils eine Abfrage auszuführen. Sie können jeweils eine Abfrage markieren/auswählen und auf „Ausführen“/„Erneut ausführen“ klicken:
SELECT * FROM consumer_iceberg FOR TIMESTAMP
AS OF TIMESTAMP '2023-01-29 21:35:02.176 UTC';

Finden Sie Tabellen-Snapshots mithilfe von Zeitreisen

Aufräumen

Führen Sie die folgenden Schritte aus, um zukünftige Gebühren zu vermeiden:

  1. Löschen Sie auf der Amazon S3-Konsole den Tabellenspeicher-Bucket (für diesen Beitrag iceberg-athena-lakeformation-blog).
  2. Führen Sie im Producer-Konto auf der Athena-Konsole die folgenden Befehle aus, um die von Ihnen erstellten Tabellen zu löschen:
DROP TABLE "lf-demo-db"."consumer_iceberg";
DROP DATABASE lf-demo-db;

  1. Widerrufen Sie im Producer-Konto in der Lake Formation-Konsole die Berechtigungen für das Consumer-Konto.
    Aufräumen – Widerrufen Sie die Berechtigungen für das Verbraucherkonto
  2. Löschen Sie den S3-Bucket, der für den Speicherort des Athena-Abfrageergebnisses verwendet wird, aus dem Verbraucherkonto.

Zusammenfassung

Mit der Unterstützung für kontoübergreifende, feinkörnige Zugriffskontrollrichtlinien für Formate wie Iceberg haben Sie die Flexibilität, mit jedem von Athena unterstützten Format zu arbeiten. Die Möglichkeit, CRUD-Operationen für die Daten in Ihrem S3 Data Lake durchzuführen, kombiniert mit den feinkörnigen Zugriffskontrollen von Lake Formation für alle von Athena unterstützten Tabellen und Formate, bietet Möglichkeiten zur Innovation und Vereinfachung Ihrer Datenstrategie. Wir freuen uns über Ihr Feedback!


Über die Autoren

Kishore Dhamodaran ist Senior Solutions Architect bei AWS. Kishore unterstützt strategische Kunden bei ihrer Cloud-Unternehmensstrategie und Migrationsreise und nutzt dabei seine jahrelange Branchen- und Cloud-Erfahrung.

Jack Ye ist Softwareentwickler des Athena Data Lake and Storage-Teams bei AWS. Er ist Apache Iceberg Committer und PMC-Mitglied.

Chris Olson ist Softwareentwicklungsingenieur bei AWS.

Xiaoxuan Li ist Softwareentwicklungsingenieur bei AWS.

Rahul Sonawane ist Principal Analytics Solutions Architect bei AWS mit KI/ML und Analytics als Spezialgebiet.

spot_img

Neueste Intelligenz

spot_img