The security token included in the request is expired
TL;DR — 一時 AWS 認証情報がタイムアウトしました。これは STS/SSO/引き受けたロールの認証情報でのみ発生します(長寿命の IAM ユーザーキーではありません)。セッションを更新し — aws sso login を再実行するか、ロールを再度引き受け — AWS_SESSION_TOKEN が新鮮なものであることを確認し、環境に残った古いトークンをクリアしてください。
意味
ExpiredTokenException: The security token included in the request is expiredAWS は、リクエストが署名された 一時セキュリティ認証情報 が期限切れになったため、リクエストを拒否しました。STS(AssumeRole、SSO、GetSessionToken、EC2/ECS インスタンスロール)からの一時認証情報は、境界のあるウィンドウで存続します。ロールセッションは 15 分からロールの最大セッション期間設定まで(1〜12 時間の間。デフォルトは 1 時間)続き、IAM ユーザーの GetSessionToken 認証情報はデフォルトで 12 時間で、36 時間まで延ばせます。そのウィンドウを過ぎると、それで署名されたすべてのリクエストは ExpiredTokenException で失敗します。同じ期限切れトークンで再送しても再び失敗します。更新してからでないと再試行の価値はありません。
発生する理由
- STS/SSO セッションが単にタイムアウトした — 引き受けたロールの認証情報はロールのセッション期間(デフォルト 1 時間、最大 12 時間まで設定可能)で期限切れになります。SSO セッションも同様に期限切れになります。
- 環境に古い
AWS_SESSION_TOKEN— シェル(または.env)にエクスポートされた古いセッショントークンが、期限切れ後も使われ続ける。環境変数は自動更新されません。 - 起動時に一度認証情報を取得し、決して更新しない 長時間実行のプロセス。
- 有効期限を過ぎた
~/.aws/cli/cacheまたは SDK の認証情報キャッシュ内の キャッシュされた認証情報。 - クロックスキュー — 十分にずれたマシンクロックは、有効な認証情報を期限切れに見せることがあります。
修正方法
- セッションを更新します。
aws sso login(SSO 用)を再実行するか、ロールを再度引き受けて(aws sts assume-role …)、新しいアクセスキー、シークレット、セッショントークンを取得します。 - 3つの値をすべて更新します — アクセスキー ID、シークレットアクセスキー、そして セッショントークンを一緒に。新しいキーでも古いトークンでは失敗します。
- 古い環境変数をクリアします —
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKENしてから、新しい認証情報を再ソースするか、SDK が自身で更新できるプロファイルに切り替えます。 - SDK にライフサイクルを管理させます — プロファイル / 認証情報プロバイダー(SSO、
assume_role、インスタンスロール)を構成し、1つのトークンを固定するのではなく SDK が有効期限前に自動更新するようにします。 aws sts get-caller-identityで 検証します — それが成功すれば、認証情報は最新です。- すべて新鮮に見えるのにリクエストがまだ期限切れを報告する場合は クロックを確認します(NTP)。
DynoTable から接続する
DynoTable は接続のたびにプロファイルを新しく解決します — SSO のセッションや MFA で保護された assume-role も含めてです。そのため、セッションを 更新すれば、再起動なしでテーブルが戻ってきます。一時認証情報が期限切れになると、 プロファイルチップのステータスドットが赤くなり、Sign in(SSO)または Reconnect が 表示されます。それをクリックするか、クエリを実行し直せば、アプリ内の更新フローが走ります。 ターミナルで更新したのと同じプロファイルにいることは、⌘P で確認してください。 更新後に署名付きの読み取りが通ることは、クエリビルダーで 手早く確かめられます。
よくある質問
"the security token included in the request is expired" を修正するには?
一時認証情報が期限切れです。更新します — aws sso login を再実行するか、ロールを再度引き受け — アクセスキー、シークレット、AWS_SESSION_TOKEN を一緒に更新します。古いものが再利用されないよう、シェルに残った古いトークンをクリアし、自動的に更新する SDK の認証情報プロバイダーを優先します。
なぜ一時認証情報でのみこれが発生するのですか? ExpiredTokenException は、有効期限を持つ時間制限された STS/SSO/引き受けたロールの認証情報に適用されます。長寿命の IAM ユーザーアクセスキーは自身では期限切れにならないため、他の理由(無効/無効化)で認証情報エラーを発生させますが、これではありません。
DynoTable は接続のたびにプロファイルを新しく解決します — SSO セッションや MFA 保護の assume-role も含めて — セッションが更新されれば、再起動なしでテーブルはすぐに戻ってきます。
関連するエラー
- The security token included in the request is invalid — 期限切れではなく誤りとして拒否された認証情報。
- IncompleteSignatureException — 不正な形式のリクエスト署名。
- AccessDeniedException — 有効な認証情報、権限の欠如。
出典
- Request temporary security credentials — IAM User Guide
- AssumeRole — AWS Security Token Service API Reference
- Common Error Types — Amazon DynamoDB API Reference
- Troubleshooting errors for the AWS CLI — AWS CLI User Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。