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 ?

Lecture de 5 minute(s)
0

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 résoudre ce problème ?

Brève description

Par défaut, un objet S3 appartient au compte AWS qui l'a chargé. Ceci est vrai même lorsque le compartiment appartient à un autre compte. Par conséquent, lorsque des fichiers de données Amazon Redshift sont placés dans votre compartiment par un autre compte, vous ne disposez pas de l'autorisation par défaut pour ces 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 avec les autorisations d'accès au compartiment. Il s'agit du rôle du compartiment.

2.    Depuis le compte du cluster Amazon Redshift, créer un autre rôle IAM avec les autorisations permettant d'assurer le rôle de compartiment. Il s'agit du rôle du cluster.

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

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

Créez un rôle de compartiment

Depuis le compte du compartiment S3, créez un rôle IAM (rôle de compartiment) avec les 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.     Obtenez 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.

Créez un rôle de cluster

Depuis le compte du cluster Amazon Redshift, créer un autre rôle IAM 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.

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

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

2.    Dans le volet de navigation, choisissez 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 la commande 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.


Informations connexes

Exemples de commande UNLOAD

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an