Configuration de l’accès intercompte aux catalogues de données AWS Glue - Amazon Athena

Configuration de l’accès intercompte aux catalogues de données AWS Glue

Vous pouvez utiliser la fonction de catalogue AWS Glue inter-comptes d'Athena pour enregistrer un catalogue AWS Glue à partir d'un autre compte que le vôtre. Après avoir configuré les autorisations IAM requises pour AWS Glue et enregistré le catalogue en tant que ressource Athena DataCatalog, vous pouvez utiliser Athena pour exécuter des requêtes inter-comptes. Pour plus d'informations sur l'utilisation de la console Athena pour enregistrer un catalogue à partir d'un autre compte, consultez Enregistrement d’un catalogue de données à partir d’un autre compte.

Pour plus d'informations sur l'accès inter-comptes dans AWS Glue, consultez la rubrique Octroi d'un accès inter-comptes du Guide du développeur AWS Glue.

Avant de commencer

Étant donné que cette fonction utilise les API et les fonctionnalités existantes des ressources DataCatalog Athena pour permettre un accès inter-comptes, nous vous recommandons de lire les ressources suivantes avant de commencer :

Considérations et restrictions

Actuellement, l'accès au catalogue AWS Glue Athena inter-comptes présente les limitations suivantes :

  • Cette fonctionnalité n'est disponible que dans les Régions AWS où la version 2 du moteur Athena, ou une version ultérieure, est prise en charge. Pour plus d'informations sur les versions du moteur Athena, voir Gestion des versions du moteur Athena. Pour mettre à niveau la version du moteur pour un groupe de travail, veuillez consulter la rubrique Modification des versions du moteur Athena.

  • Lorsque vous enregistrez le AWS Glue Data Catalog d'un autre compte dans votre compte, vous créez une ressource DataCatalog régionale qui est liée aux données de l'autre compte dans cette région particulière uniquement.

  • Actuellement, les instructions CREATE VIEW qui comprennent un catalogue AWS Glue inter-comptes ne sont pas prises en charge.

  • L’interrogation intercompte n’est pas disponible pour les catalogues chiffrés à l’aide de clés gérées par AWS. Utilisez des clés gérées par le client (KMS_CMK) pour les catalogues pour lesquels vous souhaitez appliquer l’interrogation intercompte. Pour plus d’informations sur les différences entre les clés gérées par le client et par AWS, consultez Customer keys and AWS keys dans le Guide de développement d’AWS Key Management Service.

Premiers pas

Dans le scénario suivant, le compte « emprunteur » (666666666666) souhaite exécuter une requête SELECT faisant référence au catalogue AWS Glue qui appartient au compte « propriétaire » (999999999999) :

SELECT * FROM ownerCatalog.tpch1000.customer

Dans la procédure ci-dessous, les étapes 1a et 1b montrent comment autoriser le compte emprunteur à accéder aux ressources AWS Glue du compte propriétaire, du point de vue des deux comptes. L'exemple accorde l'accès à la base de données tpch1000 et à la table customer. Modifiez ces exemples de noms pour répondre à vos besoins.

Étape 1a : Création d’un rôle d’emprunteur avec une politique d’accès aux ressources AWS Glue du propriétaire

Pour permettre au rôle de compte emprunteur d’accéder aux ressources AWS Glue du compte propriétaire, vous pouvez utiliser la console AWS Identity and Access Management (IAM) ou l’API IAM. La procédure suivante utilise la console IAM.

Pour créer un rôle d’emprunteur et une politique d’accès aux ressources AWS Glue du compte propriétaire
  1. Connectez-vous à la console IAM à l’adresse https://console.aws.amazon.com/iam/ depuis le compte emprunteur.

  2. Dans le panneau de navigation, développez Gestion des accès, puis choisissez Politiques.

  3. Choisissez Créer une politique.

  4. Dans Éditeur de politique, choisissez JSON.

  5. Entrez la politique suivante dans l’éditeur de requête, puis modifiez-la en fonction de vos besoins :

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:999999999999:catalog", "arn:aws:glue:us-east-1:999999999999:database/tpch1000", "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer" ] } ] }
  6. Choisissez Suivant.

  7. Sur la page Vérifier et créer, dans Nom de la politique, entrez le nom de la politique (par exemple, CrossGluePolicyForBorrowerRole).

  8. Choisissez Créer une politique.

  9. Dans le panneau de navigation, choisissez Roles (Rôles).

  10. Sélectionnez Create role (Créer un rôle).

  11. Sur la page Sélectionner une entité de confiance, choisissez Compte AWS, puis Suivant.

  12. Sur la page Ajouter des autorisations, entrez le nom de la politique que vous avez créée dans la zone de recherche (par exemple, CrossGluePolicyForBorrowerRole).

  13. Cochez la case en regard du nom de la politique, puis choisissez Suivant.

  14. Sur la page Name, review, and create (Nommer, réviser et créer) pour le Role name (nom de rôle), saisissez un nom de rôle (par exemple CrossGlueBorrowerRole).

  15. Sélectionnez Créer un rôle.

Étape 1b : Création d’une politique de propriétaire pour accorder à l’emprunteur l’accès à AWS Glue

Pour accorder au rôle d’emprunteur l’accès à AWS Glue depuis le compte propriétaire (999999999999), vous pouvez utiliser la console AWS Glue ou l’opération d’API AWS Glue PutResourcePolicy. La procédure suivante utilise la console AWS Glue.

Octroi de l'accès AWS Glue au compte emprunteur à partir du propriétaire
  1. Connectez-vous à la console AWS Glue à l’adresse https://console.aws.amazon.com/glue/ depuis le compte propriétaire.

  2. Dans le panneau de navigation, développez Catalogue de données, puis choisissez Paramètres du catalogue.

  3. Dans Autorisations, saisissez une politique telle que la suivante. Pour rolename, entrez le rôle créé par l’emprunteur à l’étape 1a (par exemple, CrossGlueBorrowerRole). Si vous voulez augmenter la portée de l'autorisation, vous pouvez utiliser le caractère générique * pour les types de ressources base de données et table.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::666666666666:user/username", "arn:aws:iam::666666666666:role/rolename" ] }, "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:999999999999:catalog", "arn:aws:glue:us-east-1:999999999999:database/tpch1000", "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer" ] } ] }

Une fois la procédure terminée, il est recommandé d’utiliser l’API AWS Glue pour effectuer quelques tests d’appel intercompte afin de vérifier que les autorisations sont correctement configurées.

Étape 2 : l'emprunteur enregistre le AWS Glue Data Catalog qui appartient au compte propriétaire

La procédure suivante vous montre comment utiliser la console Athena pour configurer le AWS Glue Data Catalog dans le compte Amazon Web Services propriétaire en tant que source de données. Pour obtenir des informations sur l'utilisation des opérations API au lieu de la console pour enregistrer le catalogue, consultez (Facultatif) Utilisation de l’API pour enregistrer un catalogue de données Athena appartenant au compte propriétaire.

Enregistrer un AWS Glue Data Catalog appartenant à un autre compte
  1. Ouvrez la console Athena à l’adresse https://console.aws.amazon.com/athena/.

  2. Si le panneau de navigation de la console n'est pas visible, choisissez le menu d'extension sur la gauche.

    Choisissez le menu d'expansion.
  3. Développez Administration, puis choisissez Sources de données.

  4. Dans le coin supérieur droit, choisissez Create data source (Créer une source de données).

  5. Sur la pageChoisir une source de données, dans Sources de données, choisissez S3 - AWS Glue Data Catalog, puis Suivant.

  6. Sur la page Enter data source details (Saisir les détails de la source de données), dans la section AWS Glue Data Catalog, pour Choisir un AWS Glue Data Catalog, choisissez AWS Glue Data Catalog dans un autre compte.

  7. Pour Data source details (Détails de la source de données), saisissez les informations suivantes :

    • Data source name (Nom de la source de données) – Saisissez le nom que vous souhaitez utiliser dans vos requêtes SQL pour faire référence au catalogue de données dans l'autre compte.

    • Description – (Facultative) Saisissez une description du catalogue de données dans l'autre compte.

    • ID du catalogue – Saisissez l'ID de compte Amazon Web Services à 12 chiffres du compte auquel appartient le catalogue de données. L'ID de compte Amazon Web Services est l'ID de catalogue.

  8. (Facultatif) Développez Identifications, saisissez les paires clé-valeur que vous voulez associer à la source de données. Pour en savoir plus sur les identifications, consultez Balisage des ressources Athena.

  9. Choisissez Suivant.

  10. Sur la page Review and create (Vérifier et créer), vérifiez les informations que vous avez fournies, puis choisissez Create data source (Créer une source de données). La page Data source details (Détails de la source de données) répertorie les bases de données et les balises du catalogue de données que vous avez enregistré.

  11. Sélectionnez Sources de données et catalogues. Le catalogue de données que vous avez enregistré est répertorié dans la colonne Data source name (Nom de la source de données).

  12. Pour afficher ou modifier les informations relatives au catalogue de données, choisissez le catalogue, puis choisissez Actions, Edit (Modifier).

  13. Pour supprimer le nouveau catalogue de données, choisissez le catalogue, puis choisissez Actions, Delete (Supprimer).

Étape 3 : l'emprunteur soumet une requête

L’emprunteur soumet une requête faisant référence au catalogue à l’aide de la syntaxe catalog.database.table, comme illustré dans l’exemple suivant :

SELECT * FROM ownerCatalog.tpch1000.customer

Au lieu d’utiliser la syntaxe complète, il peut également spécifier le catalogue de manière contextuelle à l’aide de QueryExecutionContext.

(Facultatif) Configuration d’autorisations Amazon S3 supplémentaires

  • Si le compte emprunteur utilise une requête Athena pour écrire de nouvelles données dans une table du compte propriétaire, le propriétaire n’aura pas automatiquement accès à ces données dans Amazon S3, même si la table se trouve dans son compte. En effet, sauf configuration contraire, l’emprunteur est le propriétaire d’objet des informations dans Amazon S3. Pour accorder au propriétaire l’accès aux données, définissez les autorisations sur les objets en conséquence lors d’une étape supplémentaire.

  • Certaines opérations DDL inter-comptes comme MSCK REPAIR TABLE nécessitent des autorisations Simple Storage Service (Amazon S3). Par exemple, si le compte emprunteur effectue une opération MSCK REPAIR intercompte sur une table du compte propriétaire dont les données se trouvent dans un compartiment S3 du compte propriétaire, ce compartiment doit accorder des autorisations au rôle assumé par l’emprunteur pour que la requête aboutisse.

Pour plus d'informations sur l'octroi des autorisations de compartiment, consultez la section Comment je définir les autorisations de compartiment ACL ? du Guide de l'utilisateur Amazon Simple Storage Service.

(Facultatif) Utilisation dynamique d’un catalogue

Dans certains cas, vous souhaitez peut-être effectuer rapidement des tests sur un catalogue AWS Glue inter-comptes sans passer par l'étape préalable de l'enregistrement. Vous pouvez effectuer dynamiquement des requêtes inter-comptes sans créer l'objet ressource DataCatalog si les autorisations IAM et Simple Storage Service (Amazon S3) requises sont correctement configurées comme décrit précédemment dans ce document.

Pour référencer explicitement un catalogue sans enregistrement, utilisez la syntaxe de l'exemple suivant :

SELECT * FROM "glue:arn:aws:glue:us-east-1:999999999999:catalog".tpch1000.customer

Utilisez le format « glue:<arn> », où <arn> est l'ARN AWS Glue Data Catalog que vous voulez utiliser. Dans l'exemple, Athena utilise cette syntaxe pour pointer dynamiquement vers le catalogue de données AWS Glue du compte 999999999999 comme si vous aviez créé séparément un objet DataCatalog pour celui-ci.

Remarques sur l'utilisation des catalogues dynamiques

Lorsque vous utilisez des catalogues dynamiques, rappelez-vous les points suivants.

  • L'utilisation d'un catalogue dynamique nécessite les autorisations IAM que vous utilisez normalement pour les opérations de l'API Athena Data Catalog (Catalogue de données Athena). La principale différence est que le nom de la ressource Data Catalog (Catalogue de données) suit la convention d'appellation glue:*.

  • L'ARN du catalogue doit appartenir à la même région que celle où la requête est exécutée.

  • Lorsqu'un catalogue dynamique est utilisé dans une requête ou une vue DML, il doit être entouré de guillemets doubles échappés (\"). Lorsqu'un catalogue dynamique est utilisé dans une requête DDL, il doit être entouré de guillemets simples inversés (`).

(Facultatif) Utilisation de l’API pour enregistrer un catalogue de données Athena appartenant au compte propriétaire

Au lieu d'utiliser la console Athena comme décrit à l'étape 2, il est possible d'utiliser les opérations API pour enregistrer le catalogue de données appartenant au compte propriétaire.

Le créateur de la ressource Athena DataCatalog doit disposer des autorisations nécessaires pour exécuter l'opération API CreateDataCatalog d'Athena. En fonction de vos besoins, l'accès à des opérations API supplémentaires peut être nécessaire. Pour de plus amples informations, consultez Exemple de politiques de catalogue de données.

Le corps de requête CreateDataCatalog suivant enregistre un catalogue AWS Glue pour un accès inter-comptes :

# Example CreateDataCatalog request to register a cross-account Glue catalog: { "Description": "Cross-account Glue catalog", "Name": "ownerCatalog", "Parameters": {"catalog-id" : "999999999999" # Owner's account ID }, "Type": "GLUE" }

L'exemple de code suivant utilise un client Java pour créer l'objet DataCatalog.

# Sample code to create the DataCatalog through Java client CreateDataCatalogRequest request = new CreateDataCatalogRequest() .withName("ownerCatalog") .withType(DataCatalogType.GLUE) .withParameters(ImmutableMap.of("catalog-id", "999999999999")); athenaClient.createDataCatalog(request);

Après ces étapes, l'emprunteur devrait voir le ownerCatalog lorsqu'il appelle l'opération API ListDataCatalogs.

Ressources supplémentaires