Perché il mio lavoro AWS Glue restituisce l'errore 403 Access Denied?

7 minuti di lettura
0

Il mio lavoro AWS Glue restituisce l'errore 403 Access Denied quando il lavoro cerca di leggere/scrivere in un bucket Amazon Simple Storage Service (Amazon S3).

Breve descrizione

Di solito viene visualizzato un errore di accesso negato per uno dei seguenti motivi:

  • Il ruolo AWS Identity and Access Management (IAM) non dispone delle autorizzazioni necessarie per accedere al bucket.
  • Le policy dei bucket di Amazon S3 non consentono le autorizzazioni richieste per il ruolo IAM.
  • Il proprietario del bucket S3 è diverso dal proprietario dell'oggetto.
  • Il criterio dell'endpoint di Amazon Virtual Private Cloud (Amazon VPC) non include le autorizzazioni necessarie per accedere al bucket S3.
  • L'oggetto è crittografato da AWS Key Management Service (AWS KMS) e il criterio di AWS KMS non concede le autorizzazioni minime richieste al ruolo IAM per l'utilizzo della chiave.
  • Il bucket S3 ha Requester Pays attivato.
  • L'accesso al bucket S3 è limitato dalle politiche di controllo dei servizi di AWS Organizations.

Nota: Se ricevi errori durante l'esecuzione dei comandi dell'interfaccia a riga di comando di AWS, assicurati di utilizzare la versione più recente dell'interfaccia a riga di comando di AWS.

Risoluzione

Assicurati che il ruolo IAM disponga delle autorizzazioni necessarie per accedere al bucket S3

Il ruolo IAM che esegue il job AWS Glue richiede l'accesso al bucket S3. Puoi concedere le autorizzazioni richieste al ruolo IAM allegando una policy IAM al ruolo IAM. Inoltre, è buona norma allegare il criterio gestito AWSGlueServiceRole al ruolo IAM per verificare che vengano fornite le autorizzazioni di base per il lavoro di AWS Glue. Inoltre, crea e allega una politica gestita dal cliente per le autorizzazioni a inserire oggetti S3 durante la scrittura.

Effettua le seguenti operazioni per aggiornare le autorizzazioni del ruolo IAM per accedere al bucket:

1.    Apri la console IAM.

2.    Apri il ruolo IAM associato al job AWS Glue e che richiede l'accesso al bucket.

3.    Nella scheda Autorizzazioni dell'utente IAM o del ruolo IAM, espandi ogni policy per visualizzare il documento relativo alla policy JSON.

4.    Nei documenti sulle policy JSON, cerca le policy con il nome del bucket. Quindi, conferma che tali policy consentano le azioni S3 corrette sul bucket.

5.    Se l'utente IAM o il ruolo IAM non concede l'accesso al bucket, aggiungi una policy che conceda le autorizzazioni corrette. Ad esempio, il seguente criterio IAM garantisce al ruolo IAM l'accesso all'inserimento di oggetti (s3:PutObject) nel bucket S3 DOC-EXAMPLE-BUCKET:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": "s3:PutObject",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ]
    }
  ]
}

Assicurati di sostituire DOC-EXAMPLE-BUCKET nella policy con il nome del tuo bucket S3.

Assicurati che la policy del bucket conceda le autorizzazioni richieste per il ruolo IAM

Consulta la policy relativa ai bucket per quanto segue:

  • Qualsiasi dichiarazione che neghi esplicitamente l'accesso del ruolo IAM al bucket
  • Eventuali autorizzazioni e condizioni mancanti che potrebbero limitare l'accesso del ruolo IAM

Procedi come segue per rivedere e modificare la policy del bucket per concedere l'accesso richiesto al ruolo IAM:

1.    Apri la console Amazon S3.

2.    Scegli Bucket dal riquadro di navigazione.

3.    Dall'elenco dei bucket, apri il bucket che desideri controllare.

4.    Scegli Autorizzazioni, quindi scorri verso il basso fino alla sezione Policy Bucket.

5.    Rivedi la politica del bucket per tutte le dichiarazioni che negano l'accesso del ruolo al bucket.

6.    Modifica la policy del bucket per modificare o rimuovere tutte le istruzioni che negano l'accesso del ruolo IAM al bucket.

Per esempi di politiche dei bucket, vedere Esempi di policy dei bucket.

Assicurati che il proprietario del bucket S3 abbia accesso agli oggetti

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. Se altri account possono caricare oggetti nel tuo bucket, controlla quale account possiede gli oggetti a cui i tuoi utenti/ruoli non possono accedere. È possibile controllare il proprietario dell'oggetto eseguendo il comando GetObjectAcl.

Se gli utenti/ruoli IAM di altri account caricano oggetti nel tuo bucket S3, configura S3 Object Ownership. Quindi, aggiungi un criterio per il bucket che richiede il caricamento degli oggetti con l'elenco di controllo degli accessi (ACL) bucket-owner-full-control. L'aggiunta del criterio del bucket cambia automaticamente il proprietario dell'oggetto in quello del bucket quando l'oggetto viene caricato con l'ACL bucket-owner-full-control. Per ulteriori informazioni, consulta Quando altri account AWS caricano oggetti sul mio bucket Amazon S3, come posso richiedere che mi concedano il pieno controllo degli oggetti?

Assicurati che la politica degli endpoint di Amazon VPC consenta le azioni richieste sul bucket S3

Assicurati che la policy degli endpoint VPC includa le autorizzazioni necessarie per accedere ai bucket e agli oggetti S3 quando si verificano entrambe le seguenti condizioni:

  • Il tuo job AWS Glue legge o scrive oggetti in S3.
  • La connessione viene indirizzata a S3 utilizzando un endpoint VPC.

Ad esempio, la seguente policy sugli endpoint VPC consente l'accesso solo al bucket DOC-EXAMPLE-BUCKET. Se il bucket non è elencato come risorsa consentita nella policy, gli utenti/ruoli non possono accedere al bucket tramite l'endpoint VPC.

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Assicurati di sostituire DOC-EXAMPLE-BUCKET nella policy con il nome del tuo bucket S3.

Se gli utenti/ruoli caricano gli oggetti con una ACL, devi aggiornare i criteri dell'endpoint VPC per garantire l'accesso all'azione PutObjectAcl. Ad esempio:

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Assicurati che la policy della chiave AWS KMS consenta l'accesso al ruolo IAM

Se il tuo lavoro di estrazione, trasformazione e caricamento (ETL) legge o scrive dati criptati su Amazon S3, assicurati di quanto segue:

  • La politica del ruolo IAM include le autorizzazioni necessarie per le azioni di AWS KMS.
  • La politica della chiave AWS KMS include le autorizzazioni richieste per il ruolo IAM.

Includi le seguenti autorizzazioni nella politica del ruolo IAM per consentire le azioni AWS KMS necessarie:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Decrypt",
      "kms:Encrypt",
      "kms:GenerateDataKey"
    ],
    "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }
}

Assicurati di sostituire l'ARN nella polizza con l'ARN di tua scelta.

Per ulteriori informazioni, consulta Configurazione della crittografia in AWS Glue.

Esamina la policy chiave KMS per verificare se la policy consente l'accesso al ruolo del lavoro di AWS Glue. Per ulteriori informazioni sulle policy chiave, consulta Utilizzo delle policy chiave in AWS KMS.

Assicurati di includere l'intestazione Requester Pays se il bucket ha Requester Pays attivato

Se il bucket S3 ha Requester Pays attivato, tutte le richieste al bucket dal job AWS Glue devono includere l'intestazione Requester Pays. Le richieste di AWS Glue ad Amazon S3 non includono l'intestazione Requester Pays per impostazione predefinita. Senza questa intestazione, una chiamata API a un bucket Requester Pays fallisce con un'eccezione Access Denied. Per aggiungere l'intestazione Requester Pays a uno script ETL, usa hadoopConfiguration().set() per includere fs.s3.useRequesterPaysHeader nella variabile GlueContext o nella variabile di sessione di Apache Spark.

Per ulteriori informazioni, vedi Come posso accedere ai bucket Amazon S3 Requester Pays da AWS Glue, Amazon EMR o Amazon Athena?

Assicurati che le policy di controllo dei servizi di AWS Organizations consentano l'accesso a S3

Se utilizzi AWS Organizations, consulta le politiche di controllo dei servizi per assicurarti che l'accesso ad Amazon S3 sia consentito. Ad esempio, la seguente policy nega esplicitamente l'accesso ad Amazon S3 e genera un errore di accesso negato.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

Per ulteriori informazioni, consulta Attivazione di tutte le funzionalità dell'organizzazione.


Informazioni correlate

In che modo è possibile risolvere gli errori 403 di accesso negato da Amazon S3?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa