DynamoDB AccessDeniedException — "not authorized to perform dynamodb:..."

TL;DR — IAM sennızın/rolünüzün o kaynak üzerindeki DynamoDB işlemi için izni yok. Mesaj, tam dynamodb: işlemini ve ARN'i adıyla verir — o işlemi, o kaynak ARN'i için kimliğin IAM ilkesine ekleyin (ve engelleyen bir Deny veya koşul olup olmadığını kontrol edin).

Ne anlama gelir

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 çağrıyı reddetti. Mesaj bir kontrol listesidir: principal (asal), action (işlem) ve resource (kaynak) adını verir — üçünün de açık bir Deny olmadan izinli olması gerekir. Sondaki cümle, erişimi reddeden ilke türünü (kimlik tabanlı ilke, SCP, izin sınırı, oturum ilkesi, …) adıyla belirtir. DynamoDB bunu HTTP durum kodu 400 ile döndürür ve yeniden denenebilir değildir — ilke (veya kimlik) değişene kadar aynı istek başarısız olur.

Neden olur

  • İşlem izinli değil — ilke dynamodb:GetItem verir ama sen Query çağırdınız ya da tamamen eksik.
  • Kaynak ARN'i eşleşmiyor — ilke table/Orders'a izin verir ama sen bir indeks sorguluyorsunuz (table/Orders/index/* gerekir) ya da farklı bir tabloyu.
  • Bir yerde açık bir Deny (bir izin sınırı, SCP veya ilkenin kendisi) izni geçersiz kılar.
  • Bir ilke koşulu karşılanmıyor (dynamodb:LeadingKeys ayrıntılı erişimi, kaynak IP, MFA).
  • Yanlış kimlik bilgileri — üstlendiğiniz rol, erişimi olan rol değil.

Nasıl düzeltilir

  1. Mesajın adını verdiği tam işlemi, tam kaynak ARN'i için verin. Bir GSI/LSI sorguladığınızda indeks ARN'lerini (.../index/*) dahil edin.
  2. Geçersiz kılan bir Deny olup olmadığını kontrol edin — izin sınırları ve SCP'ler izinleri yener.
  3. Ayrıntılı koşulların (dynamodb:LeadingKeys vb.) isteğinizle gerçekten eşleştiğini doğrulayın.
  4. aws sts get-caller-identity ile kimliği doğrulayın — düşündüğünüz asal olduğundan emin olun.

Örnek ilke

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

DynoTable’da aç

DynoTable, CLI'nizin her bağlantıda kullandığı ~/.aws profilinin aynısını çözer (Connect an AWS account), yani IAM’yı düzelttiğinizde veya değiştirdiğinizde profiller, uygulama yeniden başlatmadan alır. Açmak için ⌘P tuşuna basın. profil değiştiriciyi açın ve hangi kimliğin etkin olduğunu onaylayın — kimlik bilgisi durum noktası tokenlar oturumun ortasında dolduğunda satır içi Yeniden Bağlan eylemiyle kırmızıya döner.

Politikanız dynamodb:ListTables'i reddediyor ancak adlandırılmış bir tabloda okumaya izin veriyorsa, DynoTable yine de bu tabloyu doğrudan açabilir: ⌘KTabloyu şu şekilde aç: isim liste çağrısını atlar ve doğrudan tablodaki GetItem/Query öğesine gider sen yaz. Erişim çalıştığında görsel query builder Politikanın izin verdiğini kanıtlayabilmeniz için Sorgu-Tarama'yı filtre haplarınızdan türetir İhtiyacınız olan operasyon. Hata GSI/LSI ARN adını veriyorsa dynamodb:Query değerini verin table/YourTable/index/* — tablo düzeyinde dizin izinleri sıklıkla gözden kaçırılan bir durumdur doğru görünmesini sağlar.

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.