Verwendung von EMR Serverless mit AWS Lake Formation für eine differenzierte Zugriffskontrolle - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwendung von EMR Serverless mit AWS Lake Formation für eine differenzierte Zugriffskontrolle

Übersicht

Mit den Amazon EMR-Versionen 7.2.0 und höher können AWS Lake Formation Sie detaillierte Zugriffskontrollen auf Datenkatalogtabellen anwenden, die von S3 unterstützt werden. Mit dieser Funktion können Sie Zugriffskontrollen auf Tabellen-, Zeilen-, Spalten- und Zellenebene für read Abfragen innerhalb Ihrer Amazon EMR Serverless Spark-Jobs konfigurieren. Verwenden Sie EMR Studio, um eine detaillierte Zugriffskontrolle für Apache Spark-Batchjobs und interaktive Sitzungen zu konfigurieren. In den folgenden Abschnitten erfahren Sie mehr über Lake Formation und dessen Verwendung mit EMR Serverless.

Für die Nutzung von Amazon EMR Serverless mit AWS Lake Formation fallen zusätzliche Gebühren an. Weitere Informationen finden Sie unter Amazon EMR-Preise.

So funktioniert EMR Serverless mit AWS Lake Formation

Wenn Sie EMR Serverless mit Lake Formation verwenden, können Sie für jeden Spark-Job eine Berechtigungsebene erzwingen, um die Lake Formation Formation-Berechtigungssteuerung anzuwenden, wenn EMR Serverless Jobs ausführt. EMR Serverless verwendet Spark-Ressourcenprofile, um zwei Profile für die effektive Ausführung von Jobs zu erstellen. Das Benutzerprofil führt vom Benutzer bereitgestellten Code aus, während das Systemprofil die Lake Formation-Richtlinien durchsetzt. Weitere Informationen finden Sie unter Was ist AWS Lake Formation und Überlegungen und Einschränkungen.

Wenn Sie vorinitialisierte Kapazität mit Lake Formation verwenden, empfehlen wir, mindestens zwei Spark-Treiber zu verwenden. Jeder Lake Formation-fähige Job verwendet zwei Spark-Treiber, einen für das Benutzerprofil und einen für das Systemprofil. Die beste Leistung erzielen Sie, wenn Sie für Lake Formation-fähige Jobs die doppelte Anzahl von Treibern verwenden, als wenn Sie Lake Formation nicht verwenden.

Wenn Sie Spark-Jobs auf EMR Serverless ausführen, sollten Sie auch die Auswirkungen der dynamischen Zuweisung auf das Ressourcenmanagement und die Clusterleistung berücksichtigen. Die Konfiguration spark.dynamicAllocation.maxExecutors der maximalen Anzahl von Executors pro Ressourcenprofil gilt für Benutzer- und System-Executoren. Wenn Sie diese Anzahl so konfigurieren, dass sie der maximal zulässigen Anzahl von Executoren entspricht, kann es sein, dass Ihre Jobausführung aufgrund eines Executortyps, der alle verfügbaren Ressourcen verwendet, blockiert wird, wodurch der andere Executor verhindert wird, wenn Sie Job-Jobs ausführen.

Damit Ihnen nicht die Ressourcen ausgehen, legt EMR Serverless die standardmäßige maximale Anzahl von Executoren pro Ressourcenprofil auf 90% des Werts fest. spark.dynamicAllocation.maxExecutors Sie können diese Konfiguration überschreiben, wenn Sie einen Wert zwischen spark.dynamicAllocation.maxExecutorsRatio 0 und 1 angeben. Konfigurieren Sie außerdem die folgenden Eigenschaften, um die Ressourcenzuweisung und die Gesamtleistung zu optimieren:

  • spark.dynamicAllocation.cachedExecutorIdleTimeout

  • spark.dynamicAllocation.shuffleTracking.timeout

  • spark.cleaner.periodicGC.interval

Im Folgenden finden Sie einen allgemeinen Überblick darüber, wie EMR Serverless Zugriff auf Daten erhält, die durch Sicherheitsrichtlinien von Lake Formation geschützt sind.

Wie Amazon EMR auf Daten zugreift, die durch Sicherheitsrichtlinien von Lake Formation geschützt sind.
  1. Ein Benutzer sendet einen Spark-Job an eine AWS Lake Formation-fähige EMR Serverless-Anwendung.

  2. EMR Serverless sendet den Job an einen Benutzertreiber und führt den Job im Benutzerprofil aus. Der Benutzertreiber führt eine schlanke Version von Spark aus, die nicht in der Lage ist, Aufgaben zu starten, Executors anzufordern, auf S3 oder den Glue-Katalog zuzugreifen. Es erstellt einen Jobplan.

  3. EMR Serverless richtet einen zweiten Treiber ein, den Systemtreiber, und führt ihn im Systemprofil aus (mit einer privilegierten Identität). EMR Serverless richtet einen verschlüsselten TLS-Kanal zwischen den beiden Treibern für die Kommunikation ein. Der Benutzertreiber verwendet den Kanal, um die Jobpläne an den Systemtreiber zu senden. Der Systemtreiber führt keinen vom Benutzer übermittelten Code aus. Er läuft in vollem Umfang mit Spark und kommuniziert mit S3 und dem Datenkatalog für den Datenzugriff. Es fordert Ausführende an und stellt den Jobplan in eine Abfolge von Ausführungsphasen zusammen.

  4. EMR Serverless führt dann die Stufen auf Executoren mit dem Benutzertreiber oder Systemtreiber aus. Benutzercode wird in jeder Phase ausschließlich auf Benutzerprofil-Executoren ausgeführt.

  5. Stufen, die Daten aus Datenkatalogtabellen lesen, die durch Sicherheitsfilter geschützt sind AWS Lake Formation oder solche, die Sicherheitsfilter anwenden, werden an Systemausführende delegiert.

Aktivierung der Lake Formation in Amazon EMR

Um Lake Formation zu aktivieren, legen Sie spark.emr-serverless.lakeformation.enabled beim Erstellen einer serverlosen EMR-Anwendung den Wert für den Laufzeitkonfigurationsparameter auf true spark-defaults Unterklassifizierung fest.

aws emr-serverless create-application \ --release-label emr-7.10.0 \ --runtime-configuration '{ "classification": "spark-defaults", "properties": { "spark.emr-serverless.lakeformation.enabled": "true" } }' \ --type "SPARK"

Sie können Lake Formation auch aktivieren, wenn Sie eine neue Anwendung in EMR Studio erstellen. Wählen Sie Lake Formation verwenden für eine detaillierte Zugriffskontrolle aus, die unter Zusätzliche Konfigurationen verfügbar ist.

Die Interworker-Verschlüsselung ist standardmäßig aktiviert, wenn Sie Lake Formation mit EMR Serverless verwenden, sodass Sie die Interworker-Verschlüsselung nicht erneut explizit aktivieren müssen.

Aktivierung von Lake Formation für Spark-Jobs

Um Lake Formation für einzelne Spark-Jobs spark.emr-serverless.lakeformation.enabled zu aktivieren, setzen Sie ihn bei der Verwendung auf truespark-submit.

--conf spark.emr-serverless.lakeformation.enabled=true

IAM-Berechtigungen für die Rolle „Job Runtime“

Lake Formation Formation-Berechtigungen kontrollieren den Zugriff auf AWS Glue Data Catalog-Ressourcen, Amazon S3 S3-Standorte und die zugrunde liegenden Daten an diesen Standorten. IAM-Berechtigungen kontrollieren den Zugriff auf Lake Formation und AWS Glue APIs sowie auf Ressourcen. Obwohl Sie möglicherweise über die Lake Formation Formation-Berechtigung verfügen, auf eine Tabelle im Datenkatalog (SELECT) zuzugreifen, schlägt Ihr Vorgang fehl, wenn Sie nicht über die IAM-Berechtigung für den glue:Get* API-Vorgang verfügen.

Im Folgenden finden Sie eine Beispielrichtlinie für die Bereitstellung von IAM-Berechtigungen für den Zugriff auf ein Skript in S3, für das Hochladen von Protokollen auf S3, für AWS Glue-API-Berechtigungen und für den Zugriff auf Lake Formation.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ScriptAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*.amzn-s3-demo-bucket/scripts", "arn:aws:s3:::*.amzn-s3-demo-bucket/*" ] }, { "Sid": "LoggingAccess", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/logs/*" ] }, { "Sid": "GlueCatalogAccess", "Effect": "Allow", "Action": [ "glue:Get*", "glue:Create*", "glue:Update*" ], "Resource": [ "*" ] }, { "Sid": "LakeFormationAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": [ "*" ] } ] }

Lake Formation Formation-Berechtigungen für die Job-Runtime-Rolle einrichten

Registrieren Sie zunächst den Standort Ihres Hive-Tisches bei Lake Formation. Erstellen Sie dann Berechtigungen für Ihre Job-Runtime-Rolle in der gewünschten Tabelle. Weitere Informationen zu Lake Formation finden Sie unter Was ist AWS Lake Formation? im AWS Lake Formation Entwicklerhandbuch.

Nachdem Sie die Lake Formation Formation-Berechtigungen eingerichtet haben, reichen Sie Spark-Jobs auf Amazon EMR Serverless ein. Weitere Informationen zu Spark-Jobs finden Sie in den Spark-Beispielen.

Einen Joblauf einreichen

Nachdem Sie die Lake Formation Grants eingerichtet haben, können Sie Spark-Jobs auf EMR Serverless einreichen. Der folgende Abschnitt enthält Beispiele für die Konfiguration und Übermittlung der Eigenschaften für die Ausführung von Jobs.

Unterstützung für das Open-Table-Format

EMR Serverless unterstützt Apache Hive, Apache Iceberg und ab Version 7.6.0 Delta Lake und Apache Hudi. Informationen zur Betriebsunterstützung finden Sie auf den folgenden Registerkarten.

Hive
Operationen Hinweise
Lesevorgänge Vollständig unterstützt
Inkrementelle Abfragen Nicht zutreffend
Zeitreiseabfragen Gilt nicht für dieses Tabellenformat
DML INSERT Nur mit IAM-Berechtigungen
DML-UPDATE Gilt nicht für dieses Tabellenformat
DML DELETE Gilt nicht für dieses Tabellenformat
DDL-Befehle Nur mit IAM-Berechtigungen
Metadaten-Tabellen Gilt nicht für dieses Tabellenformat
Gespeicherte Prozeduren Nicht zutreffend
Funktionen zur Tabellenverwaltung und zu den Hilfsprogrammen Nicht zutreffend
Iceberg
Operationen Hinweise
Lesevorgänge Vollständig unterstützt
Inkrementelle Abfragen Vollständig unterstützt
Zeitreiseabfragen Vollständig unterstützt
DML INSERT Nur mit IAM-Berechtigungen
DML-UPDATE Nur mit IAM-Berechtigungen
DML DELETE Nur mit IAM-Berechtigungen
DDL-Befehle Nur mit IAM-Berechtigungen
Metadaten-Tabellen Wird unterstützt, aber bestimmte Tabellen sind ausgeblendet. Weitere Informationen finden Sie unter Überlegungen und Einschränkungen.
Gespeicherte Prozeduren Wird mit den Ausnahmen von register_table und unterstütztmigrate. Weitere Informationen finden Sie unter Überlegungen und Einschränkungen.
Funktionen zur Tabellenverwaltung und Hilfsprogramme Nicht zutreffend

Spark-Konfiguration für Iceberg: Das folgende Beispiel zeigt, wie Spark mit Iceberg konfiguriert wird. Geben Sie die folgenden Eigenschaften an, um Iceberg-Jobs auszuführen. spark-submit

--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=<S3_DATA_LOCATION> --conf spark.sql.catalog.spark_catalog.glue.account-id=<ACCOUNT_ID> --conf spark.sql.catalog.spark_catalog.client.region=<REGION> --conf spark.sql.catalog.spark_catalog.glue.endpoint=https://glue.<REGION>.amazonaws.com
Hudi
Operationen Hinweise
Lesevorgänge Vollständig unterstützt
Inkrementelle Abfragen Vollständig unterstützt
Zeitreiseabfragen Vollständig unterstützt
DML INSERT Nur mit IAM-Berechtigungen
DML-UPDATE Nur mit IAM-Berechtigungen
DML DELETE Nur mit IAM-Berechtigungen
DDL-Befehle Nur mit IAM-Berechtigungen
Metadaten-Tabellen Nicht unterstützt
Gespeicherte Prozeduren Nicht zutreffend
Funktionen zur Tabellenverwaltung und Hilfsprogramme Nicht unterstützt

In den folgenden Beispielen wird Spark mit Hudi konfiguriert, wobei Dateipositionen und andere Eigenschaften angegeben werden, die für die Verwendung erforderlich sind.

Spark-Konfiguration für Hudi: Wenn dieser Ausschnitt in einem Notizbuch verwendet wird, gibt er den Pfad zur Hudi Spark-Bundle-JAR-Datei an, die die Hudi-Funktionalität in Spark aktiviert. Außerdem wird Spark so konfiguriert, dass der AWS Glue-Datenkatalog als Metastore verwendet wird.

%%configure -f { "conf": { "spark.jars": "/usr/lib/hudi/hudi-spark-bundle.jar", "spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "spark.serializer": "org.apache.spark.serializer.JavaSerializer", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog", "spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension" } }

Spark-Konfiguration für Hudi mit AWS Glue: Wenn dieses Snippet in einem Notizbuch verwendet wird, aktiviert es Hudi als unterstütztes Data-Lake-Format und stellt sicher, dass Hudi-Bibliotheken und Abhängigkeiten verfügbar sind.

%%configure { "--conf": "spark.serializer=org.apache.spark.serializer.JavaSerializer --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension", "--datalake-formats": "hudi", "--enable-glue-datacatalog": True, "--enable-lakeformation-fine-grained-access": "true" }
Delta Lake
Operationen Hinweise
Lesevorgänge Vollständig unterstützt
Inkrementelle Abfragen Vollständig unterstützt
Zeitreiseabfragen Vollständig unterstützt
DML INSERT Nur mit IAM-Berechtigungen
DML-UPDATE Nur mit IAM-Berechtigungen
DML DELETE Nur mit IAM-Berechtigungen
DDL-Befehle Nur mit IAM-Berechtigungen
Metadaten-Tabellen Nicht unterstützt
Gespeicherte Prozeduren Nicht zutreffend
Funktionen zur Tabellenverwaltung und Hilfsprogramme Nicht unterstützt

EMR Serverless mit Delta Lake: Um Delta Lake with Lake Formation auf EMR Serverless zu verwenden, führen Sie den folgenden Befehl aus:

spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \