Perché ricevo l'errore “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

È possibile che venga visualizzato l'errore «Accesso negato» per i seguenti motivi:

  • L'utente di AWS Identity e Access Management (IAM) non dispone di una o più delle seguenti autorizzazioni:
  • Leggi il bucket dei dati di origine.
  • Scrivi i risultati nel bucket dei risultati della query.
  • Le policy dei bucket di Amazon Simple Storage Service (Amazon S3) non consentono le autorizzazioni richieste all'utente IAM.
  • Il proprietario dell'oggetto è diverso dal proprietario del bucket Amazon S3.
  • Non hai accesso alla chiave AWS Key Management Service (AWS KMS) utilizzata per leggere o scrivere i dati crittografati.
  • La policy di AWS Glue Data Catalog non consente l'accesso all'utente IAM.

Risoluzione

Per risolvere l'errore «Accesso negato», conferma quanto segue. Per ulteriori informazioni, consulta larisoluzione dei problemi di AWS X-Ray.

Assicurati che l'utente 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'utente IAM che esegue le query deve accedere al bucket dei dati di origine e al bucket dei risultati della query. Puoi concedere l'autorizzazione richiesta all'utente IAM allegando una policy IAM all'utente/ruolo IAM. La seguente policy IAM consente autorizzazioni minime per il bucket dei dati di origine e il bucket dei risultati della query:

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

Assicurati di sostituire quanto segue in questo esempio di policy:

  • 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 le policy dei bucket S3 se la tabella Athena e i bucket S3 si trovano nello stesso account. Tuttavia, se disponi di policy dei bucket S3, assicurati che concedano le azioni S3 richieste all'utente/ruolo IAM. Se la tua tabella Athena e i bucket S3 si trovano in account diversi, devi allegare le policy del bucket S3 che concedono l'accesso richiesto all'utente IAM.

Puoi allegare una policy del bucket S3 simile alla seguente nell'account B per concedere l'accesso all'utente IAM athena_user nell'account A. Questa policy di esempio consente esplicitamente all'utente IAM 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/*"
      ]
    }
  ]
}

Assicurati di sostituire quanto segue in questo esempio di policy:

  • 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 account per l'account A
  • athena_user con il nome dell'utente IAM nell'account A

Per concedere l'accesso al bucket a tutti gli utenti dell'account A, sostituisci la chiaveprincipale con una chiave che specifichi laroot. Ad esempio, «arn:aws:iam: :1111222233334444:root».

Nota: Questa politica consente a tutte le azioni S3 di 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 la sezione Bucket policy o IAM User Policy in Accesso da più account in Athena ad Amazon S3 Buckets.

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 politica non includa condizioni che potrebbero rifiutare le richieste. Per ulteriori informazioni, vedi Come posso risolvere gli errori 403 Access Denied di Amazon S3? Per definire le autorizzazioni con privilegi minimi per il bucket S3, consulta Come definire le autorizzazioni con privilegi minimi per le azioni richiamate dai servizi AWS.

Aggiorna la tua policy chiave di AWS KMS

Se i tuoi dati di origine sono crittografati o la tua query Athena scrive risultati crittografatiutilizzando una chiave AWS KMS, assicurati di quanto segue:

Questo è un esempio di policy chiave di AWS KMS che consente tutte le azioni di AWS KMS a tutti gli utenti nell'account ID 1111222233334444:

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

Assicurati di aggiornare questa politica in base al tuo caso d'uso. Per ulteriori informazioni, consulta Politiche sulle chiavi di AWS KMS e Autorizzazioni per i dati crittografati in Amazon S3.

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 l'account che possiede gli oggetti a cui i tuoi utenti non possono accedere. È possibile controllare il proprietario dell'oggetto eseguendo il comando GetObjectAcl.

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 cambiare la proprietà dell'oggetto con l'account proprietario del bucket S3, esegui il comando cp dell'interfaccia a riga di comando di AWS (AWS CLI) dall'account del bucket per copiare l'oggetto su se stesso.

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.

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

Verifica che la policy di AWS Glue Data Catalog consenta l'accesso all'utente/ruolo IAM

Se disponi di una policy AWS Glue Data Catalog esistente, assicurati che consenta l'accesso all'utente/ruolo IAM. Ad esempio, se hai la seguente politica nel tuo catalogo dati, all'utente IAM athena_user viene 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:*"
      ]
    }
  ]
}

Ad esempio, consulta gli esempi di policy di controllo degli accessi basati sulle risorse di AWS Glue.

Con questa politica nel Data Catalog, le query Athena eseguite dall'utente potrebbero non riuscire con il seguente 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'utente/ruolo 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 di AmazonAthenaFullAccess. Assicurati che le azioni AWS Glue richieste non siano negate dalla policy sulle risorse di Data Catalog. Per ulteriori informazioni, consulta Accesso granulare ai database e alle tabelle nel catalogo dati di AWS Glue.


Informazioni correlate

Gestione delle identità e degli accessi in Amazon SNS

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa