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 actionIAM ç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:GetItemverir ama senQueryç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:LeadingKeysayrıntılı erişimi, kaynak IP, MFA). - Yanlış kimlik bilgileri — üstlendiğiniz rol, erişimi olan rol değil.
Nasıl düzeltilir
- 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. - Geçersiz kılan bir Deny olup olmadığını kontrol edin — izin sınırları ve SCP'ler izinleri yener.
- Ayrıntılı koşulların (
dynamodb:LeadingKeysvb.) isteğinizle gerçekten eşleştiğini doğrulayın. aws sts get-caller-identityile 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: ⌘K → Tabloyu ş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
- The security token is invalid — bozuk/süresi geçmiş kimlik bilgileri (izni olmayan geçerli kimlik bilgilerine karşı).
- Yapılandırmada bölge eksik
- Öğrenin: Running DynamoDB Local — IAM ilkelerinin geçerli olmadığı yerel ortamda geliştirin.
Kaynaklar
- Troubleshoot access denied error messages — IAM User Guide
- Using IAM policy conditions for fine-grained access control — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.