Come posso risolvere gli errori di autorizzazione “Accesso negato” quando eseguo una query in Amazon Athena?

7 minuti di lettura
0

Quando eseguo una query su Amazon Athena, ricevo un errore “Accesso negato”.

Breve descrizione

Gli errori di query Accesso negato sono in genere correlati a problemi di autorizzazione con altri servizi AWS o account AWS con cui Athena interagisce. Esempi di servizi con cui Athena interagisce comunemente includono AWS Identity and Access Management (IAM), Amazon Simple Storage Service (Amazon S3) e AWS Key Management Service (AWS KMS).

I seguenti motivi possono causare un errore di Accesso negato:

  • La policy AWS Glue Data Catalog non consente l’accesso all’entità IAM (utente o ruolo).
  • L'entità IAM non dispone delle autorizzazioni per leggere il bucket di dati di origine S3 o scrivere i risultati nel bucket dei risultati della query.
  • Le policy dei bucket S3 non consentono le autorizzazioni richieste all'entità IAM quando la tabella e i bucket Athena sono in account diversi.
  • Il proprietario dell'oggetto è diverso dal proprietario del bucket Amazon S3.
  • Non hai accesso alla chiave AWS KMS utilizzata per leggere o scrivere i dati crittografati.

Risoluzione

Per risolvere l'errore Accesso negato, conferma le seguenti autorizzazioni per il tuo caso d'uso. Per ulteriori informazioni, consulta Troubleshooting in Athena.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Verifica che la policy Glue Data Catalog consenta l'accesso all'entità IAM

Se utilizzi una policy Glue Data Catalog, assicurati che consenta l'accesso all'entità IAM. Ad esempio, se hai la seguente policy nel tuo Catalogo dati, all'entità IAM athena_user verrà negato l'accesso al Catalogo dati:

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:user/athena_user"
        ]
      },
      "Effect": "Deny",
      "Action": [
        "glue:*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:1111222233334444:*"
      ]
    }
  ]
}

Per policy di esempio, consulta Resource-based policy examples for AWS Glue.

Quando la policy precedente è nel Catalogo dati, le query Athena eseguite dall'utente generare la seguente risposta di errore:

"Insufficient permissions to execute the query. User: arn:aws:iam:: 1111222233334444:user/athena_user is not authorized to perform: glue:GetTable on resource: arn:aws:glue:us-east-1:1111222233334444:database/doc_example_database with an explicit deny Query Id: example_query_ID"

Inoltre, assicurati che l'entità IAM che esegue le query disponga delle autorizzazioni necessarie per accedere alle risorse di AWS Glue. Per un elenco completo delle autorizzazioni AWS Glue richieste, consulta la policy gestita da AWS: AmazonAthenaFullAccess.

Assicurati che la policy delle risorse del Catalogo dati non neghi le azioni AWS Glue richieste. Per ulteriori informazioni, consulta Fine-grained access to databases and tables in the AWS Glue Data Catalog.

Assicurati che l'entità IAM disponga delle autorizzazioni necessarie per accedere al bucket dei dati di origine e al bucket dei risultati della query

Se non hai accesso al bucket dei dati di origine, viene visualizzato un errore simile al seguente:

"Your query has the following errors:com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 72VA5FB0ASWCQFPD; S3 Extended Request ID: cykX1CZ/KfxpL/h8/DOQoCBJ88qFGYqt6J52Jqh87qBfyN8c2P2azRiYjjJE1HL7i0Mg9xxxxxx=; Proxy: null), S3 Extended Request ID: cykX1CZ/KfxpL/h8/DOQoCBJ88qFGYqt6J52Jqh87qBfyN8c2P2azRiYjjJE1HL7i0Mg9xxxxxx= (Path: s3://my-athena-source-bucket/athena_data.csv)"

Se non hai accesso al bucket dei risultati della query, viene visualizzato un errore simile al seguente:

"Your query has the following errors:Access denied when writing output to url: s3://my-athena-result-bucket/Unsaved/2021/05/07/example_query_ID.csv . Please ensure you are allowed to access the S3 bucket. If you are encrypting query results with KMS key, please ensure you are allowed to access your KMS key"

L'entità IAM che esegue le query deve accedere al bucket dei dati di origine e al bucket dei risultati della query. Per concedere le autorizzazioni richieste per l'entità IAM, allega una policy IAM all'entità IAM.

Esempio di policy IAM:

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-athena-source-bucket"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::my-athena-source-bucket/data/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:AbortMultipartUpload",
        "s3:PutObject",
        "s3:ListMultipartUploadParts"
      ],
      "Resource": [
        "arn:aws:s3:::my-athena-result-bucket",
        "arn:aws:s3:::my-athena-result-bucket/*"
      ]
    }
  ]
}

Nella policy precedente, sostituisci le seguenti variabili:

  • my-athena-source-bucket con il nome del bucket dei dati di origine
  • my-athena-source-bucket/data/ con la posizione dei dati di origine
  • my-athena-result-bucket con il nome del bucket dei risultati della ricerca

Per l'elenco completo delle politiche, consulta le politiche gestite da AWS per Amazon Athena.

Allega la policy del bucket di Amazon S3 con le autorizzazioni necessarie per le query su più account

Non è necessario allegare la policy dei bucket S3 se la tabella Athena e i bucket S3 sono nello stesso account. Tuttavia, se hai già allegato una policy bucket, verifica che conceda le autorizzazioni S3 all'entità IAM che sta interrogando i dati.

Se la tabella Athena e i bucket S3 sono in account diversi, allega le policy del bucket S3 che concedono l'accesso all'entità IAM.

Nell'account che ha il bucket S3, allega una policy del bucket S3 che conceda l'accesso all'athena\ _user nell'altro account. La seguente policy di esempio consente esplicitamente a un utente IAM dell'account A di accedere al bucket S3 my-athena-source-bucket nell'account B:

{  "Version": "2012-10-17",
  "Id": "Policy1620692934647",
  "Statement": [
    {
      "Sid": "Stmt1620692932186",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::1111222233334444:user/athena_user"
      },
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::my-athena-source-bucket",
        "arn:aws:s3:::my-athena-source-bucket/data/*"
      ]
    }
  ]
}

Nella policy di esempio precedente, sostituisci le seguenti variabili:

  • my-athena-source-bucket con il nome del bucket dei dati di origine
  • my-athena-source-bucket/data/ con la posizione dei dati di origine
  • **1111222233334444 ** con l'ID dell'account utente IAM (account A)
  • athena_user con il nome dell'utente IAM (account B)

Per concedere l'accesso al bucket a tutti gli utenti dell'altro account, sostituisci la chiave Principal con una chiave che specifichi root (“arn:aws:iam: :1111222233334444:root”).

Nota: la policy precedente consente tutte le azioni S3 a my-athena-source-bucket. Puoi aggiornare le azioni S3 in base al fatto che il bucket S3 sia il bucket di origine o il bucket dei risultati della query. Per ulteriori informazioni, consulta Cross-account access to bucket objects.

Verifica che la policy del bucket S3 non includa dichiarazioni che negano esplicitamente l'accesso all'account A o ai suoi utenti IAM. Inoltre, assicurati che la tua policy non includa condizioni che potrebbero rifiutare le richieste. Per ulteriori informazioni, consulta Come posso risolvere gli errori 403 di Accesso negato da Amazon S3?

Aggiorna la policy della chiave AWS KMS

Se i dati di origine sono crittografati o la query Athena utilizza una chiave AWS KMS per scrivere risultati crittografati, conferma le seguenti autorizzazioni:

  • La policy dell'utente IAM consente le azioni AWS KMS necessarie.
  • La policy della chiave AWS KMS consente l'accesso all'utente.

Il seguente esempio di policy della chiave AWS KMS consente tutte le azioni AWS KMS a tutti gli utenti nell'account 1111222233334444:

{  "Sid": "Enable IAM policies",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::1111222233334444:root"
   },
  "Action": "kms:*",
  "Resource": "*"
}

Nota: nella policy precedente, sostituisci le variabili di esempio con le tue variabili.

Per ulteriori informazioni, consulta Key policies in AWS KMS e Permissions to encrypted data in Amazon S3.

Assicurati che il proprietario del bucket S3 abbia accesso agli oggetti

Per impostazione predefinita, l'account che carica un oggetto S3 in un bucket è il proprietario dell'oggetto. Questo vale anche quando il bucket è di proprietà di un altro account. Se utenti in altri account possono caricare oggetti nel tuo bucket, controlla l'account che possiede gli oggetti a cui i tuoi utenti non possono accedere. Esegui il comando GetObjectAcl per verificare il proprietario dell'oggetto.

Se il proprietario del bucket S3 e il proprietario dell'oggetto sono diversi, il proprietario dell'oggetto può concederti il pieno controllo dell'oggetto. Il proprietario dell'oggetto può eseguire questa operazione eseguendo il comando PutObjectAcl con il parametro bucket-owner-full-control.

Per trasferire la proprietà dell'oggetto all'account che possiede il bucket S3, esegui il comando cp di AWS CLI. Assicurati di eseguire il comando cp dall'account del bucket per copiare l'oggetto su se stesso.

Per ulteriori informazioni, consulta Perché non riesco ad accedere a un oggetto che è stato caricato nel mio bucket Amazon S3 da un altro account AWS?

Informazioni correlate

Gestione delle identità e degli accessi in Amazon SNS

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa