View a markdown version of this page

Fédérer pour Snowflake Catalogue Iceberg - AWS Lake Formation

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.

Fédérer pour Snowflake Catalogue Iceberg

AWS Glue Data Catalog se fédère pour Snowflake utiliser les informations d'identification OAuth2 d'un Snowflake principal de service. Vous pouvez utiliser cette fédération pour vous connecter à des Snowflake Polaris catalogues Snowflake Horizon et les consulter. Ce mécanisme d'authentification permet à Data Catalog d'accéder aux métadonnées de divers objets (tels que les catalogues, les bases de données et les tables) de votre catalogue, en fonction des privilèges associés au principal de service. Pour garantir l'accès aux bons objets, il est essentiel d'accorder au responsable du service Snowflake les autorisations nécessaires pour lire les métadonnées de ces objets.

Conditions préalables

Avant de créer un catalogue fédéré dans Data Catalog qui est régi par Lake Formation, assurez-vous de disposer des autorisations suivantes :

Votre principal IAM (utilisateur ou rôle) doit disposer des autorisations suivantes :

  • Autorisations pour la formation de lacs —lakeformation:RegisterResource, lakeformation:DescribeResource

  • AWS Glue autorisations — glue:CreateConnectionglue:CreateCatalog,glue:GetConnection, glue:PassConnection

  • Autorisations du gestionnaire de secrets —secretsmanager:CreateSecret, secretsmanager:GetSecretValue

  • Autorisations IAM —iam:CreateRole, iam:AttachRolePolicy iam:PassRole

Vous devez être administrateur d'un lac de données Lake Formation ou être CREATE_CATALOG autorisé à accéder au catalogue de données

Créer un catalogue fédéré

  1. Connectez-vous à la console et ouvrez la console Lake Formation à l'adresse https://console.aws.amazon.com/lakeformation/.

  2. Choisissez la AWS région préférée dans le sélecteur de région.

  3. Dans le volet de navigation de gauche, choisissez Catalogues.

  4. Choisissez Créer un catalogue pour ouvrir le flux de travail de création d'un catalogue.

  5. Dans l'étape Choisir la source de données, Snowflake sélectionnez l'une des options disponibles.

  6. Dans l'étape Définir les détails du catalogue, vous fournissez trois informations : les détails du catalogue, les détails de connexion et les détails d'enregistrement.

  7. Dans le conteneur de détails du catalogue, donnez un nom unique à votre catalogue AWS Glue fédéré et entrez le nom du Snowflake catalogue existant.

  8. Dans le conteneur de détails des connexions, vous pouvez choisir parmi une connexion existante à laquelle vous avez accès ou fournir une configuration pour créer un nouveau connecteur.

  9. Les nouvelles configurations de connexion incluent :

    • Nom de connexion : nom unique de l'objet de AWS Glue connexion.

    • URL de l'instance : URL du point de terminaison de votre Snowflake compte existant.

    • Authentification : spécifiez la configuration d'authentification AWS Glue utilisée pour se connecter au serveur de catalogue distant. AWS Glue prend en charge à la fois l'authentification OAuth2 et l'authentification personnalisée.

    • URL du jeton : spécifiez l’URL du fournisseur d’identité du catalogue distant.

    • ID client OAuth2 — (Facultatif) Spécifiez l'ID client des informations d'identification OAuth2 associées à votre catalogue distant. Si vous ne fournissez pas d'identifiant client, la demande de jeton s'authentifie en utilisant uniquement le secret client stocké dans AWS Secrets Manager.

    • Secret : stockez et utilisez le secret du client OAuth2 en utilisant AWS Secrets Manager ou entrez la valeur secrète dans la zone de texte. Lorsque vous saisissez le secret manuellement dans la console, il est AWS Glue créé en votre nom.

    • Étendue de l’URL du jeton : spécifiez l’étendue OAuth pour l’authentification.

    • Filtre de boîtier du catalogue : choisissez si vous souhaitez transférer les objets en minuscules ou en majuscules de votre catalogue distant vers Data Catalog.

  10. Créez un rôle IAM que AWS Glue les responsables du service Lake Formation pourront utiliser pour accéder respectivement aux emplacements secrets AWS Secrets Manager et aux emplacements Amazon S3 des tables Iceberg distantes. Sélectionnez le rôle IAM dans la liste déroulante d'enregistrement. Reportez-vous aux étapes 2 et 3 de la section CLI suivante pour plus de détails sur la politique IAM.

  11. Sélectionnez Tester la connexion pour vérifier si les propriétés de votre connexion et l'accès aux rôles IAM sont correctement configurés.

  12. Cliquez sur Suivant pour vérifier vos paramètres.

  13. Sélectionnez Créer un catalogue dans la page de révision.

  1. Créez un AWS Secrets Manager secret

    Le AWS Glue connecteur prend en charge deux types d'authentification : OAuth2 et Personnalisé. Lorsque vous utilisez l'option OAuth2, utilisez-la AWS Secrets Manager pour stocker le secret client du principal de Snowflake service. Vous utiliserez ultérieurement ce secret lors de la création de la AWS Glue connexion. Pour l'authentification personnalisée, utilisez AWS Secrets Manager pour stocker et récupérer le jeton d'accès.

    Dans l'exemple suivant, remplacezyour-snowflake-secret,client_secret, region par vos propres informations.

    aws secretsmanager create-secret \ --name your-snowflake-secret \ --description "Snowflake secret" \ --secret-string '{ "USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET": "client_secret" }' \ --region region
    Note

    USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRETest un mot clé réservé AWS Glue utilisé pour faire référence à une valeur de secret client dans le secret. Utilisez également le même mot clé lorsque vous créez le secret dans la console Lake Formation.

  2. Créez un rôle IAM qui permet à l'objet de AWS Glue connexion d'accéder au secret créé à l'étape précédente

    L'objet de AWS Glue connexion nécessite l'accès au AWS Secrets Manager secret lorsque vous l'utilisez AWS Secrets Manager pour stocker, récupérer et actualiser votre jeton secret OAuth. L'objet de AWS Glue connexion nécessite également un accès pour créer, décrire et utiliser les interfaces réseau Amazon VPC lorsque vous utilisez un point de terminaison Amazon VPC pour restreindre la connectivité à votre Snowflake compte.

    Créez une politique IAM et associez-la à un rôle IAM. Ajoutez le principal de AWS Glue service à la politique de confiance.

    Dans l'exemple suivant, remplacez your-secrets-manager-ARNyour-vpc-id, et your-subnet-id1 par vos propres informations.

    Exemple Stratégie IAM
    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:PutSecretValue" ], "Resource": [ "your-secrets-manager-ARN" ] }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": "*", "Condition": { "ArnEquals": { "ec2:Vpc": "arn:aws:ec2:region:account-id:vpc/your-vpc-id", "ec2:Subnet": ["arn:aws:ec2:region:account-id:subnet/your-subnet-id1"] } } } ] }
    Exemple Stratégie d’approbation
    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" }] }
  3. Créez une politique IAM qui donne à Lake Formation un accès en lecture à l'emplacement Amazon S3 du catalogue

    En tant que propriétaire d'un catalogue fédéré dans Data Catalog, vous utilisez Lake Formation pour accorder à vos équipes chargées des données un accès grossier aux tableaux, un accès affiné (au niveau des colonnes, des lignes et des cellules) et un accès basé sur des balises. Lake Formation utilise un rôle IAM qui lui donne accès aux emplacements Amazon S3 sous-jacents de vos tables Iceberg distantes. Cet accès permet à Lake Formation d'envoyer des informations d'accès étendues aux moteurs d'analyse qui interrogent des tables distantes.

    Créez une politique IAM et associez-la à un rôle IAM. Ajoutez le responsable du service Lake Formation à la politique de confiance des rôles.

    Dans l'exemple suivant, remplacez amzn-s3-demo-bucketN et your-kms-key par vos propres informations.

    Exemple Stratégie IAM
    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1/*", "arn:aws:s3:::amzn-s3-demo-bucket2/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket2" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": [ "your-kms-key" ] } ] }
    Exemple Stratégie d’approbation
    { "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "lakeformation.amazonaws.com" }, "Action": "sts:AssumeRole" }] }
    Note

    Lorsque vous utilisez la console Lake Formation pour créer un catalogue fédéré, la console utilise un seul rôle IAM auquel sont associées les deux politiques pour terminer la configuration.

  4. Création d'un objet AWS Glue de connexion

    AWS Glue Le connecteur prend en charge les méthodes d'authentification OAuth2 et personnalisées. L'objet de connexion Data Catalog prend en charge la CATALOG_CASING_FILTER configuration qui vous permet de transférer dans Data Catalog les objets en minuscules ou en majuscules de votre catalogue distant.

    L'exemple suivant utilise la configuration d'authentification OAuth2 pour créer une AWS Glue connexion. Remplacez highlighted sections par vos informations.

    aws glue create-connection \ --connection-input '{ "Name": "your-glue-connection-to-snowflake-account", "ConnectionType": "SNOWFLAKEICEBERGRESTCATALOG", "ConnectionProperties": { "INSTANCE_URL": "your-snowflake-account-URL", "ROLE_ARN": "your-IAM-role-for-secrets-and-VPC-access", "CATALOG_CASING_FILTER": "LOWERCASE_ONLY" }, "AuthenticationConfiguration": { "AuthenticationType": "OAUTH2", "OAuth2Properties": { "OAuth2GrantType": "CLIENT_CREDENTIALS", "TokenUrl": "your-internal-or-external-token-server-url", "OAuth2ClientApplication": { "UserManagedClientApplicationClientId": "our-client-id" }, "TokenUrlParametersMap": { "scope": "all-apis" } }, "SecretArn": "arn:aws:secretsmanager:your-aws-region:your-aws-account-id:secret:snowflake-secret" } }'
    Note

    Le champ OAuth2ClientApplication est facultatif. Si vous l'omettez, la demande de jeton s'authentifie en utilisant uniquement le secret client stocké dans AWS Secrets Manager, sans envoyer d'ID client.

  5. Enregistrer la AWS Glue connexion en tant que ressource sur la formation lacustre

    À l'aide de l'objet de AWS Glue connexion (créé à l'étape 4) et du rôle IAM (créé à l'étape 3), vous pouvez désormais enregistrer l'objet de AWS Glue connexion en tant que ressource gérée par Lake Formation.

    Remplacez your-glue-connector-arn et your-IAM-role-ARN-having-LF-access par vos informations.

    aws lakeformation register-resource \ --resource-arn your-glue-connector-arn \ --role-arn your-IAM-role-ARN-having-LF-access \ --with-federation \ --with-privileged-access
  6. Création d'un catalogue fédéré dans Data Catalog

    Après avoir créé un objet de AWS Glue connexion et l'avoir enregistré auprès de Lake Formation, vous pouvez créer un catalogue fédéré dans le Data Catalog :

    Donnez au catalogue fédéré un nom unique àyour-federated-catalog-name, faites référence au catalogue dans Snowflake at catalog-name-in-Snowflake et entrez le nom de connexion créé précédemment àyour-glue-connection-name.

    aws glue create-catalog \ --name your-federated-catalog-name \ --catalog-input '{ "FederatedCatalog": { "Identifier": catalog-name-in-Snowflake", "ConnectionName": your-glue-connection-name" }, "CreateTableDefaultPermissions": [], "CreateDatabaseDefaultPermissions": [] }'

Considérations relatives à l'intégration avec Snowflake

  • Lorsque vous déposez des ressources (telles que des bases de données et des tables)Snowflake, Lake Formation ne révoque pas automatiquement les autorisations accordées sur cette ressource fédérée. Pour supprimer les autorisations d'accès, vous devez révoquer explicitement les autorisations précédemment accordées à la ressource fédérée à l'aide de Lake Formation.

  • Lorsque vous montez un catalogue distant avec CATALOG_CASING_FILTER='UPPERCASE_ONLY' configuration, les bases de données et les tables avec des identifiants majuscules sont fédérées, mais pas les objets avec des identificateurs minuscules.

  • Vous pouvez réutiliser la même AWS Glue connexion pour créer plusieurs catalogues fédérés. La suppression d'un catalogue n'entraîne pas la suppression de la connexion associée. Pour supprimer une connexion, veuillez utiliser la aws glue delete-connection commande AWS CLI et assurez-vous que tous les catalogues associés sont d'abord supprimés.

  • Les espaces de noms imbriqués dans le Polaris catalogue ne sont pas pris en charge. En d'autres termes, la fédération de catalogues peut accéder à Iceberg des tables distantes qui suivent une notation catalog.database.table en 3 parties.