Configurez une intégration au catalogue pour AWS Glue Iceberg REST

Suivez les étapes de cette rubrique pour créer une intégration de catalogue pour le point de terminaison REST Iceberg AWS Glue avec l’authentification `Signature Version 4 (SigV4)<https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html>`_.

Étape 1 : Configurer des autorisations d’accès pour le catalogue de données AWS Glue

Créez une politique IAM pour que Snowflake puisse accéder au catalogue de données AWS Glue. Attachez la politique à un rôle IAM, que vous spécifiez lors de la création d’une intégration au catalogue. Pour des instructions, voir Création de politiques IAM et Modification d’une politique d’autorisations de rôle dans le Guide de l’utilisateur IAM (Identity and Access Management - Gestion de l’identité et de l’accès) AWS.

Exemple de politique en lecture seule

Au minimum, Snowflake requiert les autorisations suivantes sur le catalogue de données Glue AWS pour accéder aux informations utilisant le catalogue Glue Iceberg REST.

  • glue:GetCatalog

  • glue:GetDatabase

  • glue:GetDatabases

  • glue:GetTable

  • glue:GetTables

L’exemple de politique suivant (au format JSON) fournit les autorisations nécessaires pour pouvoir accéder à toutes les tables d’une base de données spécifique.

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "AllowGlueCatalogTableAccess",
         "Effect": "Allow",
         "Action": [
           "glue:GetCatalog",
           "glue:GetDatabase",
           "glue:GetDatabases",
           "glue:GetTable",
           "glue:GetTables"
         ],
         "Resource": [
            "arn:aws:glue:*:<accountid>:table/*/*",
            "arn:aws:glue:*:<accountid>:catalog",
            "arn:aws:glue:*:<accountid>:database/<database-name>"
         ]
      }
   ]
}
Copy

Note

  • Vous pouvez modifier l’élément Resource de cette politique pour restreindre davantage les ressources autorisées (par exemple, le catalogue, les bases de données ou les tables). Pour plus d’informations, voir Types de ressource définis par AWS Glue

  • Si vous utilisez le chiffrement pour AWS Glue, vous devez modifier la politique pour ajouter des autorisations Key Management Service AWS (AWSKMS). Pour plus d’informations, voir Configuration du chiffrement dans AWS Glue.

Lire et écrire des exemples de politiques

L’exemple de stratégie suivant (au format JSON) fournit les autorisations nécessaires pour l’accès en lecture et en écriture à toutes les tables de toutes les bases de données. Pour configurer l’accès en écriture pour les tables gérées en externe, utilisez cette stratégie comme exemple.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGlueCatalogTableAccess",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "glue:GetCatalog",
        "glue:GetDatabase",
        "glue:GetDatabases",
        "glue:CreateDatabase",
        "glue:DeleteDatabase",
        "glue:GetTable",
        "glue:GetTables",
        "glue:CreateTable",
        "glue:UpdateTable",
        "glue:DeleteTable"
      ],
      "Resource": [
        "arn:aws:glue:*:<accountid>:table/*/*",
        "arn:aws:glue:*:<accountid>:catalog",
        "arn:aws:glue:*:<accountid>:database/*",
        "arn:aws:s3:<external_volume_path>"
      ]
    }
  ]
}
Copy

Note

  • La stratégie doit donner accès à votre emplacement de stockage afin que le catalogue AWS Glue puisse écrire les métadonnées à l’emplacement de la table.

  • La ligne "arn:aws:glue:*:<accountid> :database/*" dans l’élément Resource de cette politique spécifie toutes les bases de données. Ceci est requis si vous souhaitez créer une nouvelle base de données dans Glue depuis Snowflake avec la commande CREATESCHEMA. Pour limiter l’accès à une seule base de données, vous pouvez spécifier la base de données par son nom. Pour plus d’informations sur la définition des ressources, voir Types de ressources définis par AWS Glue.

  • Si vous utilisez le chiffrement pour AWS Glue, vous devez modifier la politique pour ajouter des autorisations Key Management Service AWS (AWSKMS). Pour plus d’informations, voir Configuration du chiffrement dans AWS Glue.

(Facultatif) Configurer le contrôle d’accès à Lake Formation

Si vous utilisez AWS Lake Formation pour un contrôle d’accès détaillé, assurez-vous que votre configuration Lake Formation permet à Snowflake d’accéder aux objets de votre catalogue et aux données sous-jacentes.

Le rôle IAMque vous avez créé à l’étape précédente (le rôle que vous spécifiez dans Snowflake lors de la création d’une intégration de catalogue) doit disposer de l’autorisation:code:`lakeformation:GetDataAccess`IAM. Cette autorisation accorde un accès en lecture et en écriture aux données sous-jacentes :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lakeformation:GetDataAccess",
            "Resource": "*"
        }
    ]
}
Copy

Pour plus d’informations, consultez la section Contrôle d’accès aux données sous-jacent dans la documentation de Lake Formation.

Vous devez également accorder des autorisations de données au rôle IAM. La méthode que vous utilisez pour accorder des autorisations de données dépend de la configuration de votre formation Lake. Par exemple, vous pouvez utiliser la méthode des ressources nommées pour accorder des autorisations aux objets AWS Glue, ou bien utiliser le contrôle d’accès basé sur des balises. Pour plus d’informations et d’instructions, consultez la `documentation d’AWS Lake Formation<https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html>`_.

Étape 2 : Créer une intégration de catalogue dans Snowflake

Créez une intégration au catalogue pour le point de terminaison AWS Glue Iceberg REST à l’aide de la commande CREATE CATALOG INTEGRATION (Apache Iceberg™ REST). Indiquez le rôle IAM que vous avez configuré. Pour CATALOG_NAME, utilisez l’AWS de votre compte ID.

CREATE CATALOG INTEGRATION glue_rest_catalog_int
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = 'rest_catalog_integration'
  REST_CONFIG = (
    CATALOG_URI = 'https://glue.us-west-2.amazonaws.com/iceberg'
    CATALOG_API_TYPE = AWS_GLUE
    CATALOG_NAME = '123456789012'
  )
  REST_AUTHENTICATION = (
    TYPE = SIGV4
    SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my-role'
    SIGV4_SIGNING_REGION = 'us-west-2'
  )
  ENABLED = TRUE;
Copy

Où :

  • CATALOG_URI est le point de terminaison du service pour le catalogue AWS Glue Iceberg REST.

  • CATALOG_NAME est l’ID de votre compte AWS.

Pour plus d’informations, voir CREATE CATALOG INTEGRATION (Apache Iceberg™ REST), où vous trouverez des instructions sur la configuration d’une intégration de catalogue pour AWS Glue.

Étape 3 : Récupérer l’utilisateur IAM AWS et l’ID externe de votre compte Snowflake

Pour récupérer des informations sur l’utilisateur AWSIAM et l’ID externe de votre compte Snowflake, exécutez la commande:doc:/sql-reference/sql/desc-catalog-integration. Vous fournissez ces informations à AWS dans la section suivante afin d’établir une relation de confiance.

DESCRIBE CATALOG INTEGRATION glue_rest_catalog_int;
Copy

Notez les valeurs suivantes :

Valeur

Description

GLUE_AWS_IAM_USER_ARN

Utilisateur IAM AWS créé pour votre compte Snowflake, par exemple, arn:aws:iam::123456789001:user/abc1-b-self1234. Snowflake provisionne un seul utilisateur IAM pour l’intégralité de votre compte Snowflake. Toutes les intégrations de catalogue Glue de votre compte utilisent cet utilisateur IAM.

GLUE_AWS_EXTERNAL_ID

Un ID externe pour établir une relation de confiance.

Étape 4 : Accordez à l’utilisateur IAM l’accès au **catalogue de données AWS Glue.

Mettez à jour la politique de confiance pour le même rôle IAM que celui que vous avez spécifié avec l’ARN lors de la création de l’intégration de catalogue (GLUE_AWS_ROLE_ARN). Ajoutez à la politique de confiance les valeurs que vous avez enregistrées à l’étape précédente.

Pour des instructions, voir Modification d’une politique de confiance.

L’exemple de stratégie suivant montre où spécifier les valeurs GLUE_AWS_IAM_USER_ARN et GLUE_AWS_EXTERNAL_ID :

{
   "Version": "2012-10-17",
   "Statement": [
      {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
         "AWS": "<glue_iam_user_arn>"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
         "StringEquals": {
            "sts:ExternalId": "<glue_aws_external_id>"
         }
      }
      }
   ]
}
Copy

Où :

  • glue_iam_user_arn est la valeur GLUE_IAM_USER_ARN que vous avez enregistrée.

  • glue_aws_external_id est la valeur GLUE_AWS_EXTERNAL_ID que vous avez enregistrée.

Note

  • Pour des raisons de sécurité, si vous créez une nouvelle intégration de catalogue (ou si vous recréez une intégration de catalogue existante à l’aide de la syntaxe CREATEORREPLACECATALOGINTEGRATION), la nouvelle intégration de catalogue possède un ID externe différent et ne peut pas résoudre la relation de confiance, sauf si vous modifiez la stratégie de confiance avec le nouvel ID externe.

  • Pour vérifier que vos autorisations sont correctement configurées, créez une table Iceberg qui utilise cette intégration de catalogue. Snowflake ne vérifie pas que vos autorisations sont correctement définies tant que vous n’avez pas créé de table Iceberg qui référence cette intégration de catalogue.

Prochaines étapes

Après avoir configuré une intégration de catalogue pour REST Iceberg AWS Glue, vous pouvez créer une table Iceberg.