Come posso risolvere gli errori di accesso negato in Redshift Spectrum con bucket Amazon S3 nello stesso account di Amazon Redshift?

3 minuti di lettura
0

Desidero accedere ai dati archiviati nei bucket Amazon Simple Storage Service (Amazon S3) all'interno dello stesso account AWS del mio cluster Amazon Redshift. Inoltre, desidero accedere ai dati in Amazon Redshift Spectrum con AWS Glue come Catalogo dati. Tuttavia, ricevo errori di autorizzazione.

Breve descrizione

Il ruolo AWS Identity and Access Management (IAM) collegato al cluster Redshift deve disporre delle autorizzazioni per AWS Glue e Amazon S3. Se il ruolo IAM non dispone delle autorizzazioni corrette, potresti ricevere un messaggio di errore.

Quando crei uno schema esterno, potresti ricevere il seguente messaggio di errore:

"SQL Error [XX000]: ERROR: User: arn:aws:sts::111111111111:assumed-role/KCARole/RedshiftIamRoleSession is not authorized to perform: glue:CreateDatabase on resource: arn:aws:glue:eu-west-1:111111111111:catalog because no identity-based policy allows the glue:CreateDatabase action"

Quando esegui una query su una tabella Redshift Spectrum, potresti ricevere il seguente messaggio di errore:

"SQL Error [XX000]: ERROR: Spectrum Scan Error Detail: ----------------------------------------------- error: Spectrum Scan Error code: 15007 context: Forbidden: HTTP response error code: 403 Message: AccessDenied Access Denied"

Quando esegui una query su una tabella Redshift Spectrum e il bucket S3 utilizza una chiave di crittografia del Servizio AWS di gestione delle chiavi (AWS KMS), potresti ricevere il seguente messaggio di errore:

"SQL Error [XX000]: ERROR: Spectrum Scan Error Detail: ----------------------------------------------- error: Spectrum Scan Error code: 15007 context: Forbidden: HTTP response error code: 403 Message: AccessDenied The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access"

Per risolvere questi errori, devi collegare una policy IAM con le autorizzazioni richieste al ruolo IAM utilizzato da Amazon Redshift. Se hai utilizzato una chiave AWS KMS per crittografare il bucket S3, devi aggiungere anche le autorizzazioni per utilizzare la chiave.

Risoluzione

Crea una policy IAM. Quindi collega le seguenti policy al ruolo IAM collegato al cluster Redshift.

Collega la policy gestita da AWS AWSGlueConsoleFullAccess.

Utilizza il seguente esempio di policy che consente l'accesso in lettura al bucket S3 in cui memorizzi i dati:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Allows Redshift to Read S3 bucket specified",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::bucket name/*",
        "arn:aws:s3:::bucket name"
      ]
    }
  ]
}

Nota: sostituiscibucket name con il nome del tuo bucket S3.

Per un bucket crittografato con chiave AWS KMS, collega la seguente policy IAM che fornisce le autorizzazioni minime per consentire a Redshift Spectrum di decrittografare i dati crittografati in Amazon S3:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Allow Redshift to use the KMS key",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": [
        "arn:aws:kms:region:AWS account ID:key/KMS key ID"
      ]
    }
  ]
}

Nota: sostituisci region con la Regione AWS in cui si trova il tuo bucket S3. Inoltre, sostituisci AWS account ID con l'ID del tuo account e KMS key ID con la chiave di crittografia KMS.

Informazioni correlate

How can I create Amazon Redshift Spectrum cross-account access to AWS Glue and Amazon S3? (Come posso creare un accesso multi-account Amazon Redshift Spectrum ad AWS Glue e Amazon S3?)

Policy IAM per Amazon Redshift Spectrum

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 mesi fa