Salta al contenuto

Come posso creare un accesso multi-account Amazon Redshift Spectrum ad AWS Glue e Amazon S3?

5 minuti di lettura
0

Desidero utilizzare Amazon Redshift Spectrum per accedere ad AWS Glue e Amazon Simple Storage Service (Amazon S3) in un altro account AWS.

Risoluzione

Crea un ruolo IAM che reputi Amazon Redshift attendibile

Per accedere a risorse AWS con più account utilizzando Amazon Redshift Spectrum, devi creare un ruolo AWS Identity and Access Management (AWS IAM) che reputi Amazon Redshift attendibile. Quindi collega il ruolo al cluster Amazon Redshift.

Completa i seguenti passaggi:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, scegli Ruoli.
  3. Scegli Crea ruolo.
  4. In Select type of trusted entity (Seleziona il tipo di entità attendibile), scegli Servizio AWS.
  5. Scegli Redshift.
  6. Per Seleziona il caso d'uso (Seleziona il caso d'uso), scegli Redshift - Customizable (Redshift - Personalizzabile).
  7. Scegli Next: Permissions (Successivo: autorizzazioni, Next: Tags (Successivo: tag), quindi ** Next: Review** (Successivo: verifica).
    Nota: non è necessario aggiungere policy o tag.
  8. Inserisci un Nome del ruolo, quindi scegli Crea ruolo. Negli esempi seguenti, il ruolo è redshift_role1.
  9. Associa redshift_role1 al cluster Amazon Redshift. L'associazione consente al cluster di assumere il ruolo appena creato per accedere ad Amazon S3, Amazon Athena e AWS Glue.

Crea un nuovo ruolo IAM con accesso ad AWS Glue e Amazon S3

In un altro account, crea un nuovo ruolo IAM con accesso sia ad AWS Glue che ad Amazon S3. Amazon Redshift assume il ruolo per accedere alle risorse AWS Glue e S3 attraverso la relazione di attendibilità.

Completa i seguenti passaggi:

  1. Apri la console IAM.

  2. Scegli Policy, quindi scegli Crea policy.

  3. Scegli la scheda JSON, quindi inserisci una policy IAM simile all'esempio seguente:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Action": [
            "glue:BatchCreatePartition",
            "glue:UpdateDatabase",
            "glue:CreateTable",
            "glue:DeleteDatabase",
            "glue:GetTables",
            "glue:GetPartitions",
            "glue:BatchDeletePartition",
            "glue:UpdateTable",
            "glue:BatchGetPartition",
            "glue:DeleteTable",
            "glue:GetDatabases",
            "glue:GetTable",
            "glue:GetDatabase",
            "glue:GetPartition",
            "glue:CreateDatabase",
            "glue:BatchDeleteTable",
            "glue:CreatePartition",
            "glue:DeletePartition",
            "glue:UpdatePartition"
          ],
          "Resource": "*"
        },
        {
          "Sid": "VisualEditor1",
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucketMultipartUploads",
            "s3:ListBucket",
            "s3:GetBucketLocation",
            "s3:ListMultipartUploadParts"
          ],
          "Resource": [
            "arn:aws:s3:::your_bucket",
            "arn:aws:s3:::your_bucket/*"
          ]
        },
        {
          "Sid": "VisualEditor2",
          "Effect": "Allow",
          "Action": [
            "kms:Decrypt"
          ],
          "Resource": [
            "<KMS_KEY_ARN>"
          ]
        }
      ]
    }

    Nota: sostituisci your_bucket con il nome del bucket S3 a cui desideri accedere con Amazon Redshift Spectrum. Sostituisci KMS_KEY_ARN con l'ARN della chiave KMS che crittografa il tuo bucket S3. Se i file nel bucket S3 sono crittografati, concedi le autorizzazioni appropriate ad Amazon Redshift.

  4. Scegli Verifica policy.

  5. Inserisci un nome per la policy, quindi scegli Crea policy.

  6. Nel pannello di navigazione, scegli Ruoli, quindi scegli Crea ruolo.

  7. Per Select type of trusted entity (Seleziona il tipo di entità attendibile), scegli Un altro account AWS.

  8. Per ID account, inserisci l'ID dell'account che utilizza Amazon Redshift. Per ulteriori informazioni, consulta Utilizzo di un alias per l'ID account AWS.

  9. Scegli Next: Permissions (Successivo: autorizzazioni).

  10. Nell'elenco delle policy, seleziona il nome di quella che hai creato.

  11. Scegli Next: Tags (Successivo: tag), quindi scegli Next: Review (Successivo: verifica).
    Nota: non è necessario aggiungere tag.

  12. Inserisci un Nome del ruolo, quindi scegli Crea ruolo. Negli esempi seguenti, il ruolo è glue_s3_role2.

  13. Nel pannello di navigazione, scegli Ruoli.

  14. Seleziona il nome del ruolo che hai creato, quindi scegli la scheda Relazioni di attendibilità.

  15. Scegli Modifica relazione di attendibilità.

  16. Elimina la policy esistente e sostituiscila con una policy simile all'esempio seguente:

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

Nota: sostituisci redshift_account1 con l'ID dell'account che utilizza Amazon Redshift. Sostituisci redshift_role1 con il nome del primo ruolo che hai creato.

  1. Scegli Aggiorna policy di attendibilità.

Aggiorna le autorizzazioni per il ruolo IAM di Amazon Redshift

Aggiorna le autorizzazioni per il primo ruolo IAM che hai creato. Completa i seguenti passaggi:

  1. Apri la console IAM.

  2. Scegli Ruoli dal pannello di navigazione, quindi scegli il nome del primo ruolo (redshift_role1) che hai creato in precedenza.

  3. In Autorizzazioni, scegli Aggiungi policy inline.

  4. Scegli la scheda JSON. Elimina la policy esistente, quindi inserisci una policy IAM simile all'esempio seguente:

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

    Nota: sostituisci glue_s3_account2 con l'ID dell'account che utilizza AWS Glue e Amazon S3. Sostituisci glue_s3_role2 con il nome del secondo ruolo che hai creato.

  5. Scegli Verifica policy.

  6. Inserisci un nome per la policy, quindi scegli Crea policy.

  7. Connettiti al cluster Amazon Redshift.

  8. Crea uno schema esterno che utilizzi i ruoli che hai creato in entrambi gli account. Vedi l'esempio seguente:

    create external schema spectrum_schema
    from data catalog
    database 'your_db'
    iam_role 'arn:aws:iam::redshift_account1:role/redshift_role1,arn:aws:iam::glue_s3_account2:role/glue_s3_role2'

    Nota: sostituisci i seguenti valori:

    your_db: nome del tuo database in AWS Glue . redshift_account1: ID dell'account Amazon Redshift . redshift_role1: nome del ruolo che hai creato nell'account Amazon Redshift . glue_s3_account2: ID dell'account AWS Glue e Amazon S3 . glue_s3_role2: nome del ruolo che hai creato nell'account AWS Glue e Amazon S3.

    Nell'istruzione Create External Schema DDL, elenca gli ARN dei ruoli IAM nel seguente ordine: redshift_cluster_role, destination_account_role. Non includere spazi tra i ruoli.

Ora puoi utilizzare Amazon Redshift Spectrum dal cluster Amazon Redshift in redshift_account1 per eseguire query sulle tabelle AWS Glue in glue_s3_account2. Tutte le risorse devono trovarsi nella stessa Regione AWS. Non è necessario ricreare le tabelle esterne perché Amazon Redshift Spectrum può accedere alle tabelle AWS Glue esistenti.

La seguente query restituisce il numero di righe in una tabella AWS Glue creata nello schema esterno:

select count(*) from spectrum_schema.glue_table;

Nota: sostituisci spectrum_schema e glue_table con il nome del tuo schema e della tua tabella AWS Glue.

Informazioni correlate

Autorizzazione di Amazon Redshift ad accedere ai servizi AWS per tuo conto

Policy IAM per Amazon Redshift Spectrum

AWS UFFICIALEAggiornata 7 mesi fa