MeWrite Docs

InvalidClientTokenId: The security token included in the request is invalid

AWS認証情報が無効な場合に発生するエラー

概要

InvalidClientTokenId: The security token included in the request is invalid は、AWSのAPIリクエストに含まれる認証情報(アクセスキー)が無効な場合に発生するエラーです。

エラーメッセージ

An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid.
InvalidClientTokenId: The security token included in the request is invalid.
An error occurred (SignatureDoesNotMatch) when calling the ListBuckets operation: The request signature we calculated does not match the signature you provided.

原因

  1. アクセスキーが無効: 削除または無効化されたキー
  2. 認証情報の入力ミス: アクセスキーID またはシークレットキーの誤り
  3. 認証情報が設定されていない: 環境変数やcredentialsファイルがない
  4. 間違ったプロファイル: 異なるプロファイルを使用
  5. 一時的な認証情報の期限切れ: セッショントークンが期限切れ

解決策

1. 認証情報の確認

1
2
3
4
5
6
7
8
# 現在の認証情報を確認
aws sts get-caller-identity

# 設定されている認証情報を確認(表示はマスクされる)
aws configure list

# プロファイルを指定して確認
aws sts get-caller-identity --profile my-profile

2. 認証情報の再設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# AWS CLI の設定
aws configure

# プロファイルを指定して設定
aws configure --profile production

# 対話形式で入力
# AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
# AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# Default region name [None]: ap-northeast-1
# Default output format [None]: json

3. 認証情報ファイルの確認

1
2
3
4
5
# credentials ファイルを確認
cat ~/.aws/credentials

# config ファイルを確認
cat ~/.aws/config
1
2
3
4
5
6
7
8
# ~/.aws/credentials
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[production]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
1
2
3
4
5
6
7
8
# ~/.aws/config
[default]
region = ap-northeast-1
output = json

[profile production]
region = us-east-1
output = json

4. 環境変数の確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 環境変数を確認
echo $AWS_ACCESS_KEY_ID
echo $AWS_SECRET_ACCESS_KEY
echo $AWS_SESSION_TOKEN
echo $AWS_PROFILE
echo $AWS_DEFAULT_REGION

# 環境変数をクリア(ファイルの認証情報を使用する場合)
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN

# 環境変数で設定
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=ap-northeast-1

5. 新しいアクセスキーの作成

  1. AWS Console にログイン
  2. IAM → ユーザー → 対象ユーザー
  3. セキュリティ認証情報 タブ
  4. アクセスキー → アクセスキーを作成
  5. 新しいキーをダウンロード・保存
1
2
3
4
5
# 古いキーを無効化(オプション)
aws iam update-access-key --access-key-id AKIAIOSFODNN7EXAMPLE --status Inactive --user-name my-user

# 新しいキーで設定
aws configure

6. IAMロールの使用(推奨)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# EC2 インスタンスプロファイル
# IAMロールがアタッチされていれば認証情報不要

# ロールの確認
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/

# ロールを assume
aws sts assume-role \
    --role-arn arn:aws:iam::123456789012:role/MyRole \
    --role-session-name my-session

7. 一時的な認証情報(STS)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 現在のセッションを確認
aws sts get-caller-identity

# セッショントークンを使用する場合
export AWS_SESSION_TOKEN=token_value

# MFA でセッショントークンを取得
aws sts get-session-token \
    --serial-number arn:aws:iam::123456789012:mfa/user \
    --token-code 123456

8. GitHub Actions での設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# .github/workflows/deploy.yml
jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      # OIDC で認証(推奨)
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole
          aws-region: ap-northeast-1

      # または シークレットを使用
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-1

9. Docker/Kubernetes での設定

1
2
3
4
5
# Dockerfile で環境変数を使用
ENV AWS_DEFAULT_REGION=ap-northeast-1

# 認証情報はビルド時に含めない
# 実行時に環境変数やボリュームマウントで渡す
1
2
3
4
5
6
7
# Docker 実行時に認証情報を渡す
docker run -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
           -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
           my-app

# credentials ファイルをマウント
docker run -v ~/.aws:/root/.aws:ro my-app

SDK での設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Python (boto3)
import boto3

# デフォルトの認証情報を使用
client = boto3.client('s3')

# 明示的に指定
client = boto3.client(
    's3',
    aws_access_key_id='AKIAIOSFODNN7EXAMPLE',
    aws_secret_access_key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
    region_name='ap-northeast-1'
)

# プロファイルを使用
session = boto3.Session(profile_name='production')
client = session.client('s3')
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// Node.js (AWS SDK v3)
import { S3Client } from "@aws-sdk/client-s3";

// デフォルトの認証情報を使用
const client = new S3Client({ region: "ap-northeast-1" });

// 明示的に指定
const client = new S3Client({
    region: "ap-northeast-1",
    credentials: {
        accessKeyId: "AKIAIOSFODNN7EXAMPLE",
        secretAccessKey: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
    }
});

デバッグのコツ

認証情報の優先順位

  1. コード内で明示的に指定
  2. 環境変数
  3. 共有認証情報ファイル(~/.aws/credentials)
  4. IAM ロール(EC2, Lambda等)

デバッグ出力

1
2
3
4
5
6
7
# AWS CLI のデバッグ出力
aws s3 ls --debug 2>&1 | grep -i credential

# Python boto3 のログ
import logging
logging.basicConfig(level=logging.DEBUG)
boto3.set_stream_logger('')

関連エラー

AWS の他のエラー

最終更新: 2025-12-08