Activation des requêtes fédérées entre comptes - Amazon Athena

Activation des requêtes fédérées entre comptes

La requête fédérée vous permet d'interroger des sources de données autres qu'Amazon S3 à l'aide de connecteurs de source de données déployés sur AWS Lambda. La fonction de requête fédérée entre comptes permet à la fonction Lambda et aux sources de données à interroger d'être localisées dans différents comptes.

Note

Utilisez cette méthode uniquement si vous n’avez pas enregistré votre source de données fédérée auprès du AWS Glue Data Catalog. Si vous avez enregistré votre source de données auprès du AWS Glue Data Catalog, utilisez les fonctionnalités entre comptes et le modèle d’autorisations du AWS Glue Data Catalog. Pour plus d’informations, consultez Granting cross-account access dans le Guide d’utilisation d’AWS Glue.

En tant qu'administrateur de données, vous pouvez activer les requêtes fédérées entre comptes en partageant votre connecteur de données avec le compte d'un analyste de données ou, en tant qu'analyste de données, en utilisant un ARN Lambda partagé d'un administrateur de données pour l'ajouter à votre compte. Lorsque des modifications de configuration sont apportées à un connecteur du compte d'origine, la configuration mise à jour est automatiquement appliquée aux instances partagées du connecteur dans les comptes d'autres utilisateurs.

Considérations et restrictions

  • La fonction de requête fédérée entre comptes est disponible pour les connecteurs de données de métastores non Hive qui utilisent une source de données Lambda.

  • La fonction n'est pas disponible pour les types de source de données AWS Glue Data Catalog. Pour plus d'informations sur l'accès entre comptes aux catalogues de données AWS Glue Data Catalog, consultez Configuration de l’accès intercompte aux catalogues de données AWS Glue.

  • Si la réponse de la fonction Lambda de votre connecteur dépasse la limite de taille de réponse Lambda de 6 Mo, Athena chiffre, regroupe et déverse automatiquement la réponse dans un compartiment Amazon S3 que vous configurez. L'entité qui exécute la requête Athena doit avoir accès à l'emplacement du déversement pour qu'Athéna puisse lire les données déversées. Nous vous recommandons de définir une politique de cycle de vie Amazon S3 afin de supprimer les objets présents sur le lieu du déversement, car les données ne sont plus nécessaires une fois la requête terminée.

  • L'utilisation de requêtes fédérées entre les Régions AWS n'est pas prise en charge.

Autorisations requises

Pour configurer les autorisations requises, des actions doivent être effectuées à la fois dans le compte A (444455556666) et dans le compte B (111122223333).

Actions relatives au compte A

Pour que le compte administrateur de données A partage une fonction Lambda avec le compte d'analyste de données B, le compte B nécessite la fonction d'invocation Lambda et l'accès au compartiment de déversement. Par conséquent, le compte A devrait ajouter une politique basée sur les ressources à la fonction Lambda et l'accès principal à son compartiment de déversement dans Amazon S3.

  1. La politique suivante accorde des autorisations de fonction d'invocation Lambda au compte B sur une fonction Lambda dans le compte A.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "CrossAccountInvocationStatement", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/username" ] }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:444455556666:function:lambda-function-name" } ] }
  2. La politique suivante permet d'accéder au compartiment de déversement au principal dans le compte B.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::111122223333:user/username"] }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::spill-bucket", "arn:aws:s3:::spill-bucket/*" ] } ] }
  3. Si la fonction Lambda chiffre le compartiment de déversement avec une clé AWS KMS au lieu du chiffrement par défaut proposé par le SDK de fédération, la politique de clé AWS KMS du compte A doit accorder l'accès à l'utilisateur du compte B, comme dans l'exemple suivant.

    { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::account-B-id:user/username"] }, "Action": [ "kms:Decrypt" ], "Resource": "*" // Resource policy that gets placed on the KMS key. }

Actions relatives au compte B

Pour que le compte A puisse partager son connecteur avec le compte B, ce dernier doit créer un rôle appelé AthenaCrossAccountCreate-account-A-id que le compte A assume en appelant l'action d'API AWS Security Token Service AssumeRole.

  1. Utilisez la console IAM ou l’AWS CLI pour créer le rôle AthenaCrossAccountCreate-account-A-id en tant que rôle de politique d’approbation personnalisée. Une politique d’approbation personnalisée délègue l’accès et autorise d’autres personnes à effectuer des actions dans votre compte AWS. Pour connaître les étapes à suivre, consultez Create a role using custom trust policies dans le Guide d’utilisation d’IAM.

    La relation de confiance doit comporter un objet principal, dans lequel la clé est AWS et la valeur est l’ARN du compte A, comme illustré dans l’exemple suivant.

    ... "Principal": { "AWS": ["arn:aws:iam::account-A-id:user/username"] }, ...
  2. Créez également dans le compte B une politique semblable à la suivante qui autorise l’action CreateDataCatalog.

    { "Effect": "Allow", "Action": "athena:CreateDataCatalog", "Resource": "arn:aws:athena:*:account-B-id:datacatalog/*" }
  3. Ajoutez la politique qui autorise l’action CreateDataCatalog au rôle AthenaCrossAccountCreate-account-A-id que vous avez créé à l’aide du compte B.

Partage d'une source de données dans le compte A avec le compte B

Une fois les autorisations en place, vous pouvez utiliser la page Sources de données et catalogues dans la console Athena pour partager un connecteur de données de votre compte (compte A) avec un autre compte (compte B). Le compte A conserve le contrôle total et la propriété du connecteur. Lorsque le compte A modifie la configuration du connecteur, la configuration mise à jour s'applique au connecteur partagé dans le compte B.

Note

Vous pouvez uniquement partager une source de données de type Lambda et ne pouvez pas partager des sources de données utilisant des connexions AWS Glue. Pour de plus amples informations, consultez Connecteurs de source de données disponibles.

Pour partager une source de données Lambda du compte A avec le compte B
  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. Sélectionnez Sources de données et catalogues.

  4. Sur la page Sources de données et catalogues, sélectionnez le lien du connecteur que vous souhaitez partager.

  5. Sur la page des détails d’une source de données Lambda, sélectionnez Partager dans le menu Actions situé dans le coin supérieur droit.

  6. Dans la boîte de dialogue Partager Lambda-name avec un autre compte ?, saisissez les informations requises.

    • Pour Data source name (Nom de la source de données), saisissez le nom de la source de données copiée telle que vous souhaitez qu'elle apparaisse dans l'autre compte.

    • Pour Account ID (ID de compte), saisissez l'ID du compte avec lequel vous souhaitez partager votre source de données (dans ce cas, compte B).

  7. Choisissez Partager. Le connecteur de données partagées que vous avez spécifié est créé dans le compte B. Les modifications de configuration apportées au connecteur dans le compte A s'appliquent au connecteur du compte B.

Ajout d'une source de données partagée du compte A au compte B

En tant qu'analyste de données, un administrateur de données peut vous attribuer l'ARN d'un connecteur à ajouter à votre compte. Vous pouvez utiliser la page Sources de données et catalogues de la console Athena pour ajouter l’ARN Lambda fourni par votre administrateur à votre compte.

Pour ajouter l'ARN Lambda d'un connecteur de données partagées à votre compte
  1. Ouvrez la console Athena à l’adresse https://console.aws.amazon.com/athena/.

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

  3. Sélectionnez Sources de données et catalogues.

  4. Sur la page Sources de données et catalogues, sélectionnez Créer une source de données.

  5. Sur la page Choisir une source de données, sélectionnez Connecteur personnalisé ou partagé.

  6. Choisissez Suivant.

  7. Sur la page Saisir les détails de la source de données, dans la section Détails de la connexion, dans Sélectionnez ou saisissez une fonction Lambda, saisissez l’ARN Lambda du compte A.

  8. Choisissez Suivant.

  9. Sur la page Vérifier et créer, sélectionnez Créer une source de données.

Résolution des problèmes

Si vous recevez un message d'erreur indiquant que le compte A ne dispose pas des autorisations nécessaires pour assumer un rôle dans le compte B, assurez-vous que le nom du rôle créé dans le compte B est correctement orthographié et que la politique appropriée est attachée.