Gewährung von Lambda-Funktionszugriff auf externe Hive-Metastores - Amazon Athena

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.

Gewährung von Lambda-Funktionszugriff auf externe Hive-Metastores

Um eine Lambda-Funktion in Ihrem Konto aufzurufen, müssen Sie eine Rolle mit den folgenden Berechtigungen erstellen:

  • AWSLambdaVPCAccessExecutionRole— Ein AWS LambdaBerechtigung für die Ausführungsrolle zur Verwaltung elastischer Netzwerkschnittstellen, die Ihre Funktion mit einem verbindenVPC. Stellen Sie sicher, dass es eine ausreichende Anzahl von Netzwerkschnittstellen und IP-Adressen gibt.

  • AmazonAthenaFullAccess— Die AmazonAthenaFullAccessverwaltete Richtlinie gewährt vollen Zugriff auf Athena.

  • Eine Amazon-S3-Richtlinie, die der Lambda-Funktion das Schreiben zu S3 und Athena das Lesen aus S3 ermöglicht.

Die folgende Richtlinie definiert beispielsweise die Berechtigung für den Überlaufspeicherort s3:\\mybucket\spill.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/spill" ] } ] }

Wenn Sie IAM Richtlinien verwenden, stellen Sie sicher, dass Sie sich an IAM bewährte Methoden halten. Weitere Informationen finden Sie unter Bewährte Sicherheitsmethoden IAM im IAM Benutzerhandbuch.

Lambda-Funktionen erstellen

Für die Erstellung einer Lambda-Funktion in Ihrem Konto sind Funktionsentwicklungsberechtigungen oder die Rolle AWSLambdaFullAccess erforderlich. Weitere Informationen finden Sie unter Identitätsbasierte Richtlinien IAM für AWS Lambda.

Weil Athena die benutzt AWS Serverless Application Repository Um Lambda-Funktionen zu erstellen, sollte der Superuser oder Administrator, der Lambda-Funktionen erstellt, auch über IAM Richtlinien verfügen, die Athena-Verbundabfragen zulassen.

Konfigurieren Sie Berechtigungen für die Katalogregistrierung und Metadatenoperationen API

Für API den Zugriff auf die Katalogregistrierung und Metadatenvorgänge können Sie die AmazonAthenaFullAccess verwaltete Richtlinie verwenden. Wenn Sie die AmazonAthenaFullAccess Richtlinie nicht verwenden, fügen Sie Ihren Athena-Richtlinien die folgenden API Operationen hinzu:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:ListDataCatalogs", "athena:GetDataCatalog", "athena:CreateDataCatalog", "athena:UpdateDataCatalog", "athena:DeleteDataCatalog", "athena:GetDatabase", "athena:ListDatabases", "athena:GetTableMetadata", "athena:ListTableMetadata" ], "Resource": [ "*" ] } ] }

Regionsübergreifendes Aufrufen einer Lambda-Funktion

Athena ruft standardmäßig Lambda-Funktionen auf, die in derselben Region definiert sind. Um eine Lambda-Funktion in einem aufzurufen AWS-Region Verwenden Sie außer der Region, in der Sie Athena-Abfragen ausführen, die gesamte ARN Lambda-Funktion.

Das folgende Beispiel zeigt, wie ein Katalog in der Region Europa (Frankfurt) eine Lambda-Funktion in der Region USA Ost (Nord-Virginia) angeben kann, um Daten aus dem Hive-Metastore in der Region Europa (Frankfurt) abzurufen.

arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new

Wenn Sie den vollständigen Wert auf diese ARN Weise angeben, kann Athena die external-hms-service-new Lambda-Funktion aufrufen, us-east-1 um die Hive-Metastore-Daten von abzurufen. eu-central-1

Anmerkung

Der Katalog sollte im selben Verzeichnis registriert sein AWS-Region die Sie verwenden, um Athena-Abfragen auszuführen.

Kontenübergreifend eine Lambda-Funktion aufrufen

Manchmal benötigen Sie möglicherweise Zugriff auf einen Hive-Metastore über ein anderes Konto. Um beispielsweise einen Hive-Metastore auszuführen, können Sie ein anderes Konto verwenden als das, das Sie für Athena-Abfragen verwenden. Verschiedene Gruppen oder Teams können Hive Metastore mit unterschiedlichen Konten in ihren eigenen ausführen. VPC Vielleicht möchten Sie auch auf Metadaten in verschiedenen Hive-Metastores in verschiedenen Gruppen oder Teams zugreifen.

Athena benutzt die AWS Lambda Unterstützung für kontenübergreifenden Zugriff, um den kontenübergreifenden Zugriff auf Hive Metastores zu ermöglichen.

Anmerkung

Beachten Sie, dass der kontenübergreifende Zugriff für Athena normalerweise den kontenübergreifenden Zugriff für Metadaten und Daten in Amazon S3 impliziert.

Stellen Sie sich das folgende Szenario vor:

  • Account 111122223333 richtet die Lambda-Funktion external-hms-service-new auf us-east-1 in Athena ein, um auf einen Hive-Metastore zuzugreifen, der auf einem Cluster läuft. EMR

  • Konto 111122223333 möchte dem Konto 444455556666 Zugriff auf die Hive-Metastore-Daten erteilen.

Um 444455556666 Kontozugriff auf die Lambda-Funktion zu gewährenexternal-hms-service-new, 111122223333 verwendet das Konto Folgendes AWS CLI add-permissionBefehl. Der Befehl wurde zur besseren Lesbarkeit formatiert.

$ aws --profile perf-test lambda add-permission --function-name external-hms-service-new --region us-east-1 --statement-id Id-ehms-invocation2 --action "lambda:InvokeFunction" --principal arn:aws:iam::444455556666:user/perf1-test { "Statement": "{\"Sid\":\"Id-ehms-invocation2\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}" }

Um die Lambda-Berechtigung zu überprüfen, verwenden Sie den Befehl get-policy wie im folgenden Beispiel gezeigt. Der Befehl wurde zur besseren Lesbarkeit formatiert.

$ aws --profile perf-test lambda get-policy --function-name arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new --region us-east-1 { "RevisionId": "711e93ea-9851-44c8-a09f-5f2a2829d40f", "Policy": "{\"Version\":\"2012-10-17\", \"Id\":\"default\", \"Statement\":[{\"Sid\":\"Id-ehms-invocation2\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}]}" }

Nachdem Sie die Berechtigung hinzugefügt haben, können Sie eine vollständige ARN Lambda-Funktion us-east-1 wie folgt verwenden, wenn Sie den Katalog ehms definieren:

arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new

Weitere Informationen zu regionsübergreifenden Aufrufen finden Sie unter Regionsübergreifendes Aufrufen einer Lambda-Funktion weiter oben in diesem Thema.

Gewähren Sie kontenübergreifenden Zugriff auf Daten

Bevor Sie Athena-Abfragen ausführen können, müssen Sie einen kontenübergreifenden Zugriff auf die Daten in Amazon S3 gewähren. Sie können dafür eine der folgenden Möglichkeiten auswählen:

  • Aktualisieren Sie die Richtlinie für Zugriffskontrolllisten des Amazon-S3-Buckets mit einer kanonischen Benutzer-ID.

  • Fügen Sie der Amazon-S3-Bucket-Richtlinie den kontenübergreifenden Zugriff hinzu.

Sie könnten beispielsweise der Amazon-S3-Bucket-Richtlinie im Konto die folgende Richtlinie 111122223333 die folgende Richtlinie hinzufügen, damit das Konto 444455556666 Daten aus dem angegebenen Amazon-S3-Speicherort lesen kann.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567890123", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:user/perf1-test" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::athena-test/lambda/dataset/*" } ] }
Anmerkung

Möglicherweise müssen Sie den kontenübergreifenden Zugriff auf Amazon S3 nicht nur in Bezug auf Ihre Daten, sondern auch in Bezug auf Ihren Amazon-S3-Überlaufspeicherort gewähren. Ihre Lambda-Funktion speichert zusätzliche Daten am Überlaufspeicherort, wenn die Größe des Antwortobjekts einen bestimmten Schwellenwert überschreitet. Ein Beispiel für eine Richtlinie finden Sie am Anfang dieses Themas.

Im aktuellen Beispiel kann nach Gewährung des kontenübergreifenden Zugriffs für 444455556666, das Konto 444455556666 den Katalog ehms im eigenen account verwenden, um im Konto 111122223333 definierte Tabellen abzufragen.

Im folgenden Beispiel ist das SQL Workbench-Profil für Konten perf-test-1 vorgesehen. 444455556666 Die Abfrage verwendet den Katalog ehms, um auf den Hive-Metastore und die Amazon-S3-Daten im Konto 111122223333 zuzugreifen.

Kontenübergreifender Zugriff auf Hive Metastore- und Amazon S3 S3-Daten in SQL Workbench.