Perché il mio processo AWS Glue restituisce l'errore “403 Access Denied”?
Il mio processo AWS Glue restituisce l'errore “403 Access Denied” quando tenta di leggere o scrivere in un bucket Amazon Simple Storage Service (Amazon S3).
Breve descrizione
I seguenti esempi sono i motivi più comuni per cui potresti ricevere un errore "Access Denied":
- Il ruolo AWS Identity and Access Management (AWS IAM) non ha le 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.
- La policy dell'endpoint di Amazon Virtual Private Cloud (Amazon VPC) non include le autorizzazioni necessarie per accedere al bucket S3.
- L'oggetto è crittografato dal Servizio AWS di gestione delle chiavi (AWS SSE-KMS) La policy di AWS KMS non concede le autorizzazioni minime richieste al ruolo IAM per utilizzare la chiave.
- Nel bucket S3 è attivata l'opzione Pagamento a carico del richiedente.
- L'accesso al bucket S3 è limitato dalle policy di controllo dei servizi di AWS Organizations.
Risoluzione
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Aggiorna le autorizzazioni del ruolo IAM per accedere al bucket S3
Il ruolo IAM che esegue il processo AWS Glue richiede l'accesso al bucket S3. Collega al ruolo IAM una policy IAM per concedergli le autorizzazioni richieste. È anche consigliabile collegare al ruolo IAM la policy gestita AWSGlueServiceRole affinché siano fornite le autorizzazioni di base per i processi AWS Glue. Inoltre, crea e collega una policy gestita dal cliente per autorizzare l'inserimento di oggetti S3 durante la scrittura.
Per aggiornare le autorizzazioni di accesso al bucket del ruolo IAM, completa i seguenti passaggi:
- Apri la console IAM.
- Apri il ruolo IAM associato al processo AWS Glue che richiede l'accesso al bucket.
- Nella scheda Autorizzazioni dell'utente IAM o del ruolo IAM, espandi ogni policy per visualizzare il documento relativo alla policy JSON.
- 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. Se il ruolo IAM non concede l'accesso richiesto al bucket, aggiungi una policy che conceda le autorizzazioni corrette. Ad esempio, la seguente policy IAM garantisce al ruolo IAM l'accesso per l'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/*" ] } ] }
Nota: sostituisci DOC-EXAMPLE-BUCKET nella policy con il nome del tuo bucket S3.
Aggiorna la policy del bucket per concedere le autorizzazioni richieste al ruolo IAM
Verifica nella configurazione della policy del bucket se:
- Sono presenti istruzioni che negano esplicitamente l'accesso del ruolo IAM al bucket
- Mancano autorizzazioni e condizioni, per cui l'accesso del ruolo IAM è limitato
Procedi come segue per rivedere e modificare la policy del bucket in modo da concedere l'accesso richiesto al ruolo IAM:
- Apri la console Amazon S3.
- Nel pannello di navigazione, scegli Bucket.
- Seleziona il bucket S3.
- Nella pagina Autorizzazioni, in Policy del bucket, esamina la policy del bucket per individuare eventuali istruzioni che negano l'accesso del ruolo al bucket.
- Modifica la policy del bucket per modificare o rimuovere tutte le istruzioni che negano l'accesso del ruolo IAM al bucket.
Per esempi di policy di bucket, consulta Esempi di policy di bucket Amazon S3.
Aggiorna il proprietario di un oggetto
Per impostazione predefinita, l'account AWS che carica un oggetto è il proprietario dell'oggetto S3. Questa impostazione è valida anche quando il bucket è di proprietà di un altro account. Se altri account possono caricare oggetti nel bucket, controlla a quale account appartengono gli oggetti a cui l'identità IAM non può accedere. Per verificare a quale account appartiene l'oggetto, esegui il comando GetObjectAcl.
Se le identità IAM di altri account caricano oggetti nel bucket S3, configura S3 Object Ownership. Quindi aggiungi una policy del bucket che richieda il caricamento degli oggetti con la lista di controllo degli accessi (ACL) bucket-owner-full-control. Quando aggiungi la policy del bucket, la policy cambia automaticamente il proprietario dell'oggetto in proprietario del bucket quando l'oggetto viene caricato con l'ACL bucket-owner-full-control. Per ulteriori informazioni, consulta Come posso chiedere agli utenti di altri account AWS che caricano oggetti sul mio bucket Amazon S3 di concedermi il pieno controllo sugli oggetti caricati?
Aggiorna la policy dell'endpoint di Amazon VPC
Aggiorna la policy dell'endpoint VPC per includere le autorizzazioni richieste per accedere ai bucket e agli oggetti S3 quando entrambe le seguenti condizioni sono vere:
- Il processo AWS Glue legge o scrive oggetti in S3.
- La connessione utilizza un endpoint VPC per l'indirizzamento verso Amazon S3.
Ad esempio, la seguente policy dell'endpoint VPC consente l'accesso solo al bucket DOC-EXAMPLE-BUCKET. Se il bucket non è elencato come risorsa consentita nella policy, gli utenti o i ruoli non possono utilizzare l'endpoint VPC per accedervi:
{ "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
Nota: sostituisci DOC-EXAMPLE-BUCKET nella policy con il nome del tuo bucket S3.
Se utenti o ruoli caricano oggetti con un'ACL, devi aggiornare la policy dell'endpoint VPC per concedere 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/*" } ] }
Aggiorna la policy della chiave AWS KMS per consentire l'accesso al ruolo IAM
Se il processo di estrazione, trasformazione e caricamento (ETL) legge o scrive dati crittografati in Amazon S3, il processo deve avere le seguenti configurazioni:
- La policy del ruolo IAM include le autorizzazioni richieste per le azioni di AWS KMS.
- La policy della chiave AWS KMS include le autorizzazioni richieste per il ruolo IAM.
Per consentire le azioni di AWS KMS necessarie, includi le seguenti autorizzazioni nella policy del ruolo IAM:
{ "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" } }
Nota: sostituisci il nome della risorsa Amazon (ARN) nella policy con l'ARN di tua scelta.
Per ulteriori informazioni, consulta Configurazione della crittografia in AWS Glue.
Esamina la policy della chiave KMS per verificare se consente l'accesso al ruolo del processo AWS Glue. Per ulteriori informazioni sulle policy della chiave, consulta Policy della chiave in AWS KMS.
Verifica l'opzione Pagamento a carico del richiedente nel bucket S3
Se il bucket S3 ha l'opzione Pagamento a carico del richiedente attivata, tutte le richieste al bucket dal processo AWS Glue devono includere l'intestazione Requester Pays. Per impostazione predefinita, le richieste di AWS Glue ad Amazon S3 non includono l'intestazione Requester Pays. Senza questa intestazione, una chiamata API a un bucket Requester Pays ha esito negativo con un'eccezione "Access Denied". Per aggiungere l'intestazione Requester Pays a uno script ETL, utilizza hadoopConfiguration().set() per includere fs.s3.useRequesterPaysHeader nella variabile GlueContext o nella variabile di sessione Apache Spark. Per ulteriori informazioni, consulta Come posso accedere ai bucket con Pagamento a carico del richiedente in Amazon S3 da AWS Glue, Amazon EMR o Amazon Athena?
Verifica le policy di controllo dei servizi di AWS Organizations
Se utilizzi AWS Organizations, verifica le policy di controllo dei servizi per assicurarti che consentano l'accesso ad Amazon S3. Ad esempio, la seguente policy nega esplicitamente l'accesso ad Amazon S3 e genera un errore "Access Denied":
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }
Per ulteriori informazioni, consulta Abilitazione di tutte le funzionalità per un'organizzazione con AWS Organizations.
Informazioni correlate
Come faccio a risolvere gli errori 403 Access Denied di Amazon S3?

Contenuto pertinente
- AWS UFFICIALEAggiornata 6 mesi fa