Configurer un volume externe pour Amazon S3

Accordez à Snowflake un accès restreint à votre propre compartiment Amazon S3 à l’aide d’un volume externe pour des tables Apache Iceberg™ dans Snowflake. Pour configurer un volume externe pour Amazon S3, vous pouvez utiliser SQL ou utiliser Snowsight.

En guise de meilleure pratique, créez une politique IAM désignée qui accorde à Snowflake l’accès à votre emplacement S3. Vous pouvez ensuite associer la politique à un rôle et utiliser les identifiants de connexion de sécurité générés par AWS pour que ce rôle puisse accéder aux fichiers.

Note

Pour renforcer votre sécurité, vous pouvez configurer un volume externe de manière à ce qu’il utilise une connectivité privée plutôt que l’internet public pour le trafic réseau. Pour plus d’informations, voir Connectivité privée vers des volumes externes pour Amazon Web Services.

Conditions préalables

Avant de configurer un volume externe, vous avez besoin des éléments suivants :

  • Un compartiment de stockage S3.

    • Pour utiliser le volume externe pour les tables Iceberg gérées en externe, tous les fichiers de données et de métadonnées de votre table doivent être situés dans un compartiment qui héberge votre compte Snowflake.

    • Snowflake ne peut pas prendre en charge les volumes externes dont les noms de compartiment S3 contiennent des points (par exemple, my.s3.bucket). S3 ne prend pas en charge le SSL pour les compartiments de type hôte virtuel avec des points dans le nom, et Snowflake utilise des chemins de type hôte virtuel et HTTPS pour accéder aux données dans S3.

    • Pour faciliter la récupération des données, activez la gestion des versions pour votre emplacement de stockage Cloud externe.

  • Autorisations dans AWS pour créer et gérer des politiques et des rôles IAM. Si vous n’êtes pas un administrateur AWS, demandez à votre administrateur AWS d’effectuer ces tâches.

Configure an external volume by using SQL

Étape 1 : créez une politique IAM qui accorde l’accès à votre emplacement S3

Pour configurer les autorisations d’accès à Snowflake dans la Console de gestion AWS, procédez comme suit :

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

  2. Depuis le tableau de bord d’accueil, recherchez et sélectionnez IAM.

  3. Dans le volet de navigation de gauche, sélectionnez Account settings.

  4. Dans Security Token Service (STS), dans la liste Endpoints, recherchez la région Snowflake dans laquelle se trouve votre compte. Si STS status est inactif, placez la bascule sur Active.

  5. Dans le volet de navigation de gauche, sélectionnez Policies.

  6. Sélectionnez Create Policy.

    Créez une politique IAM dans la console de gestion AWS.
  7. Pour Policy editor, sélectionnez JSON.

  8. Ajoutez une politique pour fournir à Snowflake les autorisations nécessaires pour lire et écrire des données sur votre emplacement S3.

    L’exemple de politique suivant accorde l’accès à tous les emplacements du compartiment spécifié.

    Note

    • Remplacez my_bucket par le nom de votre compartiment. Vous pouvez également spécifier un chemin dans le compartiment ; par exemple, my_bucket/path.

    • Si vous attribuez la valeur ["*"] à la condition "s3:prefix":, vous aurez accès à tous les préfixes du compartiment spécifié ; si vous attribuez la valeur ["path/*"], vous aurez accès à un chemin spécifié du compartiment.

    • Pour les compartiments des régions gouvernementales, les ARNs de compartiments utilisent le préfixe arn:aws-us-gov:s3:::.

    • Si vous utilisez un point d’accès S3, indiquez le point d’accès ARN au lieu d’un compartiment ARN. Pour plus d’informations, voir Configurer les politiques IAM pour utiliser des points d’accès.

    {
       "Version": "2012-10-17",
       "Statement": [
             {
                "Effect": "Allow",
                "Action": [
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:GetObjectVersion",
                   "s3:DeleteObject",
                   "s3:DeleteObjectVersion"
                ],
                "Resource": "arn:aws:s3:::<my_bucket>/*"
             },
             {
                "Effect": "Allow",
                "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketLocation"
                ],
                "Resource": "arn:aws:s3:::<my_bucket>",
                "Condition": {
                   "StringLike": {
                         "s3:prefix": [
                            "*"
                         ]
                   }
                }
             }
       ]
    }
    
    Copy
  9. Sélectionnez Next.

  10. Saisissez un Policy name (par exemple, snowflake_access) et une Description facultative.

  11. Sélectionnez Create policy.

Étape 2 : créer un rôle IAM

Créez un rôle AWS IAM qui accorde des privilèges sur le compartiment S3 contenant vos fichiers de données.

  1. Dans le volet de navigation gauche du tableau de bord de la gestion des identités et des accès (IAM), sélectionnez Roles.

  2. Sélectionnez Create role.

  3. Comme type d’entité de confiance, sélectionnez AWS account.

  4. Sous An AWS account, sélectionnez This account. Dans une étape ultérieure, vous modifierez la relation de confiance et accorderez l’accès à Snowflake.

  5. Sélectionnez l’option Require external ID. Saisissez un ID externe de votre choix. Par exemple, iceberg_table_external_id.

    Un ID externe est utilisé pour accorder l’accès à vos ressources AWS (telles que des compartiments S3) à un tiers comme Snowflake.

    Créez un rôle IAM avec un ID externe.
  6. Sélectionnez Next.

  7. Sélectionnez la politique que vous avez créée pour le volume externe, puis sélectionnez Next.

  8. Saisissez un Role name et une description pour le rôle, puis sélectionnez Create role.

    Vous avez maintenant créé une politique IAM pour un emplacement S3, créé un rôle IAM et vous avez associé la politique au rôle.

  9. Sélectionnez View role pour voir la page de résumé du rôle. Localisez et enregistrez la valeur de ARN (Amazon Resource Name) pour le rôle.

    Bannière avec un lien pour voir le nouveau rôle IAM.

Étape 3 : Accorder les privilèges requis pour le chiffrement SSE-KMS au rôle IAM (facultatif)

Si vous souhaitez charger un objet chiffré avec une clé KMS AWS sur Amazon S3, le rôle IAM que vous avez créé pour votre volume externe a besoin des autorisations kms:GenerateDataKey sur la clé. Pour télécharger un objet chiffré avec une clé KMS AWS, le rôle IAM a besoin d’autorisations kms:Decrypt sur la clé.

Si vous souhaitez utiliser une clé KMS pour votre chiffrement côté serveur, procédez comme suit pour créer une clé et la référencer.

  1. Dans la Console de gestion AWS, accédez au service de gestion des clés KMS. Dans la navigation de gauche, sélectionnez Customer managed keys, puis Create key. Vous devez créer une clé dans la même région que celle de votre compartiment.

  2. Créez un type de clé Symmetric. Pour l’utilisation de la clé, sélectionnez Encrypt and decrypt. Sélectionnez Next.

  3. Pour Alias, saisissez un nom pour la clé et sélectionnez Next.

  4. Si nécessaire, sélectionnez un administrateur pour la clé et sélectionnez Next.

  5. Pour Define key usage permissions, sélectionnez votre rôle IAM, puis Next.

  6. Examinez les détails de la configuration de la clé, puis sélectionnez Finish pour créer la clé.

  7. Recherchez la clé dans la liste des clés gérées par le client, sélectionnez-la et enregistrez son ARN. Voici un exemple d’ARN d’une clé : arn:aws:kms:us-west-2:111111122222:key/1a1a11aa-aa1a-aaa1a-a1a1-000000000000.

    Lorsque vous créez votre volume externe, définissez la valeur KMS_KEY_ID sur l’ARN de votre clé.

Étape 4 : Créer un volume externe dans Snowflake

Créez un volume externe via la commande CREATE EXTERNAL VOLUME. L’exemple suivant crée un volume externe nommé iceberg_external_volume qui définit un emplacement de stockage Amazon S3 avec chiffrement.

CREATE OR REPLACE EXTERNAL VOLUME iceberg_external_volume
   STORAGE_LOCATIONS =
      (
         (
            NAME = 'my-s3-us-west-2'
            STORAGE_PROVIDER = 'S3'
            STORAGE_BASE_URL = 's3://<my_bucket>/'
            STORAGE_AWS_ROLE_ARN = '<arn:aws:iam::123456789012:role/myrole>'
            STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id'
         )
      )
      ALLOW_WRITES = TRUE;
Copy

L’exemple spécifie l’ID de volume externe (iceberg_table_external_id) associé au rôle IAM que vous avez créé pour le volume externe. La spécification d’un ID externe vous permet d’utiliser le même rôle IAM (et ID externe) sur plusieurs volumes externes.

Note

Spécifiez des ARNs exactement comme fournis par AWS. Les ARNs sont insensibles à la casse.

Étape 5 : Récupérer l’utilisateur IAM AWS de votre compte Snowflake

  1. Récupérez l’ARN de l’utilisateur IAM AWS automatiquement créé pour votre compte Snowflake avec la commande DESCRIBE EXTERNAL VOLUME. Indiquez le nom de votre volume externe.

    L’exemple suivant décrit un volume externe nommé iceberg_external_volume :

    DESC EXTERNAL VOLUME iceberg_external_volume;
    
    Copy
  2. Enregistrez la valeur de la propriété STORAGE_AWS_IAM_USER_ARN, qui est l’utilisateur AWS IAM 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. Tous les volumes externes S3 de votre compte utilisent cet utilisateur IAM.

    Note

    Si vous n’avez pas spécifié d’ID externe (STORAGE_AWS_EXTERNAL_ID) lors de la création d’un volume externe, Snowflake génère un ID à utiliser. Enregistrez la valeur afin de pouvoir mettre à jour votre politique de confiance du rôle IAM avec l’ID de rôle externe généré.

Étape 6 : Accorder à l’utilisateur IAM des autorisations lui permettant d’accéder à des objets de compartiment

Dans cette étape, vous configurez les autorisations qui permettent à l’utilisateur IAM de votre compte Snowflake d’accéder aux objets de votre compartiment S3.

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

  2. Depuis le tableau de bord d’accueil, recherchez et sélectionnez IAM.

  3. Dans le volet de navigation de gauche, sélectionnez Roles.

  4. Sélectionnez le rôle IAM que vous avez créé pour votre volume externe.

  5. Sélectionnez l’onglet Trust relationships.

  6. Sélectionnez Edit trust policy.

  7. Modifiez le document de politique en y ajoutant les valeurs de sortie DESC EXTERNAL VOLUME que vous avez enregistrées.

    Mettez à jour la politique de confiance pour le rôle IAM.

    Document de politique pour le rôle IAM

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

    Où :

    • snowflake_user_arn est la valeur STORAGE_AWS_IAM_USER_ARN que vous avez enregistrée.

    • iceberg_table_external_id est votre ID externe. Si vous avez déjà spécifié un ID externe lors de la création du rôle et que vous avez utilisé le même ID pour créer votre volume externe, laissez la valeur telle quelle. Sinon, mettez à jour sts:ExternalId avec la valeur que vous avez enregistrée.

    Note

    Vous devez mettre à jour ce document de politique si vous créez un nouveau volume externe (ou si vous recréez un volume externe existant via la syntaxe CREATE OR REPLACE EXTERNAL VOLUME) et que vous ne fournissez pas votre propre ID externe. Pour des raisons de sécurité, un volume externe nouveau ou recréé a un ID externe différent et ne peut pas résoudre la relation de confiance à moins que vous ne mettiez à jour cette politique de confiance.

  8. Sélectionnez Update policy pour enregistrer vos modifications.

Étape 7 : Vérifier l’accès au stockage

Pour vérifier que Snowflake peut s’authentifier avec succès auprès de votre fournisseur de stockage, appelez la fonction SYSTEM$VERIFY_EXTERNAL_VOLUME.

SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_external_volume');
Copy

Note

Si vous recevez l’erreur suivante, cela signifie que l’administrateur de votre compte doit activer AWS STS dans la région de déploiement de Snowflake. Pour obtenir des instructions, consultez Gérer AWS STS dans une région AWS dans la documentation AWS.

Error assuming AWS_ROLE:
STS is not activated in this region for account:<external volume id>. Your account administrator can activate STS in this region using the IAM Console.

Configure an external volume in Snowsight

Étape 1 : créez une politique IAM qui accorde l’accès à votre emplacement S3

Pour configurer les autorisations d’accès à Snowflake dans la Console de gestion AWS, procédez comme suit :

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

  2. Depuis le tableau de bord d’accueil, recherchez et sélectionnez IAM.

  3. Dans le volet de navigation de gauche, sélectionnez Account settings.

  4. Dans Security Token Service (STS), dans la liste Endpoints, recherchez la région Snowflake dans laquelle se trouve votre compte. Si STS status est inactif, placez la bascule sur Active.

  5. Dans le volet de navigation de gauche, sélectionnez Policies.

  6. Sélectionnez Create Policy.

    Créez une politique IAM dans la console de gestion AWS.
  7. Pour Policy editor, sélectionnez JSON.

  8. Ajoutez une politique pour fournir à Snowflake les autorisations nécessaires pour lire et écrire des données sur votre emplacement S3.

    L’exemple de politique suivant accorde l’accès à tous les emplacements du compartiment spécifié.

    Note

    • Remplacez my_bucket par le nom de votre compartiment. Vous pouvez également spécifier un chemin dans le compartiment ; par exemple, my_bucket/path.

    • Si vous attribuez la valeur ["*"] à la condition "s3:prefix":, vous aurez accès à tous les préfixes du compartiment spécifié ; si vous attribuez la valeur ["path/*"], vous aurez accès à un chemin spécifié du compartiment.

    • Pour les compartiments des régions gouvernementales, les ARNs de compartiments utilisent le préfixe arn:aws-us-gov:s3:::.

    • Si vous utilisez un point d’accès S3, indiquez le point d’accès ARN au lieu d’un compartiment ARN. Pour plus d’informations, voir Configurer les politiques IAM pour utiliser des points d’accès.

    {
       "Version": "2012-10-17",
       "Statement": [
             {
                "Effect": "Allow",
                "Action": [
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:GetObjectVersion",
                   "s3:DeleteObject",
                   "s3:DeleteObjectVersion"
                ],
                "Resource": "arn:aws:s3:::<my_bucket>/*"
             },
             {
                "Effect": "Allow",
                "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketLocation"
                ],
                "Resource": "arn:aws:s3:::<my_bucket>",
                "Condition": {
                   "StringLike": {
                         "s3:prefix": [
                            "*"
                         ]
                   }
                }
             }
       ]
    }
    
    Copy
  9. Sélectionnez Next.

  10. Saisissez un Policy name (par exemple, snowflake_access) et une Description facultative.

  11. Sélectionnez Create policy.

Étape 2 : créer un rôle IAM

Créez un rôle AWS IAM qui accorde des privilèges sur le compartiment S3 contenant vos fichiers de données.

  1. Dans le volet de navigation gauche du tableau de bord de la gestion des identités et des accès (IAM), sélectionnez Roles.

  2. Sélectionnez Create role.

  3. Comme type d’entité de confiance, sélectionnez AWS account.

  4. Sous An AWS account, sélectionnez This account. Dans une étape ultérieure, vous modifierez la relation de confiance et accorderez l’accès à Snowflake.

  5. Sélectionnez l’option Require external ID. Saisissez un ID externe de votre choix. Par exemple, iceberg_table_external_id.

    Un ID externe est utilisé pour accorder l’accès à vos ressources AWS (telles que des compartiments S3) à un tiers comme Snowflake.

    Créez un rôle IAM avec un ID externe.
  6. Sélectionnez Next.

  7. Sélectionnez la politique que vous avez créée pour le volume externe, puis sélectionnez Next.

  8. Saisissez un Role name et une description pour le rôle, puis sélectionnez Create role.

    Vous avez maintenant créé une politique IAM pour un emplacement S3, créé un rôle IAM et vous avez associé la politique au rôle.

  9. Sélectionnez View role pour voir la page de résumé du rôle. Localisez et enregistrez la valeur de ARN (Amazon Resource Name) pour le rôle.

    Bannière avec un lien pour voir le nouveau rôle IAM.

Step 3: Create an external volume in Snowsight

Pour créer un volume externe dans Snowflake en utilisant Snowsight, procédez comme suit :

  1. Connectez-vous à Snowsight.

  2. Dans le coin inférieur gauche, sélectionnez votre nom » Switch role, puis sélectionnez ACCOUNTADMIN ou un rôle avec le privilège CREATE EXTERNAL VOLUME.

    Pour plus d’informations, voir Changer de rôle principal.

  3. Dans le menu de navigation, sélectionnez Catalog » External data.

  4. Select the External volumes tab.

  5. Select + Create.

  6. Select AWS S3 and then select Next.

    Note

    Vous avez déjà configuré votre fournisseur Cloud plus tôt lorsque vous avez créé une politique IAM qui accorde l’accès à votre emplacement S3 et avez créé un rôle IAM.

  7. Dans la page Grant storage access, depuis le champ Trust policy, copiez la politique de confiance dans un éditeur de texte.

    Dans l’étape suivante, vous collez cette politique de confiance dans AWS.

  8. Pour accorder l’accès au stockage, procédez comme suit :

    1. In AWS, log in to the AWS Management Console.

    2. Depuis le tableau de bord d’accueil, recherchez et sélectionnez IAM.

    3. Dans le volet de navigation de gauche, sélectionnez Roles.

    4. Sélectionnez le rôle IAM que vous avez créé pour votre volume externe.

    5. Sélectionnez l’onglet Trust relationships.

    6. Sélectionnez Edit trust policy.

    7. Remplacez la politique de confiance pour votre rôle IAM avec la politique que vous avez copiée dans Snowsight.

    8. Sélectionnez Update policy pour enregistrer vos modifications.

    9. Dans Snowsight, sélectionnez Next.

  9. Dans Snowsight, sélectionnez Next.

  10. Pour configurer votre volume externe, dans la page Configure external volume, renseignez les champs :

    Champ

    Description

    External volume name

    Enter a name for your external volume.

    Region type

    Spécifie le fournisseur de stockage dans le Cloud qui stocke vos fichiers de données.

    • Standard (default) : stockage S3 dans des régions AWS publiques hors Chine.

    • Government (GovCloud) : stockage S3 dans des régions gouvernementales AWS.

    S3 role ARN

    Specifies the case-sensitive Amazon Resource Name (ARN) of the AWS identity and access management (IAM) role that grants privileges on the S3 bucket containing your data files.

    Vous avez enregistré cette valeur lorsque vous avez créé un rôle IAM.

    Encryption (optional)

    Indique le type de chiffrement utilisé. Les valeurs possibles sont les suivantes :

    Scope

    Choisissez si le volume externe doit devenir l’emplacement par défaut pour les futures tables Iceberg. Les valeurs possibles sont les suivantes :

    • Do not set a default : ne définissez le volume externe par défaut nulle part.

    • Account : Définir le volume externe par défaut pour les tables Iceberg créées sous l’ensemble du compte.

    • Specific database : définissez le volume externe comme valeur par défaut pour les tables Iceberg créées sous la base de données que vous spécifiez. Pour spécifier cette base de données, utilisez la liste déroulante Database qui apparaît lorsque vous sélectionnez Specific database.

    • Specific schema : définissez le volume externe comme valeur par défaut pour les tables Iceberg créées sous le schéma que vous spécifiez. Pour spécifier ce schéma, utilisez la liste déroulante Database qui apparaît pour sélectionner d’abord la base de données parent du schéma, puis le schéma.

    Comment (optional)

    Spécifie un commentaire pour le volume externe.

    Connectivity

    Indique s’il faut utiliser la connectivité privée sortante pour renforcer votre sécurité. Pour obtenir des informations sur l’utilisation de ce paramètre, voir Connectivité privée vers des volumes externes pour Amazon Web Services. Les valeurs possibles sont les suivantes :

    • Public (default) : utilisez l’Internet public

    • Private (AWS PrivateLink) : utilisez la connectivité privée sortante.

    Storage base URL

    Spécifie l’URL de base de votre emplacement de stockage Cloud.

    Access scope

    Spécifie si les opérations d’écriture sont autorisées pour le volume externe ; doit être défini sur Allow writes pour les tables suivantes :

    • Tables Iceberg qui utilisent Snowflake comme catalogue.

    • Tables Iceberg qui utilisent un catalogue externe et sont accessibles en écriture. Les tables Iceberg gérées en externe sont accessibles en écriture lorsque vous y accédez via une base de données liée à un catalogue qui possède le paramètre ALLOWED_WRITE_OPERATIONS défini sur TRUE.

    Pour les tables Iceberg créées à partir de fichiers de table Delta, la définition de ce paramètre sur Allow writes permet à Snowflake d’écrire des métadonnées Iceberg dans votre stockage externe. Pour plus d’informations, voir Tables basées sur Delta.

    La valeur de ce champ doit également correspondre aux autorisations définies sur le compte de stockage Cloud pour chaque emplacement de stockage spécifié.

    Note

    Si vous prévoyez d’utiliser le volume externe pour accéder en lecture à des tables Iceberg gérées en externe, vous pouvez définir ce paramètre sur Off (Désactivé). Snowflake n’écrit pas de fichiers de métadonnées Iceberg ni de données dans votre stockage Cloud lorsque vous lisez des tables dans un catalogue Iceberg externe.

  11. Select Next.

    Sur la page Verify connection & create volume, Snowflake vérifie votre connexion à AWS puis affiche un message indiquant que la connexion est réussie.

    Note

    Si Snowflake n’est pas en mesure de vérifier votre connexion, vérifiez votre autorisation ou la configuration de votre volume externe, puis sélectionnez. Verify again.

  12. Select Create.

Prochaines étapes

Après avoir configuré un volume externe, vous pouvez créer une table Iceberg.