Option 2 : Configuration d’un rôle AWS IAM pour accéder à Amazon S3 — Obsolète

Note

Vous pouvez rencontrer une erreur assumeRole lors de l’utilisation de la méthode d’authentification obsolète.

Cette section décrit comment configurer un compartiment S3, un rôle IAM et des politiques pour que Snowflake accède à une zone de préparation externe de manière sécurisée au nom d’un ou plusieurs utilisateurs individuels de votre compte Snowflake.

Comme bonne pratique, limitez l’accès au compartiment S3 à un rôle IAM spécifique avec les autorisations minimales requises. Le rôle IAM est créé dans votre compte AWS avec les autorisations d’accès à votre compartiment S3 et la politique de confiance pour permettre à Snowflake d’assumer le rôle IAM.

Trust policies allowing IAM user access to S3 bucket
  1. Un utilisateur AWS IAM créé pour votre compte Snowflake est associé à un rôle IAM que vous configurez via une relation de confiance.

  2. Le rôle se voit accorder un accès limité à un compartiment S3 par le biais de politiques IAM que vous configurez.

Note

Pour suivre les instructions de ce chapitre, vous devez avoir un accès administratif à AWS. Si vous n’êtes pas un administrateur AWS, demandez à votre administrateur AWS d’effectuer ces tâches.

Dans ce chapitre :

Étape 1 : Configuration des autorisations d’accès au compartiment S3

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

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

  • s3:GetBucketLocation

  • s3:GetObject

  • s3:GetObjectVersion

  • s3:ListBucket

Note

Les autorisations supplémentaires suivantes sont nécessaires pour effectuer des actions SQL supplémentaires :

Autorisation

Action SQL

s3:PutObject

Décharger les fichiers dans le compartiment.

s3:DeleteObject

Il est possible de purger automatiquement les fichiers de la zone de préparation après un chargement réussi ou d’exécuter des instructions REMOVE pour supprimer manuellement des fichiers.

Comme bonne pratique, Snowflake recommande la création d’une politique IAM pour l’accès de Snowflake au compartiment S3. Vous pouvez alors joindre la politique au rôle, et utiliser les identifiants de sécurité générés par AWS pour que le rôle 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 requises pour charger ou décharger des données à l’aide d’un seul chemin de dossier et de compartiment. Vous pouvez également purger les fichiers de données en utilisant l’option de copie PURGE.

    Copiez et collez le texte dans l’éditeur de politiques :

    Note

    Assurez-vous de remplacer le bucket et le prefix par votre nom de compartiment actuel 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>/<prefix>/*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Resource": "arn:aws:s3:::<bucket>",
                "Condition": {
                    "StringLike": {
                        "s3:prefix": [
                            "<prefix>/*"
                        ]
                    }
                }
            }
        ]
    }
    
    Copy

    Note

    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.

    Notez que les politiques AWS prennent en charge une variété de cas d’utilisation de sécurité différents.

    La politique suivante fournit à Snowflake les permissions requises pour charger des données à partir d’un seul compartiment en lecture seule et chemin de dossier. La politique inclut les autorisations s3:GetBucketLocation, s3:GetObject, s3:GetObjectVersion, et s3:ListBucket :

    Politique alternative : Chargement à partir d’un compartiment S3 en lecture seule

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                  "s3:GetObject",
                  "s3:GetObjectVersion"
                ],
                "Resource": "arn:aws:s3:::<bucket>/<prefix>/*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Resource": "arn:aws:s3:::<bucket>",
                "Condition": {
                    "StringLike": {
                        "s3:prefix": [
                            "<prefix>/*"
                        ]
                    }
                }
            }
        ]
    }
    
    Copy
  9. Cliquez sur Review policy.

  10. 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 rôle IAM AWS

Dans la console de gestion AWS, créez un rôle AWS IAM qui accorde des privilèges sur le compartiment S3 contenant vos fichiers de 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 Roles dans le volet de navigation de gauche.

  4. Cliquez sur le bouton Create role.

    Select Trusted Entity Page in AWS Management Console
  5. Sélectionnez Another AWS account comme type d’entité de confiance.

  6. Dans le champ Account ID , entrez votre propre ID de compte AWS. Plus tard, vous modifierez la relation de confiance et accorderez l’accès à Snowflake. Un ID externe est requis pour accorder l’accès à vos ressources AWS (c.-à-d. S3) à un tiers (c.-à-d. Snowflake dans le cas présent) ultérieurement dans ces instructions.

  7. Sélectionnez l’option Require external ID. Entrez un ID fictif tel que 0000. Plus tard, vous modifierez la relation de confiance et spécifierez l’ID externe pour votre zone de préparation Snowflake.

  8. Cliquez sur le bouton Next.

  9. Localisez la politique que vous avez créée lors de l” étape 1 : Configuration des autorisations d’accès au compartiment S3 (dans ce chapitre), et sélectionnez cette politique.

  10. Cliquez sur le bouton Next.

    Review Page in AWS Management Console
  11. Entrez un nom et une description pour le rôle et cliquez sur le bouton Create role .

    Vous avez maintenant créé une stratégie IAM pour un compartiment, créé un rôle IAM et associé la stratégie au rôle.

  12. Enregistrez la valeur Role ARN située sur la page de résumé du rôle. Dans la zone de préparation suivante, vous créerez une étape Snowflake qui fait référence à ce rôle en tant qu’informations d’identification de sécurité.

    IAM Role

Note

Snowflake met en cache les informations d’identification temporaires pendant une période qui ne peut dépasser le délai d’expiration de 60 minutes. Si vous révoquez l’accès à partir de Snowflake, les utilisateurs pourraient être en mesure de répertorier les fichiers et de charger des données à partir de l’emplacement de stockage dans le Cloud jusqu’à l’expiration du cache.

Étape 3 : Création d’une zone de préparation externe

Créez une zone de préparation externe (c’est-à-dire S3) qui fait référence au rôle AWS que vous avez créé.

  1. Créez une zone de préparation externe à 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 informations d’identification sont traitées 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 quels que soient les identifiants utilisés pour accéder à votre compartiment S3 externe.

    • Ajoutez une barre oblique (/) à la valeur de l’URL pour filtrer le chemin du dossier spécifié. Si la barre oblique est omise, tous les fichiers et dossiers commençant par le préfixe du chemin spécifié sont inclus.

      Notez que la barre oblique est nécessaire pour accéder aux fichiers de données non structurées et les récupérer dans la zone de préparation.

    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 STAGE my_s3_stage
      URL='s3://mybucket/load/files'
      CREDENTIALS = (AWS_ROLE = 'arn:aws:iam::001234567890:role/mysnowflakerole')
      ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID = 'aws/key');
    
    Copy
  2. Exécutez la commande DESCRIBE STAGE pour visualiser les propriétés de la zone de préparation :

    DESC STAGE my_S3_stage;
    
    +--------------------+--------------------------------+---------------+----------------------------------------------------------------+------------------+
    | parent_property    | property                       | property_type | property_value                                                 | property_default |
    |--------------------+--------------------------------+---------------+----------------------------------------------------------------+------------------|
    ...
    | STAGE_CREDENTIALS  | AWS_ROLE                       | String        | arn:aws:iam::001234567890:role/mysnowflakerole                 |                  |
    | STAGE_CREDENTIALS  | AWS_EXTERNAL_ID                | String        | MYACCOUNT_SFCRole=2_jYfRf+gT0xSH7G2q0RAODp00Cqw=               |                  |
    | STAGE_CREDENTIALS  | SNOWFLAKE_IAM_USER             | String        | arn:aws:iam::123456789001:user/vj4g-a-abcd1234                 |                  |
    +--------------------+--------------------------------+---------------+----------------------------------------------------------------+------------------+
    
    Copy
  3. Enregistrez les valeurs pour les propriétés SNOWFLAKE_IAM_USER et AWS_EXTERNAL_ID, où :

    SNOWFLAKE_IAM_USER

    Un utilisateur AWS IAM créé pour votre compte Snowflake. Cet utilisateur est le même pour chaque zone de préparation S3 externe créée dans votre compte.

    AWS_EXTERNAL_ID

    Un ID unique attribué à la zone de préparation spécifique. L’ID a le format suivant :

    snowflakeAccount_SFCRole=snowflakeRoleId_randomId

    Notez que les valeurs AWS_ROLE, AWS_EXTERNAL_ID et SNOWFLAKE_IAM_USER utilisées dans cet exemple ne sont données qu’à titre indicatif.

    Dans l’étape suivante, vous configurerez votre rôle IAM AWS pour donner accès à l’utilisateur IAM Snowflake en utilisant l’ID externe AWS généré.

Étape 4 : Configuration du rôle AWS IAM pour permettre l’accès à la zone de préparation

Dans la console de gestion AWS, configurez le rôle IAM en utilisant les propriétés de zone de préparation que vous avez enregistrées dans l” étape 3 : Créer une zone de préparation externe (dans cette rubrique) :

  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 Roles dans le volet de navigation de gauche, puis sur le rôle que vous avez créé à l”étape 2 : Créer un rôle IAM AWS (dans cette rubrique).

  4. Cliquez sur l’onglet Trust relationships et cliquez sur le bouton Edit trust relationship.

  5. Dans le champ Policy Document , mettez à jour la politique avec les valeurs des propriétés pour la zone de préparation :

    • AWS : Entrez l’ARN pour la propriété de la zone de préparation SNOWFLAKE_IAM_USER, c’est-à-dire arn:aws:iam::123456789001:user/vj4g-a-abcd1234 dans cet exemple.

    • sts:ExternalId : Entrez l’ID externe généré, c’est-à-dire MYACCOUNT_SFCRole=2_jYfRf+gT0xSH7G2q0RAODp00Cqw= dans cet exemple.

      {
          "Version": "2012-10-17",
          "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::123456789001:user/vj4g-a-abcd1234"
                    ]
                },
                "Action": "sts:AssumeRole",
                "Condition": {
                    "StringEquals": {
                        "sts:ExternalId": "MYACCOUNT_SFCRole=2_jYfRf+gT0xSH7G2q0RAODp00Cqw="
                    }
                }
            }
          ]
      }
      
      Copy

      Note

      La politique de confiance ci-dessus permet à une seule zone de préparation externe de votre compte Snowflake d’assumer votre rôle IAM. Il s’agit de la politique de confiance la plus restrictive et donc la plus sûre.

      La permission d’assumer le rôle IAM est associée à l’ID externe. Un ID externe a le format suivant :

      snowflake_account_SFCRole=snowflake_role_id_random_id

      Où :

      • snowflake_account est le nom attribué à votre compte Snowflake.

      • snowflake_role_id est un ID affecté au rôle Snowflake qui a créé la zone de préparation dans Étape 3 : Création d’une zone de préparation externe (dans cette rubrique).

        Dans l’exemple actuel, la valeur snowflake_role_id est 2. Cet ID est associé à un seul rôle dans votre compte Snowflake. Le but de cet ID est limité aux stratégies de confiance pour les zones de préparation externes ; en tant que tel, une correspondance entre les rôles Snowflake et les IDs n’est pas disponible. L’ID de rôle d’un rôle donné apparaît uniquement dans la valeur AWS_EXTERNAL_ID de la sortie DESCRIBE STAGE. Comme bonne pratique, limitez la capacité de créer des zones de préparation S3 externes à un seul rôle Snowflake.

        Notez que le rôle qui crée une zone de préparation n’est pas nécessairement le même que celui du propriétaire de la zone de préparation (c’est-à-dire le rôle qui dispose du privilège OWNERSHIP sur la zone de préparation). La propriété de la zone de préparation peut être transférée ultérieurement à un rôle différent, sans modification correspondante de la stratégie de confiance.

      Pour des raisons de sécurité, si vous créez une nouvelle intégration de stockage (ou recréez une intégration de stockage existante à l’aide de la syntaxe CREATE OR REPLACE STORAGEINTEGRATION), l’intégration résultante a un ID externe différent et ne pourra donc assumer le rôle IAM sauf si la politique de confiance est modifiée.

      Si vous avez besoin d’une politique de confiance avec un ensemble de restrictions moins sécurisé (c’est-à-dire une politique prenant en charge toutes les zones de préparation externes de votre compte), remplacez random_id dans l’ID externe par un caractère générique (*) :

      snowflake_account_SFCRole=snowflake_role_id_*, par exemple MYACCOUNT_SFCRole=2_* dans l’exemple actuel.

      Cette forme d’ID externe autorise toute zone de préparation S3 externe créée par un utilisateur dans votre compte ayant le même rôle Snowflake (c.-à-d. SYSADMIN) à assumer le rôle IAM, et en retour à tout compartiment S3 le rôle IAM auquel il a accès. Notez que si vous mettez en œuvre ce type de politique de confiance moins sûre, vous devez remplacer le paramètre Condition par StringEquals StringLike.

  6. Cliquez sur le bouton Update Trust Policy.

Vous avez maintenant terminé l’installation unique pour accéder à votre compartiment S3 en utilisant un rôle AWS.

Suivant : Chiffrement des fichiers de données AWS