Autorisation d'accès des fonctions Lambda aux métastores Hive externes - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Autorisation d'accès des fonctions Lambda aux métastores Hive externes

Pour invoquer une fonction Lambda dans votre compte, vous devez créer un rôle disposant des autorisations suivantes :

  • AWSLambdaVPCAccessExecutionRole— Un AWS Lambdaautorisation de rôle d'exécution pour gérer les interfaces réseau élastiques qui connectent votre fonction à unVPC. Assurez-vous que vous disposez d'un nombre suffisant d'interfaces réseau et d'adresses IP disponibles.

  • AmazonAthenaFullAccess— La politique AmazonAthenaFullAccessgérée accorde un accès complet à Athéna.

  • Une politique Simple Storage Service (Amazon S3) pour permettre à la fonction Lambda d'écrire sur S3 et à Athena de lire à partir de S3.

Par exemple, la politique suivante définit l'autorisation pour l'emplacement de déversement 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" ] } ] }

Chaque fois que vous utilisez des IAM politiques, assurez-vous de suivre les IAM meilleures pratiques. Pour plus d'informations, consultez la section Bonnes pratiques en matière de sécurité IAM dans le guide de IAM l'utilisateur.

Création de fonctions Lambda

Pour créer une fonction Lambda dans votre compte, des autorisations de développement de fonction ou le rôle AWSLambdaFullAccess sont nécessaires. Pour plus d'informations, voir Politiques basées sur l'identité IAM pour AWS Lambda.

Parce qu'Athéna utilise le AWS Serverless Application Repository pour créer des fonctions Lambda, le superutilisateur ou l'administrateur qui crée des fonctions Lambda doit également disposer de politiques autorisant les requêtes fédérées IAM Athena.

Configurer les autorisations pour l'enregistrement du catalogue et les API opérations de métadonnées

Pour API accéder à l'enregistrement du catalogue et aux opérations de métadonnées, vous pouvez utiliser la politique AmazonAthenaFullAccess gérée. Si vous n'utilisez pas la AmazonAthenaFullAccess politique, ajoutez les API opérations suivantes à vos politiques Athena :

{ "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": [ "*" ] } ] }

Appelez une fonction Lambda dans toutes les régions

Par défaut, Athena invoque des fonctions Lambda définies dans la même région. Pour appeler une fonction Lambda dans un Région AWS autre que la région dans laquelle vous exécutez les requêtes Athena, utilisez l'intégralité ARN de la fonction Lambda.

L'exemple suivant montre comment un catalogue de la région Europe (Francfort) peut spécifier une fonction Lambda dans la région USA Est (Virginie du Nord) pour récupérer des données depuis le métastore Hive de la région Europe (Francfort).

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

Lorsque vous spécifiez la valeur complète de cette ARN manière, Athena peut appeler la fonction external-hms-service-new Lambda us-east-1 pour récupérer les données du métastore Hive. eu-central-1

Note

Le catalogue doit être enregistré dans le même Région AWS que vous utilisez pour exécuter des requêtes Athena.

Appelez une fonction Lambda sur plusieurs comptes

Parfois, vous pouvez avoir besoin d'accéder à un métastore Hive à partir d'un autre compte. Par exemple, pour exécuter une métastore Hive, vous pouvez utiliser un compte différent de celui que vous utilisez pour les requêtes Athena. Différents groupes ou équipes peuvent gérer le métastore Hive avec différents comptes au sein du leur. VPC Vous pouvez également accéder aux métadonnées de différents métastores Hive de différents groupes ou équipes.

Athéna utilise le AWS Lambda prise en charge de l'accès entre comptes afin de permettre l'accès entre comptes pour Hive Metastores.

Note

Notez que l'accès entre comptes pour Athena implique normalement un accès inter-comptes pour les métadonnées et les données dans Simple Storage Service (Amazon S3).

Imaginez le scénario suivant :

  • Le compte 111122223333 configure la fonction Lambda sur external-hms-service-new us-east-1 dans Athena pour accéder à un métastore Hive exécuté sur un cluster. EMR

  • Le compte 111122223333 veut autoriser le compte 444455556666 à accéder aux données du métastore Hive.

Pour autoriser un compte à 444455556666 accéder à la fonction Lambdaexternal-hms-service-new, le compte 111122223333 utilise ce qui suit AWS CLI add-permissioncommande. La commande a été formatée pour être lisible.

$ 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\"}" }

Pour vérifier l'autorisation Lambda, utilisez la commande get-policy, comme dans l'exemple suivant. La commande a été formatée pour être lisible.

$ 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\"}]}" }

Après avoir ajouté l'autorisation, vous pouvez utiliser l'intégralité ARN de la fonction Lambda us-east-1 comme suit lorsque vous définissez le catalogue : ehms

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

Pour de plus amples informations sur l'appel entre régions, veuillez consulter Appelez une fonction Lambda dans toutes les régions plus haut dans cette rubrique.

Accorder un accès aux données entre comptes

Avant de pouvoir exécuter des requêtes Athena, vous devez accorder l'accès inter-comptes aux données dans Simple Storage Service (Amazon S3). Vous pouvez effectuer cette opération de différentes manières :

  • Mettez à jour la politique de la liste de contrôle d'accès du compartiment Simple Storage Service (Amazon S3) avec un ID utilisateur canonique.

  • Ajoutez l'accès inter-comptes à la politique de compartiment Simple Storage Service (Amazon S3).

Par exemple, ajoutez la politique suivante à la politique de compartiment Simple Storage Service (Amazon S3) du compte 111122223333 pour permettre au compte 444455556666 de lire des données à partir de l'emplacement Simple Storage Service (Amazon S3) spécifié.

{ "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/*" } ] }
Note

Il se peut que vous deviez accorder un accès inter-comptes à Simple Storage Service (Amazon S3) non seulement à vos données, mais aussi à votre emplacement de déversement Simple Storage Service (Amazon S3). Votre fonction Lambda déverse des données supplémentaires à l'emplacement de déversement lorsque la taille de l'objet de réponse dépasse un seuil donné. Veuillez consulter le début de cette rubrique pour obtenir un exemple de politique.

Dans l'exemple actuel, une fois que l'accès entre comptes est accordé à 444455556666,, 444455556666 peut utiliser le catalogue ehms dans son propre account pour interroger les tables qui sont définies dans le compte 111122223333.

Dans l'exemple suivant, le profil SQL Workbench perf-test-1 est destiné au compte444455556666. La requête utilise le catalogue ehms pour accéder au métastore Hive et aux données Simple Storage Service (Amazon S3) du compte 111122223333.

Accès au métastore Hive et aux données Amazon S3 via des comptes dans Workbench. SQL