Perché la mia richiesta Amazon EMR fallisce con un HTTP 403 "Accesso negato" AmazonS3Exception?

6 minuti di lettura
0

Quando invio una richiesta a un cluster Amazon EMR, la richiesta ha esito negativo con un'eccezione HTTP 403 "Accesso negato" AmazonS3Exception.

Risoluzione

Se le autorizzazioni non sono configurate correttamente, potresti ricevere un errore "Accesso negato" su Amazon EMR o Amazon Simple Storage Service (Amazon S3). L’errore è simile al seguente messaggio:

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=

Innanzitutto, controlla le credenziali o il ruolo specificato nel codice dell'applicazione

Esegui il comando seguente sul nodo principale del cluster EMR. Sostituisci s3://doc-example-bucket/abc/ con il tuo percorso Amazon S3.

aws s3 ls s3://doc-example-bucket/abc/

Se questo comando ha esito positivo, allora l’errore "Accesso negato" è causato dalle credenziali o dal ruolo specificati nel codice dell'applicazione. Verifica che l'applicazione utilizzi le credenziali previste o che assuma il ruolo previsto e che abbia accesso al percorso Amazon S3. Verifica che il ruolo disponga delle autorizzazioni per il percorso Amazon S3 assumendo il ruolo AWS Identity and Access Management (IAM) tramite AWS CLI. Effettua quindi una richiesta di esempio sul percorso S3.

Se questo comando ha esito negativo, verifica se stai utilizzando la versione più recente dell’interfaccia della linea di comando AWS (AWS CLI). Quindi, controlla quanto segue per risolvere l'errore "Accesso negato":

Verifica la 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. Assicurati che le policy IAM associate a questo ruolo consentano le operazioni S3 richieste sui bucket di origine e destinazione.

Per risolvere questo problema, verifica se disponi della necessaria autorizzazione in lettura eseguendo il seguente comando:

$ aws s3 ls s3://doc-example-bucket/myfolder/

L'output potrebbe essere simile al seguente:

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

-oppure-

Esegui il seguente comando:

$ hdfs dfs -ls s3://doc-example-bucket/myfolder

L'output potrebbe essere simile al seguente:

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. Ad esempio, le azioni S3 nella seguente policy IAM forniscono l'accesso in lettura e scrittura richiesto per il bucket S3 doc-example-bucket:

{
  "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/*"
      ]
    }
  ]
}

Controlla il ruolo IAM per la mappatura dei ruoli EMRFS

Se utilizzi una configurazione di sicurezza per specificare i ruoli IAM per 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 a tali 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.

Controlla la policy per gli endpoint VPC di Amazon S3

Se la tabella di routing della sottorete del cluster EMR ha un percorso verso un endpoint Amazon S3 VPC, verifica che la policy degli endpoint consenta le operazioni Amazon S3 richieste.

Per controllare e modificare la policy degli endpoint tramite CLI:

Esegui il comando seguente per rivedere la policy degli endpoint. Sostituisci vpce-xxxxxxxx con il tuo ID VPC.

aws ec2 describe-vpc-endpoints --vpc-endpoint-ids "vpce-xxxxxxxx"

Se necessario, esegui il comando seguente per caricare una policy degli endpoint modificata. Sostituisci l'ID VPC e il percorso del file JSON.

aws ec2 modify-vpc-endpoint --vpc-endpoint-id "vpce-xxxxxxxx" --policy-document file://policy.json

Per controllare e modificare la policy degli endpoint tramite la console Amazon VPC:

  1. Apri la console Amazon VPC.
  2. Nel riquadro di navigazione, scegli Endpoint.
  3. Seleziona l'endpoint Amazon S3 (quello che si trova nella tabella di routing della sottorete del cluster EMR). Quindi, scegli la scheda Policy per rivedere la policy degli endpoint.
  4. Per aggiungere le azioni Amazon S3 richieste, scegli Modifica policy.

Controlla le 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 EC2 o al ruolo IAM mappato di eseguire le operazioni Amazon S3 richieste.

Per controllare e modificare le policy dei bucket tramite CLI:

Esegui il comando seguente per rivedere una policy del bucket. Sostituisci doc-example-bucket con il nome dei bucket di origine o di destinazione.

aws s3api get-bucket-policy --bucket doc-example-bucket

Se necessario, esegui il comando seguente per caricare una policy del bucket modificata. Sostituisci il nome del bucket e il percorso del file JSON.

aws s3api put-bucket-policy --bucket doc-example-bucket --policy file://policy.json

Per controllare e modificare le policy dei bucket tramite la console Amazon S3:

  1. Apri la console Amazon S3.
  2. Scegli il bucket.
  3. Scegli la scheda Autorizzazioni.
  4. Scegli Policy del bucket per rivedere e modificare la policy del bucket.

Accesso ai bucket S3 in un altro account

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

Perché il mio lavoro Spark o Hive su Amazon EMR fallisce con un HTTP 503 "Slow Down" AmazonS3Exception?

Perché la mia applicazione Amazon EMR fallisce con un’eccezione HTTP 404 "Not Found" AmazonS3Exception?

Error responses

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

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa