Come posso copiare o scaricare dati da Amazon Redshift in un bucket Amazon S3 che si trova in un altro account?
Desidero copiare o scaricare dati da Amazon Redshift in un bucket Amazon Simple Storage Service (Amazon S3) che si trova in un altro account AWS, ma non posso assumere il ruolo AWS Identity and Access Management (AWS IAM) nell'altro account. Devo configurare l'accesso multi-account.
Breve descrizione
Per accedere alle risorse Amazon S3 che si trovano in un account diverso, completa i seguenti passaggi:
- Crea un ruolo IAM nell'account Amazon S3 (RoleA).
- Crea un ruolo IAM nell'account Amazon Redshift (RoleB) con le autorizzazioni per assumere il RoleA.
- Verifica l'accesso multi-account tra il RoleA e il RoleB.
Nota: i passaggi precedenti si applicano sia al data warehouse Redshift serverless che a quello Redshift con provisioning e funzionano per tutti i formati di dati. Tuttavia, potresti dover modificare la sintassi dei comandi COPY e UNLOAD per determinati formati di dati. Ad esempio, se utilizzi il formato dati Parquet, devi adottare la seguente sintassi:
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;
Risoluzione
Nota: la procedura seguente presuppone che il cluster Amazon Redshift e il bucket S3 si trovino nella stessa Regione AWS. Se il cluster e il bucket si trovano in Regioni diverse, devi aggiungere il parametro REGION al comando COPY o UNLOAD.
Crea un ruolo IAM nell'account che utilizza Amazon S3 (RoleA)
Completa i seguenti passaggi:
- Apri la console IAM.
- Scegli Policy, quindi seleziona Crea policy.
- Scegli la scheda JSON, quindi aggiungi la seguente policy IAM:
Nota: se il bucket S3 non è crittografato con una chiave del Servizio AWS di gestione delle chiavi (AWS KMS), rimuovi le autorizzazioni AWS KMS.
Nota: sostituisci awsexamplebucket con il nome del bucket S3. Se utilizzi la crittografia con chiave AWS KMS, sostituisci KMS_KEY_ARN_A_Used_for_S3_encryption con l'ARN della chiave 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/*" ] } ] } - Scegli Verifica policy.
- Inserisci un nome per la policy, quindi scegli Crea policy.
- Nel pannello di navigazione, scegli Ruoli.
- Scegli Crea ruolo.
- Scegli Un altro account AWS come ruolo di entità attendibile.
- Inserisci ID account dell'account che utilizza Amazon Redshift.
- Scegli Successivo: Autorizzazioni, quindi seleziona la policy.
- (Facoltativo) Scegli Successivo: Tag, quindi aggiungi i tag.
- Scegli Successivo: Rivedi.
- Inserisci un nome per il ruolo.
- Scegli Crea ruolo.
Crea un ruolo IAM (RoleB) nell'account Amazon Redshift con le autorizzazioni per assumere il RoleA
Completa i seguenti passaggi:
- Apri la console IAM.
- Scegli Policy, quindi seleziona Crea policy.
- Scegli la scheda JSON, quindi aggiungi la seguente policy IAM:
Nota: sostituisci AmazonS3AccountRoleARN con l'ARN di ** RoleA ** (arn:aws:iam::Amazon_S3_Account_ID:role/RoleA).{ "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "AmazonS3AccountRoleARN" } ] } - Scegli Verifica policy.
- Inserisci un nome per la policy, quindi scegli Crea policy.
- Nel pannello di navigazione, scegli Ruoli.
- Scegli Crea ruolo.
- Scegli Servizio AWS come tipo di entità attendibile.
- Scegli Redshift.
- Scegli Redshift - Personalizzabile.
- Scegli Successivo: Autorizzazioni, quindi seleziona la policy.
- (Facoltativo) Scegli Successivo: Tag, quindi aggiungi i tag.
- Scegli Successivo: Rivedi.
- Inserisci un nome per il ruolo.
- Scegli Crea ruolo.
- Collega il RoleB al cluster Amazon Redshift:
Per un cluster Redshift con provisioning, consulta Associazione del ruolo IAM al cluster.
-oppure-
Per Redshift serverless, consulta Concessione delle autorizzazioni ad Amazon Redshift serverless.
Nota: quando concateni i ruoli IAM in Amazon Redshift, il cluster Amazon Redshift assume il RoleB, quindi il RoleB assume il RoleA.
Verifica l'accesso multi-account tra il bucket S3 e Amazon Redshift
Completa i seguenti passaggi:
-
Esegui il comando COPY per importare i dati dal bucket S3 ad 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; -
Per verificare che l'accesso multi-account sia concesso, esegui il comando UNLOAD per scaricare i dati da Amazon Redshift nel bucket 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;
Nota: nei comandi precedenti, sostituisci i seguenti valori:
- table_name: tabella Amazon Redshift in cui stai copiando i dati di Amazon S3
- s3://awsexamplebucket/crosscopy1.csv: percorso del file S3 da cui stai copiando i dati
- Amazon_Redshift_Account_ID: ID account dell'account Amazon Redshift
- Amazon_S3_Account_ID: ID account dell'account Amazon S3
- (Facoltativo) ARN_KMS_KEY_ID: ARN dell'ID della chiave KMS utilizzata per crittografare il bucket S3
Informazioni correlate
Come posso fornire l'accesso multi-account agli oggetti presenti nei bucket Amazon S3?
- Argomenti
- Analytics
- Lingua
- Italiano
Video correlati

