DynamoDB AccessDeniedException — "not authorized to perform dynamodb:..." (non autorizzato a eseguire)

TL;DR — Il tuo utente/ruolo IAM non dispone dell'autorizzazione per l'azione DynamoDB su quella risorsa. Il messaggio nomina esattamente l'azione dynamodb: e ARN — aggiungi l'azione per quella risorsa ARN alla policy IAM dell'identità (e verifica la presenza di un Deny o di una condizione che la blocca).

Cosa significa

AccessDeniedException: User: arn:aws:iam::123456789012:user/app is not authorized to
perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:123456789012:table/Orders
because no identity-based policy allows the dynamodb:Query action

IAM ha negato la chiamata. Il messaggio è una lista di controllo: nomina il principal, l'action e il resource: tutti e tre devono essere consentiti senza Nega esplicita. La clausola finale nomina il tipo di policy che ha negato l'accesso (policy basata sull'identità, SCP, limite delle autorizzazioni, policy di sessione, ...). DynamoDB lo restituisce con lo stato HTTP 400 e non è possibile riprovare: la stessa richiesta fallisce finché la policy (o l'identità) non cambia.

Perché succede

  • L'azione non è consentita: la policy concede dynamodb:GetItem ma hai chiamato Query oppure manca del tutto.
  • La risorsa ARN non corrisponde: la policy consente table/Orders ma stai interrogando un indice (è necessario table/Orders/index/*) o una tabella diversa.
  • Un Deny esplicito da qualche parte (un limite di autorizzazione, SCP o la policy stessa) sovrascrive l'autorizzazione.
  • Una condizione della policy non è soddisfatta (accesso granulare dynamodb:LeadingKeys, IP di origine, MFA).
  • Credenziali errate: il ruolo che hai assunto non è quello con accesso.

Come risolverlo

  1. Concede l'azione esatta i nomi dei messaggi, per la risorsa esatta ARN. Includi gli ARN dell'indice (.../index/*) quando esegui una query su GSI/LSI.
  2. Verifica la presenza di un Deny prioritario: i limiti di autorizzazione e il battito SCP lo consentono.
  3. Verificare che le condizioni dettagliate (dynamodb:LeadingKeys ecc.) corrispondano effettivamente alla richiesta.
  4. Conferma identità con aws sts get-caller-identity: assicurati che sia l'entità che ritieni sia.

Esempio di politica

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["dynamodb:Query", "dynamodb:GetItem", "dynamodb:PutItem"],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/Orders",
        "arn:aws:dynamodb:us-east-1:123456789012:table/Orders/index/*"
      ]
    }
  ]
}

Aprilo in DynoTable

DynoTable risolve lo stesso profilo ~/.aws utilizzato dalla CLI su ogni connessione (Connetti un account AWS), quindi quando correggi IAM o cambi profili l'app lo riprende senza riavviare. Premi ⌘P per aprire il file commutatore di profilo e conferma quale identità è attiva: il punto dello stato della credenziale diventa rosso con un'azione Riconnetti in linea quando i token scadono a metà sessione.

Se la tua policy nega dynamodb:ListTables ma consente la lettura su una tabella denominata, DynoTable puoi ancora aprire quella tabella direttamente: ⌘KApri tabella con name salta la chiamata all'elenco e va direttamente a GetItem/Query sulla tabella digiti. Una volta che l'accesso funziona, l'oggetto visivo query builder deriva Query-vs-Scan dalle tue pillole filtro in modo da poter dimostrare che la policy lo consente l'operazione di cui hai bisogno. Se l'errore nomina GSI/LSI ARN, concedi dynamodb:Query su table/YourTable/index/*: i permessi di indice sono un errore comune a livello di tabella consente un aspetto corretto.

Errori correlati

Fonti

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.