Accès entre comptes aux catalogues de données AWS Glue - 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.

Accès entre comptes aux catalogues de données AWS Glue

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

Pour plus d'informations sur l'accès multicompte dans AWS Glue, consultez la section Octroi d'un accès multicompte dans le guide du AWS Glue développeur.

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 AWS Glue catalogue entre comptes Athena présente les limites suivantes :

  • Cette fonctionnalité n'est disponible que Régions AWS lorsque la version 2 ou ultérieure du moteur Athena 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 un autre compte sur votre compte, vous créez une DataCatalog ressource régionale liée aux données de l'autre compte dans cette région en particulier uniquement. AWS Glue Data Catalog

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

  • Les catalogues chiffrés à l'aide de clés AWS gérées ne peuvent pas être consultés sur plusieurs comptes. Pour les catalogues que vous souhaitez interroger sur plusieurs comptes, utilisez plutôt des clés gérées par le client (KMS_CMK). Pour plus d'informations sur les différences entre les clés gérées par le client et les clés AWS gérées, consultez la section Clés et AWS clés client dans le guide du AWS Key Management Service développeur.

Premiers pas

Dans le scénario suivant, le compte « emprunteur » (666666666666) souhaite exécuter une SELECT requête faisant référence au AWS Glue catalogue appartenant au compte « propriétaire » (99999999999999), comme dans l'exemple suivant :

SELECT * FROM ownerCatalog.tpch1000.customer

Dans la procédure suivante, les étapes 1a et 1b montrent comment donner au compte emprunteur l'accès aux AWS Glue ressources du compte propriétaire, tant du côté de l'emprunteur que du côté du propriétaire. 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éer un rôle d'emprunteur avec une politique d'accès aux ressources du AWS Glue propriétaire

Pour créer un rôle de compte d'emprunteur avec une politique d'accès aux AWS Glue ressources 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 permettant d'accéder aux ressources du AWS Glue compte propriétaire
  1. Connectez-vous à la console IAM à l'adresse https://console.aws.amazon.com/iam/ depuis le compte de l'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. Dans l'éditeur de stratégie, entrez la politique suivante, puis modifiez-la en fonction de vos besoins :

    { "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 Réviser et créer, dans Nom de la politique, entrez le nom de la stratégie (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 cliquez sur Suivant.

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

  13. Cochez la case à côté du nom de la politique, puis choisissez Next.

  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éer une politique du propriétaire pour accorder AWS Glue l'accès à l'emprunteur

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

Pour autoriser le propriétaire à AWS Glue accéder au compte de l'emprunteur
  1. Connectez-vous à la AWS Glue console à l'adresse https://console.aws.amazon.com/glue/ depuis le compte du 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.

    { "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 que vous aurez terminé, nous vous recommandons d'utiliser l'AWS Glue API pour effectuer des tests d'appels entre comptes afin de confirmer que les autorisations sont configurées comme prévu.

Étape 2 : L'emprunteur enregistre le AWS Glue Data Catalog compte qui appartient au 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 Utilisation de l'API pour enregistrer un catalogue de données Athena appartenant au compte propriétaire.

Pour enregistrer un compte 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 page Choisir une source de données, pour Sources de données, sélectionnez S3 - AWS Glue Data Catalog, puis Next.

  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 Étiquetage 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. Choisissez Sources de données. 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 qui fait référence au catalogue à l'aide du catalogue. base de données. syntaxe de table, comme dans l'exemple suivant :

SELECT * FROM ownerCatalog.tpch1000.customer

Au lieu d'utiliser la syntaxe complète, l'emprunteur peut également spécifier le catalogue de manière contextuelle en le transmettant via le. QueryExecutionContext

Autorisations supplémentaires Simple Storage Service (Amazon S3)

  • 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 existe dans le compte du propriétaire. Cela est dû au fait que l'emprunteur est le propriétaire de l'objet des informations dans Amazon S3, sauf configuration contraire. Pour accorder au propriétaire l'accès aux données, définissez les autorisations sur les objets en conséquence dans le cadre 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 MSCK REPAIR opération entre comptes 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.

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 AWS Glue données du compte 999999999999, comme si vous aviez créé un objet distinct pour celui-ci. DataCatalog

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 (`).

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 DataCatalogressource Athena doit disposer des autorisations nécessaires pour exécuter l'opération d'API CreateDataCatalogAthena. En fonction de vos besoins, l'accès à des opérations API supplémentaires peut être nécessaire. Pour plus d’informations, consultez Exemple de politiques de catalogue de données.

Le corps de CreateDataCatalog demande suivant enregistre un AWS Glue catalogue pour un accès entre 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 ownerCatalog quand il appelle l'opération ListDataCatalogsAPI.

Ressources supplémentaires