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

TL;DR — IAM ユーザー/ロールに、そのリソースに対する DynamoDB アクションの権限がありません。メッセージは正確な dynamodb: アクションと ARN を示します。そのアクションを、そのリソース ARN に対してアイデンティティの IAM ポリシーへ追加してください(あわせて、それをブロックする Deny や条件がないか確認しましょう)。

意味

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 が呼び出しを拒否しました。メッセージはチェックリストになっており、プリンシパルアクションリソース を示します。この3つすべてが許可され、かつ明示的な Deny がない必要があります。末尾の句は、アクセスを拒否したポリシーの種類(アイデンティティベースポリシー、SCP、アクセス許可境界、セッションポリシーなど)を示します。DynamoDB はこれを HTTP ステータス 400 で返し、リトライ不可です。ポリシー(またはアイデンティティ)が変わるまで、同じリクエストは失敗し続けます。

発生する理由

  • アクションが許可されていない — ポリシーは dynamodb:GetItem を付与しているが、呼び出したのは Query だった、あるいは完全に欠落している。
  • リソース ARN が一致しない — ポリシーは table/Orders を許可しているが、あなたが照会しているのは インデックスtable/Orders/index/* が必要)か別のテーブルである。
  • 明示的な Deny がどこか(アクセス許可境界、SCP、あるいはポリシー自体)にあり、許可を上書きしている。
  • ポリシー条件 が満たされていない(dynamodb:LeadingKeys によるきめ細かなアクセス、送信元 IP、MFA)。
  • 認証情報が誤っている — 引き受けたロールがアクセス権を持つロールではない。

修正方法

  1. メッセージが示す 正確なアクション を、正確なリソース ARN に対して付与します。GSI/LSI を照会する場合はインデックス ARN(.../index/*)も含めます。
  2. 上書きする Deny がないか確認 します。アクセス許可境界や SCP は許可に勝ります。
  3. きめ細かな条件dynamodb:LeadingKeys など)がリクエストに実際に一致しているか検証します。
  4. aws sts get-caller-identityアイデンティティを確認 し、想定どおりのプリンシパルであることを確かめます。

ポリシー例

{
  "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 で開く

DynoTable は接続のたびに、CLI が使っているのと同じ ~/.aws のプロファイルを解決します(AWS アカウントに接続する)。そのため IAM を直したりプロファイルを切り替えたりすると、再起動なしでアプリがそれを拾います。⌘P でプロファイル切り替えを開き、どの ID が有効かを確認してください — セッションの途中でトークンが失効すると、認証情報のステータスドットが赤くなり、その場に Reconnect のアクションが出ます。

ポリシーが dynamodb:ListTables を拒否していても、名前を指定したテーブルの読み取りを許可しているなら、DynoTable はそのテーブルを直接開けます。⌘KOpen table by name は list の呼び出しを飛ばし、入力したテーブルに対して GetItemQuery を直接行います。アクセスできるようになったら、ビジュアルなクエリビルダーがフィルターピルから Query と Scan のどちらかを導き出すので、必要な操作がポリシーで許可されていることを確かめられます。エラーが GSI/LSI の ARN を挙げているなら、table/YourTable/index/* に対して dynamodb:Query を付与してください — テーブルレベルの許可が正しく見えるときに見落としやすいのが、インデックスの権限です。

関連するエラー

出典

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。