Comment puis-je configurer une tâche ETL AWS Glue entre comptes pour les tables à l'aide de stratégie de ressources de catalogue ?

Lecture de 5 minute(s)
0

Je souhaite accéder aux tables du compte A à partir du compte B à l'aide de tâches ETL dans le catalogue de données AWS Glue, sans utiliser AWS Lake Formation.

Brève description

Vous pouvez accéder à plusieurs comptes dans le catalogue de données AWS Glue avec ou sans utiliser AWS Lake Formation. Les sections suivantes décrivent les étapes de configuration permettant d'accéder à un catalogue de plusieurs comptes à l'aide d'AWS Glue uniquement.

Si vous utilisez Lake Formation, consultez la section Partage de données entre comptes dans Lake Formation pour plus d'informations relative à la configuration d'un partage de ressources entre comptes.

**Remarque :**Les étapes décrivent la façon d’accéder à plusieurs comptes au sein d'une même région AWS. Elles ne concernent pas l'accès aux ressources situées dans une autre région AWS.

Résolution

Configurez des stratégies d'accès dans les comptes source et cible

Procédez comme suit pour accorder des autorisations au niveau des ressources du compte B à partir du catalogue de données AWS Glue du compte A.

**Remarque :**Le compte A contient les ressources du catalogue de données AWS Glue et le compte B est le compte ETL (extraction, transformation et chargement). En outre, le compte A contient les modifications de stratégie basées sur les ressources tandis que le compte B contient certaines des modifications de stratégie d'AWS Identity and Access Management (IAM).

Joindre une stratégie relative aux ressources du catalogue au compte A

1.Connectez-vous à la console de gestion AWS.

2.Dans la barre de recherche, recherchez AWS Glue. Sélectionnez Démarrer avec AWS Glue.

3.Dans le panneau de gauche, sélectionnez Paramètres du catalogue.

4.Sous ** Autorisations**, saisissez la stratégie de ressources suivante. Cette stratégie de ressources permet au compte B d'accéder aux bases de données et aux tables du compte A.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::1111222233334444:root"
      },
      "Action": "glue:*",
      "Resource": [
        "arn:aws:glue:us-east-1:5555666677778888:catalog",
        "arn:aws:glue:us-east-1:5555666677778888:database/doc_example_DB",
        "arn:aws:glue:us-east-1:5555666677778888:table/doc_example_DB/*"
      ]
    }
  ]
}

Remarque : Remplacez les valeurs suivantes dans la stratégie :

  • 1111222233334444 avec l'identifiant du compte B
  • 5555666677778888 avec l'identifiant du compte A
  • us-east-1 avec la région de votre choix
  • doc\ _example \ _DBavec le nom de votre base de données

5.(FACULTATIF) Vous pouvez limiter l'accès à un rôle spécifique dans le compte A en incluant Amazon Ressource Name (ARN) du rôle dans la stratégie. Par exemple :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::1111222233334444:role/service-role/AWSGlueServiceRole_Glue_Test"
      },
      "Action": "glue:*",
      "Resource": [
        "arn:aws:glue:us-east-1:5555666677778888:catalog",
        "arn:aws:glue:us-east-1:5555666677778888:database/doc_example_DB",
        "arn:aws:glue:us-east-1:5555666677778888:table/doc_example_DB/*"
      ]
    }
  ]
}

Remarque : Remplacez les valeurs suivantes dans la stratégie :

  • 1111222233334444 avec l'identifiant du compte B
  • 5555666677778888 avec l'identifiant du compte A
  • us-east-1 avec la région de votre choix
  • doc\ _example \ _DBavec le nom de votre base de données
  • AWSGlueServiceRole \ _Glue \ _Test avec l'ARN du rôle utilisé pour exécuter la tâche ETL

Joindre une stratégie IAM au compte B

L'utilisateur IAM du compte B qui exécute la tâche ETL doit accéder aux bases de données et aux tables du compte A.

**Remarque :**Si vous utilisez Amazon Athena avec le catalogue de données, incluez la base de données par défaut dans la stratégie. Cette inclusion garantit le succès des actions ** GetDatabase et **CreateDatabase. Pour plus d'informations, consultez la section Base de données et catalogue par défaut par région AWS.

1. Connectez-vous à la console IAM à l'aide de vos identifiants de connexion AWS.

2.Dans le panneau de gauche, sélectionnez Rôles.

3.Choisissez le nom de rôle que vous utilisez dans le script ETL.

4.Associez une Politique IAM au rôle IAM de la tâche AWS Glue ETL dans le compte B. Cela vous donne accès à la base de données et aux tables du compte A :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase",
        "glue:GetConnection",
        "glue:GetTable",
        "glue:GetPartition"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:5555666677778888:catalog",
        "arn:aws:glue:us-east-1:5555666677778888:database/default",
        "arn:aws:glue:us-east-1:5555666677778888:database/doc_example_DB",
        "arn:aws:glue:us-east-1:5555666677778888:table/doc_example_DB/*"
      ]
    }
  ]
}

Remarque : Remplacez les valeurs suivantes dans la stratégie :

  • 5555666677778888 avec l'identifiant du compte A
  • us-east-1 avec la région de votre choix
  • doc\ _example \ _DBavec le nom de votre base de données

5.Vérifiez que la stratégie que vous avez créée est associée au rôle IAM du compte B.

6.Vérifiez si le compte B a accès au catalogue de données du compte A. Créez une tâche ETL à l'aide des scripts suivants :

Script de cadre dynamique :

df = glueContext.create_dynamic_frame.from_catalog(database="doc_example_DB", table_name="doc_example_table", catalog_id="5555666677778888", region="us-east-1")

Script de bloc de données :

"""Create Spark Session with cross-account AWS Glue Data Catalog"""
from pyspark.sql import SparkSession

spark_session = SparkSession.builder.appName("Spark Glue Example") \
.config("hive.metastore.client.factory.class", \
"com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory") \
.config("hive.metastore.glue.catalogid", "5555666677778888") \
.enableHiveSupport() \
.getOrCreate()

table_df = spark_session.sql("SELECT * FROM doc_example_DB.doc_example_table limit 10")

table_df.show()

Remarque : Remplacez les valeurs suivantes dans la stratégie :

  • 5555666677778888 avec l'identifiant du compte A
  • doc\ _example \ _DBavec le nom de votre base de données
  • doc \ _example \ _table avec le nom de votre table
  • us-east-1 avec la région de votre choix

Informations reliée

Octroi d'un accès à plusieurs comptes

Spécification des ARN des ressources AWS Glue

À propos de la mise à niveau vers le modèle d'autorisations Lake Formation

Migration entre le métastore Hive et le catalogue de données AWS Glue

Stratégies relatives aux ressources AWS Glue pour le contrôle d'accès

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an