Come posso risolvere l'errore AccessDeniedException quando cerco di accedere a una tabella Amazon DynamoDB?

7 minuti di lettura
0

Sto cercando di accedere a una tabella Amazon DynamoDB e ricevo l'errore AccessDeniedException.

Breve descrizione

Potresti ricevere questo messaggio di errore per i seguenti motivi:

  • Il ruolo AWS Identity and Access Management (IAM) utilizzato per accedere alla tabella DynamoDB non dispone delle autorizzazioni richieste.
  • L'accesso alla tabella DynamoDB è limitato a livello di organizzazione.
  • La policy associata all'endpoint del cloud privato virtuale Amazon (Amazon VPC) per DynamoDB limita l'operazione.
  • È stata attivata l'autenticazione a più fattori (MFA) e hai tentato di accedere alla tabella senza effettuare l'accesso tramite MFA.
  • Utilizzi una chiave gestita dal cliente o una chiave gestita da AWS per proteggere le tabelle DynamoDB.

Risoluzione

Il ruolo IAM non dispone delle autorizzazioni necessarie

DynamoDB non supporta le policy basate sulle risorse. Quando crei una tabella DynamoDB, assicurati di concedere le autorizzazioni necessarie al ruolo IAM utilizzato per accedere alla tabella. È possibile allegare le policy agli utenti, ai gruppi o ai ruoli IAM per concedere le autorizzazioni richieste. Per ulteriori informazioni, consulta Utilizzo delle policy basate su identità (Policy IAM) con Amazon DynamoDB.

È possibile utilizzare uno script dell'interfaccia della linea di comando AWS (AWS CLI) per risolvere gli errori di chiamata dell'API dell'autorizzazione IAM.

Nota: questo script AWS CLI richiede il processore JSON della linea di comando jq. Per il tutorial e le istruzioni per il download, consulta Formato dell'output JSON. Per le distribuzioni che utilizzano il pacchetto yum, esegui il seguente comando:

$ sudo yum install jq

Esegui il seguente comando di AWS CLI:

( echo "Time,Identity ARN,Event ID,Service,Action,Error,Message";
>   aws cloudtrail lookup-events --start-time "2022-08-04T13:23:00Z" --end-time "2022-08-04T13:27:00Z" --query "Events[*].CloudTrailEvent" --output text \
>     | jq -r ". | select(.userIdentity.arn == \"your-ARN\" and .eventType == \"AwsApiCall\" and .errorCode != null
>     and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\"))))
>     | [.eventTime, .userIdentity.arn, .eventID, .eventSource, .eventName, .errorCode, .errorMessage] | @csv"
> ) | column -t -s'",'

Nota: assicurati di sostituire il tuo ARN con l'ARN IAM per le risorse.

L'output di questo comando è simile al seguente:

Time                 Identity ARN                           Event ID                             Service                Action     Error Message 
2022-08-04T13:24:14Z arn:aws:iam::111122223333:user/article 42f420fe-ef06-43be-98a6-d5a0a90d7b4c dynamodb.amazonaws.com ListTables AccessDenied User: arn:aws:iam::111122223333:user/article is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:111122223333:table/* with an explicit deny in an identity-based policy
2022-08-04T13:51:22Z arn:aws:iam::111122223333:user/article b174e4e1-94a7-403e-a15f-1234aec796a6 dynamodb.amazonaws.com ListTables AccessDenied User: arn:aws:iam::111122223333:user/article is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:111122223333:table/* because no identity-based policy allows the dynamodb:ListTables action

Il primo messaggio di questo esempio indica che non è possibile eseguire l'azione ListTables perché è stata allegata un'autorizzazione all'utente 111122223333 che nega questa operazione. Il secondo messaggio indica che nessuna policy basata sull'identità consente l'azione dynamodb:ListTables.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi di AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

Utilizza le seguenti best practice per assicurarti che il ruolo IAM disponga delle autorizzazioni necessarie per accedere alla tabella DynamoDB:

  • Assicurati che il ruolo IAM non sia incluso in nessuna dichiarazione di rifiuto della policy di attendibilità.
  • Assicurati che il ruolo IAM sia incluso nella dichiarazione di permesso della policy di attendibilità.
  • Assicurati che tutte le condizioni IAM specificate nella dichiarazione di permesso siano supportate dall'azione API sts:AssumeRole.
  • Se stai cercando di accedere alla tabella DynamoDB tramite l'interfaccia della linea di comando AWS, assicurati di aver utilizzato l'ID della chiave di accesso e la chiave di accesso segreta corretti.

Per ulteriori informazioni, consulta Come posso ottenere dati per la risoluzione dei problemi di accesso negato o non autorizzato dall'autorizzazione IAM?

L'accesso alla tabella DynamoDB è limitato a livello di organizzazione

Se si verifica il seguente errore quando cerchi di accedere alla tabella DynamoDB, l'accesso è stato negato a causa di una policy di controllo del servizio.

User: arn:aws:iam::11111222333:user/Admin is not authorized to perform: 
dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:11111222333:table with an explicit deny in a service control policy

Per risolvere questo problema, controlla la policy definita a livello di organizzazione.

Nota: se rifiuti le operazioni di DynamoDB a livello di organizzazione, nessuno dei ruoli IAM presenti nell'organizzazione o nell'account AWS potrà accedere a DynamoDB nonostante disponga delle autorizzazioni necessarie.

La policy degli endpoint di Amazon VPC limita il funzionamento

Puoi utilizzare un Amazon VPC per migliorare la privacy e la sicurezza del trasferimento dei dati tra la tabella DynamoDB e l'applicazione. Quando crei l'endpoint, puoi scegliere di limitare l'accesso alla tabella per determinati utenti allegando una policy delle risorse IAM con un rifiuto esplicito o implicito all'endpoint VPC. Se hai limitato l'accesso all'utente IAM che sta tentando di accedere alla tabella, visualizzi un errore simile al seguente:

An error occurred (AccessDeniedException) when calling the ListTables operation: User: arn:aws:iam::111222333444:user/Admin is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:11111222333:table/* with an explicit deny in a VPC endpoint policy

Questo errore indica che è presente una dichiarazione di rifiuto esplicita nella policy dell'endpoint VPC che nega l'operazione ListTables per l'utente amministratore.

Per visualizzare la policy degli endpoint VPC, esegui il comando di AWS CLI describe-vpc-endpoints.

-oppure-

Esegui le seguenti operazioni:

  1. Apri la console di Amazon VPC.
  2. Nel pannello di navigazione, scegli Endpoint.
  3. Seleziona l'endpoint VPC.
  4. Scegli la scheda Policy per visualizzare la policy dell'endpoint.

Hai provato ad accedere alla tabella senza effettuare l'accesso tramite MFA

Supponiamo di aver configurato la MFA nel tuo account con la seguente policy basata sull'identità:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyAllExceptListedIfNoMFA",
      "Effect": "Deny",
      "NotAction": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:GetUser",
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices",
        "iam:ResyncMFADevice",
        "sts:GetSessionToken"
      ],
      "Resource": "",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": "false"
        }
      }
    }
  ]
}

In questo caso tutte le azioni vengono negate, a eccezione di quelle necessarie per l'autenticazione tramite MFA. Se l'utente IAM non ha effettuato l'accesso con MFA, tutte le azioni che non sono elencate nella suddetta policy vengono negate, incluse le operazioni DynamoDB.

La tabella DynamoDB utilizza la chiave gestita dal cliente o la chiave gestita da AWS

Quando crei una tabella DynamoDB con una chiave gestita dal cliente o una chiave del servizio di gestione delle chiavi AWS (AWS KMS), le policy su tale chiave KMS devono concedere a DynamoDB l'autorizzazione per utilizzare la chiave per tuo conto.

Assicurati che l'utente IAM che accede alla tabella disponga delle seguenti autorizzazioni minime sulla chiave AWS KMS:

  • DynamoDB utilizza la chiave AWS KMS per generare e crittografare una chiave dati univoca per la tabella, denominata chiave di tabella. Per generare e crittografare questa chiave, devi disporre dell'autorizzazione kms:GenerateDataKey.
  • La chiave della tabella viene utilizzata per proteggere le chiavi di crittografia dei dati utilizzate per crittografare i dati di tabella. Se la chiave gestita dal cliente viene modificata per una tabella, DynamoDB produce una nuova chiave di tabella. Quindi, DynamoDB utilizza la nuova chiave di tabella per crittografare nuovamente le chiavi di crittografia dei dati. Per eseguire questa operazione, devi disporre dell'autorizzazione kms:ReEncrypt.
  • DynamoDB utilizza l'operazione kms:DescribeKey per determinare se la chiave gestita dal cliente selezionata esiste all'interno dell'account e della regione. Se la chiave viene rimossa in modo casuale, la chiamata DescribeKey restituisce un errore.
  • DynamoDB utilizza le sovvenzioni per impostare le autorizzazioni su una chiave gestita dal cliente. Queste autorizzazioni vengono utilizzate quando DynamoDB esegue attività di manutenzione del sistema in background e di protezione continua dei dati. Le autorizzazioni vengono utilizzate anche per generare chiavi di tabella. Pertanto, assicurati di avere l'autorizzazione kms:CreateGrant.

Per ulteriori informazioni, consulta Come Amazon DynamoDB utilizza AWS KMS.


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa