Il mio bucket Amazon S3 contiene file di dati creati utilizzando il comando UNLOAD da un cluster Amazon Redshift in un altro account. Perché non riesco ad accedere a quei file?

4 minuti di lettura
0

Il mio bucket Amazon Simple Storage Service (Amazon S3) contiene file di dati creati utilizzando il comando UNLOAD da un cluster Amazon Redshift in un altro account AWS. Tuttavia, ricevo un errore 403 di Accesso negato quando provo ad accedere a quei file dal mio account. Come posso risolvere questo problema?

Breve descrizione

Per impostazione predefinita, un oggetto S3 è di proprietà dell'account AWS che lo ha caricato. Questo vale anche quando il bucket è di proprietà di un altro account. Pertanto, quando i file di dati Amazon Redshift vengono inseriti nel bucket da un altro account, non si dispone dell'autorizzazione predefinita per tali file.

Per accedere ai file di dati, un ruolo AWS Identity and Access Management (IAM) con autorizzazioni multi-account deve eseguire nuovamente il comando UNLOAD. Segui questi passaggi per configurare il cluster Amazon Redshift con autorizzazioni multi-account per il bucket:

1.    Dall'account del bucket S3, crea un ruolo IAM con autorizzazioni per il bucket. Questo è il ruolo del bucket.

2.    Dall'account del cluster Amazon Redshift, crea un altro ruolo IAM con le autorizzazioni per assumere il ruolo bucket. Questo è il ruolo del cluster.

3.    Aggiorna il ruolo bucket per concedere l'accesso al bucket, quindi crea una relazione di fiducia con il ruolo del cluster.

4.    Dal cluster Amazon Redshift, esegui il comando UNLOAD utilizzando il ruolo cluster e il ruolo bucket.

Importante: questa soluzione non si applica ai cluster Amazon Redshift o ai bucket S3 che utilizzano la crittografia lato server con il Servizio di gestione delle chiavi AWS (AWS KMS).

Risoluzione

Crea un ruolo bucket

Dall'account del bucket S3, crea un ruolo IAM con le autorizzazioni per il bucket:

1.    Dall'account del bucket S3, apri la console IAM.

2.    Crea un ruolo IAM. Durante la creazione del ruolo, seleziona quanto segue:

Per Seleziona il tipo di entità affidabile, scegli il servizio AWS.

In Scegli il servizio che utilizzerà questo ruolo, scegli Redshift.

Per Seleziona il tuo caso d'uso, scegli Redshift - Personalizzabile.

3.    Dopo aver creato il ruolo IAM, collega una policy che conceda l'autorizzazione al bucket. È possibile utilizzare una policy simile alla seguente:

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

4.Ottieni il nome della risorsa Amazon (ARN) del ruolo bucket. È necessario l'ARN del ruolo per una fase successiva.

Crea un ruolo del cluster

Dall'account del cluster Amazon Redshift, crea un altro ruolo IAM con le autorizzazioni per assumere il ruolo bucket:

1.    Dall'account del cluster Amazon Redshift, apri la console IAM.

2.    Crea un ruolo IAM. Durante la creazione del ruolo, seleziona quanto segue:

Per Seleziona il tipo di entità affidabile, scegli il servizio AWS.

In Scegli il servizio che utilizzerà questo ruolo, scegli Redshift.

Per Seleziona il tuo caso d'uso, scegli Redshift - Personalizzabile.

3.    Dopo aver creato il ruolo IAM, associa al ruolo la seguente policy:

Importante: sostituisci arn:aws:iam::123456789012:role/Bucket_Role con l'ARN del ruolo bucket che hai creato.

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

4.     Ottieni l'ARN del ruolo del cluster. È necessario l'ARN del ruolo per una fase successiva.

Aggiorna il ruolo bucket per creare una relazione di fiducia con il ruolo del cluster

1.    Dall'account del bucket S3, apri la console IAM.

2.    Nel riquadro di navigazione, scegli Ruoli.

3.    Dall'elenco dei ruoli, apri il ruolo bucket che hai creato.

4.    Scegli la scheda Relazioni di fiducia.

5.    Scegli Modifica relazione di fiducia.

6.    Per il Documento di policy, sostituire la policy esistente con la seguente:

Importante: sostituisci arn:aws:iam::012345678901:role/Cluster_Role con l'ARN del ruolo cluster che hai creato.

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

7.    Scegli Aggiorna policy di fiducia.

Dal cluster Amazon Redshift, esegui l'operazione di scaricamento utilizzando il ruolo del cluster e il ruolo bucket

1.    Connettiti al cluster Amazon Redshift.

2.    Esegui il comando UNLOAD con entrambi i ruoli IAM che hai creato, in modo simile a quanto segue:

Importante: sostituisci arn:aws:iam::012345678901:role/Cluster_Role con l'ARN del tuo ruolo cluster. Quindi, sostituisci arn:aws:iam::123456789012:role/Bucket_Role con l'ARN del tuo ruolo bucket.

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

Dopo aver eseguito il comando UNLOAD, i file di dati sono di proprietà dello stesso account del bucket in cui sono archiviati.


Informazioni correlate

Esempi di UNLOAD

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa