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 はデータベースファイルの命名にしか使いません)。

修正方法

  1. 素の HTTP 呼び出しではなく、AWS SDK を使います。 正しい X-Amz-Target を伴う署名済みの POST を SDK に組み立てさせましょう — URL を手作りしないでください。
  2. パスではなくサービスのルートhttps://dynamodb.<region>.amazonaws.com)を指し、クライアントのリージョンを一致させます。
  3. 認証情報が設定されていることを確認します(環境変数、プロファイル、ロール)。SDK が実際にリクエストへ署名できるようにするためです。
  4. 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 400

SDK 経由でこれに出くわしたときに知っておく価値があります。これは通常、認証情報が誤っていたのではなく、リクエストがそもそも署名されなかったことを意味します。署名なしのリクエストは、自前の 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で確認できます。

関連するエラー

出典

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

2026-07-26 に us-east-1 の実稼働 DynamoDB サービスに対して再現しました — 上記の出力はそのままの逐語です。

Console なしで DynamoDB を扱う

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

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