Option 3 : Configuration des identifiants de connexion de l’utilisateur AWS IAM pour accéder à Amazon S3

Cette section décrit comment configurer une stratégie de sécurité pour un compartiment S3 et des identifiants de connexion d’un utilisateur IAM spécifique pour accéder à une zone de préparation externe de manière sécurisée.

Dans ce chapitre :

Étape 1 : Configuration d’une politique d’accès au compartiment S3

Exigences en matière de contrôle d’accès AWS

Snowflake requiert les permissions suivantes sur un compartiment S3 et un dossier pour accéder aux fichiers dans le dossier (et tout sous-dossier) :

  • s3:GetObject

  • s3:GetObjectVersion

  • s3:ListBucket

Note

Les autorisations supplémentaires s3:PutObject et s3:DeleteObject ne sont nécessaires que si vous prévoyez de décharger des fichiers dans le compartiment ou de purger automatiquement les fichiers après les avoir chargés dans une table.

Comme bonne pratique, Snowflake recommande la création d’une politique IAM et d’un utilisateur pour l’accès de Snowflake au compartiment S3. Vous pouvez alors joindre la politique à l’utilisateur, et utiliser les identifiants de sécurité générés par AWS pour que l’utilisateur puisse accéder aux fichiers dans le compartiment.

Création d’une politique IAM

Les instructions étape par étape suivantes décrivent comment configurer les permissions d’accès pour Snowflake dans votre console de gestion AWS de sorte que vous puissiez utiliser un compartiment S3 pour charger et décharger les données :

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

  2. Dans le tableau de bord d’accueil, sélectionnez Identity & Access Management (IAM) :

    Identity & Access Management in AWS Management Console
  3. Cliquez sur Account settings dans le volet de navigation de gauche.

  4. Développez la liste Security Token Service Regions, recherchez la région AWS qui correspond à la région où se trouve votre compte et choisissez Activate si le statut est Inactive.

  5. Cliquez sur Policies dans le volet de navigation de gauche.

  6. Cliquez sur Create Policy :

    Create Policy button on Policies page
  7. Cliquez sur l’onglet JSON .

  8. Ajoutez le document de politique qui permettra à Snowflake d’accéder au compartiment et au dossier S3.

    La politique suivante (au format JSON) fournit à Snowflake les autorisations d’accès requises pour le compartiment et le chemin de dossier spécifiés. Vous pouvez copier et coller le texte dans l’éditeur de stratégies :

    Note

    Assurez-vous de remplacer nom_compartiment et préfixe par votre nom de compartiment réel et le préfixe du chemin du dossier.

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:GetObjectVersion",
                  "s3:DeleteObject",
                  "s3:DeleteObjectVersion"
                ],
                "Resource": "arn:aws:s3:::<bucket_name>/<prefix>/*"
            },
            {
                "Effect": "Allow",
                "Action": "s3:ListBucket",
                "Resource": "arn:aws:s3:::<bucket_name>",
                "Condition": {
                    "StringLike": {
                        "s3:prefix": [
                            "<prefix>/*"
                        ]
                    }
                }
            }
        ]
    }
    

Important

La définition de la condition "s3:prefix": sur ["*"] ou ["<chemin>/* "] donne accès à tous les préfixes dans le compartiment spécifié ou le chemin dans le compartiment, respectivement. Si plus de 1 000 objets existent dans le compartiment ou le chemin, vous pourriez rencontrer l’erreur suivante : Access Denied (Status Code: 403; Error Code: AccessDenied).

Pour éviter cette erreur, supprimez la condition de la politique IAM :

"Condition": {
      "StringLike": {
          "s3:prefix": [
              "*"
          ]
      }
  }

La politique accorde toujours l’accès aux fichiers du compartiment, mais S3 ne renvoie pas d’erreur si le compartiment contient plus de 1 000 objets.

  1. Cliquez sur Review policy.

  2. Entrez le nom de la stratégie (ex. : snowflake_access) et une description facultative. Cliquez ensuite sur Create policy pour créer la politique.

    Create Policy button in Review Policy page

Étape 2 : Créer un utilisateur IAM AWS

  1. Choisissez Users dans le volet de navigation de gauche, puis Add user.

  2. Sur la page Add user, entrez un nouveau nom d’utilisateur (par ex. snowflake1). Sélectionnez Programmatic access comme type d’accès, puis cliquez sur Next :

    Add user page
  3. Cliquez sur Attach existing policies directly, et sélectionnez la stratégie que vous avez créée précédemment. Puis cliquez sur Next :

    Set permissions page
  4. Examinez les détails de l’utilisateur, puis cliquez sur Create user.

    Review user details page
  5. Enregistrez les identifiants d’accès. La façon la plus simple de les enregistrer est de cliquer sur Download Credentials pour les écrire dans un fichier (par ex. credentials.csv)

    Attach policy on the user details page

    Attention

    Une fois que vous quittez cette page, la clé d’accès secrète ne sera plus disponible dans la console AWS. Si vous perdez la clé, vous devez générer un nouvel ensemble d’identifiants pour l’utilisateur.

Désormais, vous avez accompli les opérations suivantes :

  • J’ai créé une politique IAM pour un compartiment.

  • J’ai créé un utilisateur IAM et lui ai généré des identifiants d’accès.

  • J’ai associé la politique à l’utilisateur.

Avec la clé AWS et la clé secrète pour le compartiment S3, vous avez les identifiants nécessaires pour accéder à votre compartiment S3 dans Snowflake en utilisant une zone de préparation externe.

Étape 3 : Création d’une zone de préparation externe (c.-à-d. S3)

Créez une zone de préparation externe qui fait référence aux informations d’identification AWS que vous avez créées.

Créez une zone de préparation à l’aide de la commande CREATE STAGE , ou vous pouvez choisir de modifier une zone de préparation externe existante et définir l’option CREDENTIALS.

Note

Les identifiants de connexion sont traités séparément des autres paramètres de la zone de préparation tels que ENCRYPTION et FILE_FORMAT. La prise en charge de ces autres paramètres est la même quel que soit l’identifiant utilisé pour accéder à votre compartiment S3 externe.

Par exemple, définissez mydb.public comme base de données et schéma actuels pour la session utilisateur, puis créez une zone de préparation nommée my_S3_stage. Dans cet exemple, la zone de préparation fait référence au compartiment S3 et au chemin mybucket/load/files. Les fichiers du compartiment S3 sont chiffrés avec le chiffrement côté serveur (AWS_SSE_KMS) :

USE SCHEMA mydb.public;

CREATE OR REPLACE STAGE my_S3_stage
  URL='s3://mybucket/load/files/'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
  ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID = 'aws/key');

Suivant : Chiffrement des fichiers de données AWS