Missing Authentication Token
TL;DR — 「Missing Authentication Token」は、リクエストが認証情報を持っていなかったか、AWS が認識しないエンドポイント/メソッドに届いたことを意味します — 存在しないパスやサポートされない HTTP メソッドへのリクエストは、404 ではなくこれを返します。DynamoDB の場合、ほぼ必ずエンドポイント URL の誤りか、署名されなかったリクエストです。
意味
{"message":"Missing Authentication Token"}AWS の SigV4 トラブルシューティングガイドは、最初の原因についてはっきり述べています。API リクエストが署名されていない場合、Missing Authentication Token を受け取ることがある、と。直感に反しますが、同じメッセージは API Gateway 形式のエンドポイントからも(HTTP 403 で)返ってきます。パスや HTTP メソッドがどのルートにも一致しないときです — AWS はルーティングできないリクエストに対して認証を探し、「見つかりません」の代わりにトークンの欠落を報告します。DynamoDB 自身が、認可ヘッダーの欠落または不正な形式を理由にリクエストを拒否する場合、例外は MissingAuthenticationTokenException になります — HTTP 400、リトライ不可、メッセージは「Request must contain a valid (registered) AWS Access Key ID.」です。
発生する理由
- エンドポイント URL の誤り — 適切に署名された SDK 呼び出しをサービスのルートに送る代わりに、ブラウザや素の GET で
https://dynamodb.<region>.amazonaws.com/some/pathを叩いている。 - 署名されていないリクエスト — SigV4 の
Authorizationヘッダーがない素のcurl/fetch(通常は SDK が付けます)。 - HTTP メソッドの誤り — DynamoDB の API は、操作名を指定する
X-Amz-Targetヘッダー付きの/へのPOSTを期待します。ほかの形は署名済み操作として認識されません。 - タイプミスしたカスタムエンドポイント — DynamoDB サービスに対応しない URL を指している。
- アクセスキーを設定していない DynamoDB Local — ローカルでも SDK はアクセスキーとリージョンの値が設定されていることを要求します(値は何でも構いません。Local はデータベースファイルの命名にしか使いません)。
修正方法
- 素の HTTP 呼び出しではなく、AWS SDK を使います。 正しい
X-Amz-Targetを伴う署名済みのPOSTを SDK に組み立てさせましょう — URL を手作りしないでください。 - パスではなくサービスのルート(
https://dynamodb.<region>.amazonaws.com)を指し、クライアントのリージョンを一致させます。 - 認証情報が設定されていることを確認します(環境変数、プロファイル、ロール)。SDK が実際にリクエストへ署名できるようにするためです。
- DynamoDB Local では、エンドポイントを
http://localhost:8000にし、ダミーのアクセスキー/シークレット(英数字のみ)を設定して SDK が通常どおり署名できるようにします — Local はそれらを検証しません。
再現方法
Authorization ヘッダーをまったく付けずに、形式の整った DynamoDB リクエストを送ります。
import requests
requests.post(
'https://dynamodb.us-east-1.amazonaws.com',
headers={
'X-Amz-Target': 'DynamoDB_20120810.ListTables',
'Content-Type': 'application/x-amz-json-1.0',
},
data='{}',
)実際の出力:
MissingAuthenticationTokenException: Request is missing Authentication Token
HTTP 400SDK 経由でこれに出くわしたときに知っておく価値があります。これは通常、認証情報が誤っていたのではなく、リクエストがそもそも署名されなかったことを意味します。署名なしのリクエストは、自前の HTTP 呼び出し、ヘッダーを削るプロキシ、あるいは IAM 認証を期待する API Gateway のルートから生まれます — なのでキーではなく、リクエストの組み立て方を見てください。
DynoTable + Local
DynoTable は DynamoDB へのすべての呼び出しを AWS SDK 経由で署名します — Authorization
ヘッダーを手組みすることはありません(AWS アカウントに接続する)。
DynamoDB Local では、エンドポイント http://localhost:8000 とプレースホルダーの認証情報を
持つプロファイルを追加すれば、リクエストは通常どおり署名されます。Local はキーの値を無視
しますが、値そのものは必要です(DynamoDB Local を動かす)。
本物の AWS でこれが出るなら、Settings → Profiles が正しいリージョナルエンドポイントを
指していること、そしてテーブルを開く前に Test Connection が成功することを確認して
ください。エンドポイントさえ正しければ署名付きリクエストが通ることは、
DynamoDB Expression Builderで確認できます。
関連するエラー
- Unable to locate credentials — SDK が認証情報をまったく見つけられない。
- The security token included in the request is invalid — 認証情報はあるが拒否された。
- Could not connect to the endpoint URL — 不正な形式、または到達できないエンドポイント。
- 学習: DynamoDB Local と LocalStack への接続
出典
- Troubleshoot Signature Version 4 signing for AWS API requests — IAM User Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Create a signed AWS API request — IAM User Guide
- DynamoDB local usage notes — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。
2026-07-26 に us-east-1 の実稼働 DynamoDB サービスに対して再現しました — 上記の出力はそのままの逐語です。