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 actionIAM が呼び出しを拒否しました。メッセージはチェックリストになっており、プリンシパル、アクション、リソース を示します。この3つすべてが許可され、かつ明示的な Deny がない必要があります。末尾の句は、アクセスを拒否したポリシーの種類(アイデンティティベースポリシー、SCP、アクセス許可境界、セッションポリシーなど)を示します。DynamoDB はこれを HTTP ステータス 400 で返し、リトライ不可です。ポリシー(またはアイデンティティ)が変わるまで、同じリクエストは失敗し続けます。
発生する理由
- アクションが許可されていない — ポリシーは
dynamodb:GetItemを付与しているが、呼び出したのはQueryだった、あるいは完全に欠落している。 - リソース ARN が一致しない — ポリシーは
table/Ordersを許可しているが、あなたが照会しているのは インデックス(table/Orders/index/*が必要)か別のテーブルである。 - 明示的な
Denyがどこか(アクセス許可境界、SCP、あるいはポリシー自体)にあり、許可を上書きしている。 - ポリシー条件 が満たされていない(
dynamodb:LeadingKeysによるきめ細かなアクセス、送信元 IP、MFA)。 - 認証情報が誤っている — 引き受けたロールがアクセス権を持つロールではない。
修正方法
- メッセージが示す 正確なアクション を、正確なリソース ARN に対して付与します。GSI/LSI を照会する場合はインデックス ARN(
.../index/*)も含めます。 - 上書きする Deny がないか確認 します。アクセス許可境界や SCP は許可に勝ります。
- きめ細かな条件(
dynamodb:LeadingKeysなど)がリクエストに実際に一致しているか検証します。 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 はそのテーブルを直接開けます。⌘K → Open table by name は list の呼び出しを飛ばし、入力したテーブルに対して GetItem/Query を直接行います。アクセスできるようになったら、ビジュアルなクエリビルダーがフィルターピルから Query と Scan のどちらかを導き出すので、必要な操作がポリシーで許可されていることを確かめられます。エラーが GSI/LSI の ARN を挙げているなら、table/YourTable/index/* に対して dynamodb:Query を付与してください — テーブルレベルの許可が正しく見えるときに見落としやすいのが、インデックスの権限です。
関連するエラー
- The security token is invalid — 不正/期限切れの認証情報(権限のない有効な認証情報との対比)。
- 設定にリージョンがない
- Learn: Running DynamoDB Local — IAM ポリシーが適用されないローカル環境で開発する。
出典
- 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
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。