Mon compartiment Amazon S3 contient des fichiers de données créés à l'aide de la commande UNLOAD à partir d'un cluster Amazon Redshift dans un autre compte. Pourquoi est-il impossible d'accéder à ces fichiers ?

Date de la dernière mise à jour : 29/07/2019

Mon compartiment Amazon Simple Storage Service (Amazon S3) contient des fichiers de données créés à l'aide de la commande UNLOAD à partir d'un cluster Amazon Redshift dans un autre compte AWS. Toutefois, je reçois des erreurs de refus d'accès 403 lorsque j'essaie d'accéder à ces fichiers à partir de mon propre compte. Comment éliminer cette erreur ? 

Brève description

Par défaut, un objet S3 est détenu par le compte AWS qui l'a chargé. C’est le cas même si le compartiment est détenu par un autre compte. Étant donné que les fichiers de données Amazon Redshift créés par la commande UNLOAD ont été placés dans votre compartiment par un autre compte, vous, le propriétaire du compartiment, n'êtes pas autorisé par défaut à accéder aux fichiers.

Pour pouvoir y accéder, un rôle AWS Identity and Access Management (IAM) ayant des autorisations entre comptes doit exécuter de nouveau la commande UNLOAD. Procédez comme suit pour configurer le cluster Amazon Redshift avec des autorisations entre comptes dans le compartiment :

1.    Depuis le compte du compartiment S3, créez un rôle IAM (rôle de compartiment) avec les autorisations d'accès au compartiment.

2.    Depuis le compte du cluster Amazon Redshift, créez un autre rôle IAM (rôle de cluster) avec les autorisations permettant d'assurer le rôle de compartiment.

3.    Mettez à jour le rôle de compartiment pour accorder l'accès au compartiment et créer une relation d'approbation avec le rôle de compartiment.

4.    Depuis le cluster Amazon Redshift, exécutez la commande UNLOAD à l'aide du rôle de cluster et du rôle de compartiment.

Important : cette solution ne s'applique pas aux clusters Amazon Redshift ni aux compartiments S3 qui utilisent le chiffrement côté serveur avec AWS Key Management Service (AWS KMS).

Solution

Depuis le compte du compartiment S3, créer un rôle IAM (rôle de compartiment) avec des autorisations d'accès au compartiment

1.    Depuis le compte du compartiment S3, ouvrez la console IAM.

2.    Créez un rôle IAM. Lors de la création du rôle, sélectionnez les éléments suivants :
Dans la section Select type of trusted entity (Sélectionner le type d'entité de confiance), sélectionnez AWS service (Service AWS).
Dans la section Choose the service that will use this role (Choisir le service qui utilisera ce rôle), choisissez Redshift.
Pour Select your use case (Sélectionner votre cas d'utilisation), choisissez Redshift - Customizable (Redshift - Personnalisable).

3.    Une fois le rôle IAM créé, associez une stratégie qui accorde l'accès au compartiment. Vous pouvez utiliser une stratégie similaire celle-ci :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234537676482",
      "Action": [
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::awsexamplebucket/*",
        "arn:aws:s3:::awsexamplebucket"
      ]
    }
  ]
}

4.    Obtenir l’Amazon Resource Name (ARN) du rôle de compartiment. Vous aurez besoin de l'ARN du rôle lors d’une étape ultérieure.

Depuis le compte du cluster Amazon Redshift, créer un autre rôle IAM (rôle de cluster) avec les autorisations permettant d'assurer le rôle de compartiment

1.    Depuis le compte du cluster Amazon Redshift, ouvrez la console IAM.

2.    Créez un rôle IAM. Lors de la création du rôle, sélectionnez les éléments suivants :
Dans la section Select type of trusted entity (Sélectionner le type d'entité de confiance), sélectionnez AWS service (Service AWS).
Dans la section Choose the service that will use this role (Choisir le service qui utilisera ce rôle), choisissez Redshift.
Pour Select your use case (Sélectionner votre cas d'utilisation), choisissez Redshift - Customizable (Redshift - Personnalisable).

3.    Une fois le rôle IAM créé, associez la stratégie suivante au rôle :

Important : remplacez arn:aws:iam::123456789012:role/Bucket_Role par l'ARN du rôle de compartiment que vous avez créé.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234537501110",
      "Action": [
        "sts:AssumeRole"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:iam::123456789012:role/Bucket_Role"
    }
  ]
}

4.    Obtenez l'ARN du rôle de cluster. Vous aurez besoin de l'ARN du rôle lors d’une étape ultérieure.

Mettre à jour le rôle compartiment pour créer une relation d'approbation avec le rôle de compartiment

1.    Depuis le compte du compartiment S3, ouvrez la console IAM.

2.    Dans le volet de navigation, choisissez Roles (Rôles).

3.    Dans la liste des rôles, ouvrez le rôle de compartiment que vous avez créé.

4.    Choisissez l’onglet Trust relationships (Relations d'approbation).

5.    Choisissez Edit trust relationship (Modifier la relation d'approbation).

6.    Pour Policy Document (Document de stratégie), remplacez la stratégie existante par ce qui suit :

Important : remplacez arn:aws:iam::012345678901:role/Cluster_Role par l'ARN du rôle que vous avez créé.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::012345678901:role/Cluster_Role"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

7.    Choisissez ensuite Update Trust Policy (Mettre à jour la stratégie d'approbation).

Depuis le cluster Amazon Redshift, exécutez l'opération de déchargement en utilisant le rôle de cluster et le rôle de compartiment.

1.    Connectez-vous au cluster Amazon Redshift.

2.    Exécutez lacommande UNLOAD avec les deux rôles IAM que vous avez créés, d'une manière similaire à celle-ci :

Important : remplacez arn:aws:iam::012345678901:role/Cluster_Role par le nom ARN du rôle de cluster. Ensuite, remplacez arn:aws:iam::123456789012:role/Bucket_Role par l'ARN de votre rôle de compartiment.

unload ('select * from TABLE_NAME')
to 's3://awsexamplebucket' 
iam_role 'arn:aws:iam::012345678901:role/Cluster_Role,arn:aws:iam::123456789012:role/Bucket_Role';

Une fois la commande UNLOAD exécutée, les fichiers de données sont détenus par le même compte que le compartiment dans lequel ils sont stockés.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?