Comment puis-je fournir un accès intercompte aux ressources du catalogue de données AWS Glue ?

Lecture de 8 minute(s)
0

Je souhaite utiliser des services tels qu'Amazon EMR, Amazon Athena et AWS Glue, avec le catalogue de données AWS Glue d’un autre compte.

Résolution

La manière dont vous accédez aux ressources intercompte dans le catalogue de données AWS Glue dépend du service AWS utilisé pour vous connecter. Cette méthode d'accès dépend également de l'utilisation ou non d'AWS Lake Formation pour contrôler l'accès au catalogue de données.

Si vous ne savez pas si vous utilisez Lake Formation et que vous souhaitez partager une table, exécutez la commande de l'interface de ligne de commande AWS (AWS CLI) suivante :

aws glue get-table --database-name DOC-EXAMPLE-DB --name DOC-EXAMPLE-TABLE --query 'Table.IsRegisteredWithLakeFormation'

Veillez à remplacer les valeurs suivantes dans cette commande :

  • DOC-EXAMPLE-DB avec le nom de la base de données
  • DOC-EXAMPLE-TABLE par le nom de votre table

Si la commande renvoie true, cela signifie que vous utilisez Lake Formation.

Remarque : Si vous recevez des messages d’erreurs lors de l’exécution des commandes de l’AWS CLI, vérifiez que vous utilisez bien la version la plus récente de l’AWS CLI.

Le catalogue de données peut se trouver dans un environnement hybride, où certaines tables utilisent Lake Formation et d'autres les autorisations AWS Glue. Pour mettre à niveau votre catalogue de données vers Lake Formation, consultez la section Mise à niveau des autorisations de données AWS Glue vers le modèle AWS Lake Formation.

Remarque : Cet article décrit les options de solution pour l'accès intercompte au sein d'une même région AWS. L'accès aux ressources d'une autre région dépasse le cadre de cet article. Pour répliquer le catalogue de données de votre compte vers un compte d'une autre région AWS, consultez la page Utilitaire de réplication AWS Glue Data Catalog sur GitHub.

Accès au catalogue de données sans Lake Formation

Si vous n'utilisez pas Lake Formation, procédez comme suit pour accorder des autorisations au niveau des ressources au compte A à partir du catalogue de données AWS Glue du compte B.

Remarque : Le compte A est le compte d'extraction, de transformation et de chargement (ETL) et le compte B est le compte sur lequel se trouvent les ressources du catalogue de données AWS Glue.

Accès aux ressources à l'aide d'une tâche ETL AWS Glue

1.    Associez une politique de ressources similaire à la politique suivante dans le compte B. Cela permet au compte A d’accéder aux bases de données et tables du compte B. Vous pouvez associer la politique à l’aide de la console AWS Glue en sélectionnant Paramètres du catalogue dans le volet de navigation.

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

Veillez à remplacer les valeurs suivantes dans cette politique :

  • 1111222233334444 avec l'identifiant du compte A
  • 5555666677778888 avec l'identifiant du compte B
  • us-east-1 avec la région de votre choix
  • DOC-EXAMPLE-DB avec le nom de la base de données

Vous pouvez également limiter l'accès à un rôle spécifique dans le compte A utilisé pour exécuter la tâche. Pour ce faire, incluez l'ARN du rôle dans la politique. 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/*"
      ]
    }
  ]
}

Veillez à remplacer les valeurs suivantes dans cette politique :

  • 1111222233334444 par l'identifiant du compte A
  • 5555666677778888 par l'identifiant du compte B
  • us-east-1 par la région de votre choix
  • DOC-EXAMPLE-DB par le nom de la base de données
  • AWSGlueServiceRole-Glue-Test par l'ARN du rôle utilisé pour exécuter la tâche ETL

2.    L'utilisateur AWS Identity and Access Management (IAM) du compte A qui exécute la tâche ETL doit accéder aux bases de données et aux tables du compte B. Dans le compte A, associez une politique IAM au rôle IAM de la tâche ETL AWS Glue pour accéder à la base de données et aux tables du compte B :

{
  "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 : Si vous utilisez Amazon Athena avec le catalogue de données AWS Glue, incluez la base de données par défaut dans la politique. Cela garantit la réussite des actions GetDatabase et CreateDatabase. Pour plus d'informations, consultez la section Politique d'accès à la base de données et au catalogue par défaut par région AWS.

Veillez à remplacer les valeurs suivantes dans cette politique :

  • 1111222233334444 par l'identifiant du compte A
  • 5555666677778888 par l'identifiant du compte B
  • us-east-1 par la région de votre choix
  • DOC-EXAMPLE-DB par le nom de la base de données

3.    Après avoir fourni l'autorisation requise au compte A, vous pouvez tester si le compte A a accès au catalogue de données du compte B. Pour cela, créez une tâche ETL avec le script suivant :

"""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()

Veillez à remplacer les valeurs suivantes dans le script :

  • 5555666677778888 par l'identifiant du compte B
  • DOC-EXAMPLE-DB par le nom de la base de données
  • DOC-EXAMPLE-TABLE par le nom de votre table

Accès aux ressources avec Amazon EMR

Pour accéder au catalogue de données depuis un autre compte Amazon EMR, consultez la section Comment utiliser Hive et Spark sur Amazon EMR pour interroger un catalogue de données AWS Glue qui se trouve dans un autre compte AWS ?

Accès aux ressources avec Athena

Pour accéder au catalogue de données dans un autre compte avec Athena, consultez la section Accès intercompte aux catalogues de données AWS Glue.

Accès au catalogue de données avec Lake Formation

Si vous utilisez Lake Formation, vous pouvez utiliser l'une des méthodes suivantes pour accorder un accès intercompte au catalogue de données :

  • Ressource nommée
  • Contrôle d'accès basé sur les identifications (TBAC)

Important : Pour empêcher que les nouvelles tables du catalogue de données ne disposent d'une autorisation Super par défaut pour IAMAllowedPrincipals, procédez comme suit :

1.    Ouvrez la console AWS Lake Formation.

2.    Dans le volet de navigation, sélectionnez Catalogue de données, puis Paramètres.

3.    Désactivez les options Utiliser uniquement le contrôle d'accès IAM pour les nouvelles bases de données et Utiliser uniquement le contrôle d'accès IAM pour les nouvelles tables de cette base de données.

4.    Sélectionnez Enregistrer.

Pour plus d'informations, consultez la section Modification des paramètres de sécurité par défaut de votre lac de données.

Octroi d'autorisations intercompte à l'aide de la méthode des ressources nommées

AWS Resource Access Manager (AWS RAM) est utilisé pour fournir des autorisations de base de données à l'aide de la méthode de ressource nommée.

Pour accorder à Lake Formation des autorisations sur le compte A pour les ressources du catalogue de données du compte B, procédez comme suit :

1.    Associez une politique de ressources similaire à la politique suivante dans le catalogue de données pour le compte B :

{
  "Effect": "Allow",
  "Action": [
    "glue:ShareResource"
  ],
  "Principal": {
    "Service": [
      "ram.amazonaws.com"
    ]
  },
  "Resource": [
    "arn:aws:glue:us-east-1:5555666677778888:table/*/*",
    "arn:aws:glue:us-east-1:5555666677778888:database/*",
    "arn:aws:glue:us-east-1:5555666677778888:catalog"
  ]
}

Assurez-vous de remplacer 5555666677778888 dans la politique par l'ID de compte du compte B.

2.    Utilisez la méthode de ressource nommée pour accorder des autorisations à Lake Formation aux bases de données et aux tables du catalogue de données du compte B. Pour plus d'informations, consultez la section Octroi d'autorisations de catalogue de données à l'aide de la méthode de ressource nommée.

Octroi d'autorisations intercompte à l'aide de TBAC

Avec TBAC, vous pouvez définir des identifications de politique et attribuer ces dernières aux bases de données, tables et colonnes AWS Glue. Ces identifications peuvent ensuite être utilisées pour appliquer un accès précis à ces ressources du catalogue de données. Pour plus d'informations, consultez la section Partage de données à l'aide d'un contrôle d'accès basé sur des identifications.

Pour accorder des autorisations à Lake Formation à l'aide de TBAC, procédez comme suit :

1.    Associez une politique de ressources similaire à la politique suivante dans le catalogue de données pour le compte B :

{
  "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/*",
        "arn:aws:glue:us-east-1:5555666677778888:table/*"
      ],
      "Condition": {
        "Bool": {
          "glue:EvaluatedByLakeFormationTags": true
        }
      }
    }
  ]
}

Assurez-vous de remplacer les valeurs suivantes dans la politique :

  • 1111222233334444 par l'identifiant du compte A
  • 5555666677778888 par l'identifiant du compte B

2.    Créez les identifications de politique.

3.    Utilisez la méthode TBAC pour accorder des autorisations à Lake Formation sur les ressources du catalogue de données. Pour plus d'informations, consultez la section Octroi d'autorisations de catalogue de données à l'aide de la méthode LF-TBAC.


Informations connexes

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 2 ans