Perché la mia richiesta Amazon EMR fallisce con un HTTP 403 "Accesso negato" AmazonS3Exception?
Quando invio una richiesta a un cluster Amazon EMR, la richiesta ha esito negativo con un'eccezione HTTP 403 "Accesso negato" AmazonS3Exception.
Risoluzione
Se non si configurano correttamente le autorizzazioni, si potrebbe ottenere un errore di "Accesso negato" su Amazon EMR o Amazon Simple Storage Service (Amazon S3).
Esempio di messaggio di errore:
java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 8B28722038047BAA; S3 Extended Request ID: puwS77OKgMrvjd30/EY4CWlC/AuhOOSNsxfI8xQJXMd20c7sCq4ljjVKsX4AwS7iuo92C9m+GWY=), S3 Extended Request ID: puwS77OKgMrvjd30/EY4CWlC/AuhOOSNsxfI8xQJXMd20c7sCq4ljjVKsX4AwS7iuo92C9m+GWY=
Controllo delle credenziali o del ruolo IAM specificato nel codice dell'applicazione
Nota: se si verificano errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI (Risoluzione degli errori per AWS CLI). Inoltre, assicurati di utilizzare la versione più recente dell'interfaccia della linea di comando AWS (AWS CLI).
Esegui il comando ls sul nodo primario del cluster Amazon EMR:
aws s3 ls s3://doc-example-bucket/abc/
Nota: sostituisci s3://doc-example-bucket/abc/ con il tuo percorso Amazon S3.
Se il comando precedente ha esito positivo, le credenziali o il ruolo AWS Identity and Access Management (IAM) stanno causando l'errore Accesso negato.
Per risolvere questo problema, completa i passaggi seguenti:
- Conferma che l'applicazione utilizza le credenziali previste o assume il ruolo IAM previsto.
- Per verificare che il ruolo disponga delle autorizzazioni per il percorso Amazon S3, utilizza l'interfaccia della linea di comando AWS (AWS CLI) per assumere il ruolo IAM. Effettua quindi una richiesta di esempio sul percorso S3.
Verifica della policy per il ruolo del profilo dell'istanza Amazon EC2
Se il profilo dell'istanza Amazon Elastic Compute Cloud (Amazon EC2) non dispone delle autorizzazioni in lettura e scrittura richieste per i bucket S3, potresti ricevere l'errore Accesso negato.
Nota: per impostazione predefinita, le applicazioni ereditano l'accesso ad Amazon S3 dal ruolo IAM del profilo dell'istanza Amazon EC2. Verifica che le policy IAM associate a questo ruolo consentano le operazioni S3 richieste sui bucket di origine e destinazione.
Per verificare se disponi dei permessi di lettura richiesti, esegui il comando ls:
aws s3 ls s3://doc-example-bucket/myfolder/
Esempio di output:
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
-oppure-
Esegui il comando seguente:
hdfs dfs -ls s3://doc-example-bucket/myfolder
Esempio di output:
ls: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: RBT41F8SVAZ9F90B; S3 Extended Request ID: ih/UlagUkUxe/ty7iq508hYVfRVqo+pB6/xEVr5WHuvcIlfQnFf33zGTAaoP2i7cAb1ZPIWQ6Cc=; Proxy: null), S3 Extended Request ID: ih/UlagUkUxe/ty7iq508hYVfRVqo+pB6/xEVr5WHuvcIlfQnFf33zGTAaoP2i7cAb1ZPIWQ6Cc=
Assicurati che il ruolo del profilo dell'istanza disponga delle autorizzazioni in lettura e scrittura richieste per i bucket S3.
Esempio di policy IAM:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListObjectsInBucket", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::doc-example-bucket" ] }, { "Sid": "AllObjectActions", "Effect": "Allow", "Action": "s3:*Object*", "Resource": [ "arn:aws:s3:::doc-example-bucket/*" ] } ] }
Controllo del ruolo IAM per la mappatura dei ruoli EMRFS
Se utilizzi una configurazione di sicurezza per specificare i ruoli IAM per Amazon EMR File System (EMRFS), stai utilizzando la mappatura dei ruoli. L'applicazione eredita le autorizzazioni S3 dal ruolo IAM sulla base della configurazione della mappatura dei ruoli.
La policy IAM associata ai ruoli deve disporre delle autorizzazioni S3 richieste per i bucket di origine e di destinazione. Per specificare i ruoli IAM per le richieste EMRFS ad Amazon S3, consulta Impostazione di una configurazione di sicurezza con ruoli IAM per EMRFS.
Controllo della policy per gli endpoint VPC di Amazon S3
Se la tabella di routing della sottorete del cluster EMR ha un percorso a un endpoint cloud privato virtuale (VPC) di Amazon S3, verifica che la policy degli endpoint consenta le operazioni Amazon S3 richieste.
Utilizzo dell'interfaccia della linea di comando AWS (AWS CLI)
Esegui il commento dell'interfaccia della linea di comando AWS (AWS CLI) describe-vpc-endpoints per verificare la policy degli endpoint:
aws ec2 describe-vpc-endpoints --vpc-endpoint-ids "vpce-########"
Nota: sostituisci vpce-xxxxxxxx con l'ID VPC.
Esegui il comando modify-vpc-endpoint per modificare la policy degli endpoint:
aws ec2 modify-vpc-endpoint --vpc-endpoint-id "vpce-########" --policy-document file://policy.json
Nota: sostituisci --vpc-endpoint-id e il percorso del file JSON.
Utilizzo della console Amazon VPC
Completa i seguenti passaggi:
- Apri la console Amazon VPC.
- Nel pannello di navigazione, seleziona Endpoint.
- Seleziona l'endpoint Amazon S3, quello che si trova nella tabella di routing della sottorete del cluster EMR.
- Scegli la scheda Policy.
- Scegli Modifica policy.
Controllo delle policy dei bucket S3 di origine e di destinazione
Le policy dei bucket specificano le azioni consentite o rifiutate per i principali. Le policy dei bucket di origine e destinazione devono consentire al ruolo del profilo dell'istanza o al ruolo IAM mappato di eseguire le operazioni Amazon S3 richieste.
Per modificare le policy dei bucket, utilizza l'interfaccia della linea di comando AWS (AWS CLI) o la console Amazon S3.
Utilizzo dell'interfaccia della linea di comando AWS (AWS CLI)
Esegui il comando get-bucket-policy per ottenere la policy del bucket:
aws s3api get-bucket-policy --bucket doc-example-bucket
Nota: sostituisci doc-example-policy con il nome dei bucket di origine o di destinazione.
Modifica la policy, quindi salvala in un file JSON.
Quindi, esegui il comando put-bucket-policy per aggiungere la policy modificata al bucket:
aws s3api put-bucket-policy --bucket doc-example-bucket --policy file://policy.json
Nota: sostituisci il nome del bucket e il percorso del file JSON.
Utilizzo della console Amazon S3
Per istruzioni, consulta Aggiungere una policy di bucket utilizzando la console Amazon S3.
Importante: se l'applicazione accede a un bucket S3 che appartiene a un altro account AWS, il proprietario dell'account deve consentire il tuo ruolo IAM nella policy del bucket.
Ad esempio, la seguente policy del bucket fornisce a tutti i ruoli e utenti IAM nell'account emr il pieno accesso a s3://doc-example-bucket/myfolder/:
{ "Id": "MyCustomPolicy", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRootAndHomeListingOfCompanyBucket", "Principal": { "AWS": [ "arn:aws:iam::emr-account:root" ] }, "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::doc-example-bucket" ], "Condition": { "StringEquals": { "s3:prefix": [ "", "myfolder/" ], "s3:delimiter": [ "/" ] } } }, { "Sid": "AllowListingOfUserFolder", "Principal": { "AWS": [ "arn:aws:iam::emr-account:root" ] }, "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::doc-example-bucket" ], "Condition": { "StringLike": { "s3:prefix": [ "myfolder/*" ] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Principal": { "AWS": [ "arn:aws:iam::emr-account:root" ] }, "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::doc-example-bucket/myfolder/*", "arn:aws:s3:::doc-example-bucket/myfolder*" ] } ] }
Informazioni correlate
In che modo è possibile risolvere gli errori 403 di accesso negato da Amazon S3?
Video correlati


Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata 4 mesi fa