Comment puis-je copier ou décharger des données depuis Amazon Redshift vers un compartiment Amazon S3 qui se trouve dans un autre compte ?

Lecture de 5 minute(s)
0

Je souhaite copier ou décharger des données depuis Amazon Redshift vers un compartiment Amazon Simple Storage Service (Amazon S3) qui se trouve dans un autre compte AWS. Mais je ne peux pas endosser le rôle AWS Identity and Access Management (IAM) dans l'autre compte. Je dois configurer l'accès intercompte.

Brève description

Pour accéder aux ressources Amazon S3 qui se trouvent dans un autre compte, procédez comme suit :

  1. Créez un rôle IAM dans le compte Amazon S3 (RoleA).
  2. Créez un rôle IAM dans le compte Amazon Redshift (RoleB) avec les autorisations nécessaires pour endosser le rôle RoleA.
  3. Testez l'accès intercompte entre RoleA et RoleB.

Remarque : Les étapes précédentes s'appliquent à la fois à l'entrepôt de données sans serveur Redshift et à l'entrepôt de données provisionné par Redshift et fonctionnent pour tous les formats de données. Cependant, il se peut que vous deviez modifier la syntaxe des commandes COPIER et DÉCHARGER pour certains formats de données. Par exemple, si vous utilisez le format de données Parquet, vous devez utiliser la syntaxe suivante :

COPY table_name FROM 's3://awsexamplebucket/crosscopy1.csv' IAM_ROLE 'arn:aws:iam::Amazon_Redshift_Account_ID:role/RoleB,arn:aws:iam::Amazon_S3_Account_ID:role/RoleA FORMAT AS PARQUET;

Résolution

Remarque : La procédure suivante part du principe que le cluster Amazon Redshift et le compartiment S3 se trouvent dans la même région AWS. Si votre cluster et votre compartiment se trouvent dans des régions différentes, vous devez ajouter le paramètre RÉGION à la commande COPIER ou DÉCHARGER

Créer un rôle IAM dans le compte qui utilise Amazon S3 (RoleA)

Procédez comme suit :

  1. Ouvrez la console IAM.
  2. Sélectionnez Stratégies, puis Créer une stratégie.
  3. Sélectionnez l'onglet JSON, puis saisissez la stratégie IAM suivante :
    Remarque : Si le compartiment S3 n'est pas chiffré avec une clé AWS Key Management Service (AWS KMS), supprimez les autorisations AWS KMS.
    {  
       "Version": "2012-10-17",  
       "Statement": [  
        {  
          "Sid": "VisualEditor0",  
          "Effect": "Allow",  
          "Action": [  
            "kms:Decrypt",  
            "kms:Encrypt",  
            "kms:GenerateDataKey"  
          ],  
          "Resource": [  
            "<KMS_KEY_ARN_A_Used_for_S3_encryption>"  
          ]  
        },  
        {  
          "Sid": "VisualEditor1",  
          "Effect": "Allow",  
          "Action": [  
            "s3:PutObject",  
            "s3:Get*",  
            "s3:List*"  
          ],  
          "Resource": [  
            "arn:aws:s3:::awsexamplebucket",  
            "arn:aws:s3:::awsexamplebucket/*"  
          ]  
        }  
      ]  
    }
    Remarque : Remplacez awsexamplebucket par le nom du compartiment S3. Si vous utilisez le chiffrement par clé AWS KMS, remplacez KMS_KEY_ARN_A_Used_for_S3_encryption par l'ARN de la clé AWS KMS.
  4. Sélectionnez Vérifier la stratégie.
  5. Saisissez un nom pour la stratégie, puis sélectionnez Créer une stratégie.
  6. Dans le volet de navigation, sélectionnez Rôles.
  7. Sélectionnez Créer un rôle.
  8. Sélectionnez **Un autre compte AWS ** comme rôle d'entité de confiance.
  9. Saisissez l'ID de compte du compte qui utilise Amazon Redshift.
  10. Sélectionnez Suivant : Autorisations, puis sélectionnez la stratégie.
  11. (Facultatif) Sélectionnez Suivant : Identifications, puis ajoutez-en.
  12. Sélectionnez Suivant : Vérification.
  13. Saisissez un nom de rôle.
  14. Sélectionnez Créer un rôle.

Créer un rôle IAM (rôle B) dans le compte Amazon Redshift avec l'autorisation d'endosser le rôle RoleA

Procédez comme suit :

  1. Ouvrez la console IAM.
  2. Sélectionnez Stratégies, puis Créer une stratégie.
  3. Sélectionnez l'onglet JSON, puis saisissez la stratégie IAM suivante :
    {  
      "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Sid": "CrossAccountPolicy",  
          "Effect": "Allow",  
          "Action": "sts:AssumeRole",  
          "Resource": "AmazonS3AccountRoleARN"  
        }  
      ]  
    }
    Remarque : Remplacez AmazonS3AccountRoleARN par l’ARN pour RoleA (arn:aws:iam::Amazon_S3_Account_ID:role/RoleA).
  4. Sélectionnez Vérifier la stratégie.
  5. Saisissez un nom pour la stratégie, puis sélectionnez Créer une stratégie.
  6. Dans le volet de navigation, sélectionnez Rôles.
  7. Sélectionnez Créer un rôle.
  8. Sélectionnez Service AWS comme type d'entité de confiance.
  9. Sélectionnez Redshift.
  10. Sélectionnez ** Redshift - Personnalisable**.
  11. Sélectionnez Suivant : Autorisations, puis sélectionnez la stratégie.
  12. (Facultatif) Sélectionnez Suivant : Identifications, puis ajoutez-en.
  13. Sélectionnez Suivant : Vérification.
  14. Saisissez un nom de rôle.
  15. Sélectionnez Créer un rôle.
  16. Attachez le RoleB à votre cluster Amazon Redshift :
    Pour un cluster Redshift provisionné, consultez la section Associer le rôle IAM à votre cluster.
    -ou-
    Pour Redshift sans serveur, consultez la section Octroi d'autorisations à Amazon Redshift sans serveur.

Remarque : Lorsque vous chaînez des rôles IAM dans Amazon Redshift, le cluster Amazon Redshift endosse le rôle RoleB, puis RoleB endosse le rôle RoleA

Tester l'accès intercompte entre votre compartiment S3 et Amazon Redshift

Procédez comme suit :

  1. Exécutez la commande COPIER pour importer des données depuis votre compartiment S3 vers Amazon Redshift :

    COPY table_name FROM 's3://awsexamplebucket/crosscopy1.csv' IAM_ROLE 'arn:aws:iam::Amazon_Redshift_Account_ID:role/RoleB,arn:aws:iam::Amazon_S3_Account_ID:role/RoleA' DELIMITER ',' REMOVEQUOTES;
  2. Pour vérifier que l'accès intercompte est autorisé, exécutez la commande DÉCHARGER pour décharger les données d'Amazon Redshift vers votre compartiment S3 :

    UNLOAD ('SELECT * FROM table_name') TO 's3://awsexamplebucket/folder/table_name_' IAM_ROLE 'arn:aws:iam::Amazon_Redshift_Account_ID:role/RoleB,arn:aws:iam::Amazon_S3_Account_ID:role/RoleA' KMS_KEY_ID 'ARN_KMS_KEY_ID' ENCRYPTED;

Remarque : Dans les commandes précédentes, remplacez les valeurs suivantes par les vôtres :

  • table_name : Tableau Amazon Redshift dans lequel vous copiez les données Amazon S3
  • s3://awsexamplebucket/crosscopy1.csv : Chemin du fichier S3 à partir duquel vous copiez les données
  • Amazon_Redshift_Account_ID : ID de compte du compte Amazon Redshift
  • Amazon_S3_Account_ID : ID de compte du compte Amazon S3
  • (Facultatif) ARN_KMS_KEY_ID : ARN de l'ID de clé KMS que vous avez utilisé pour chiffrer le compartiment S3

Informations connexes

Comment puis-je fournir un accès intercompte à des objets se trouvant dans des compartiments Amazon S3 ?

Comment puis-je copier des objets S3 depuis un autre compte AWS ?

Autorisations IAM pour COPIER, DÉCHARGER et CRÉER UNE BIBLIOTHÈQUE

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois