MeWrite Docs

SignatureDoesNotMatch: The request signature we calculated does not match

概要

AWSのAPIリクエストで計算された署名がサーバー側の期待値と一致しない場合に発生するエラーです。シークレットキーの誤り、時刻のずれ、またはリクエストの改変が原因です。

エラーメッセージ

SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method.
An error occurred (SignatureDoesNotMatch) when calling the PutObject operation: The request signature we calculated does not match the signature you provided.

原因

このエラーは以下の原因で発生します:

  1. シークレットアクセスキーの誤り: キーが間違っているか欠損
  2. システム時刻のずれ: 15分以上のずれで署名が無効に
  3. リクエストの改変: プロキシやミドルウェアがリクエストを変更
  4. エンコーディングの問題: URLエンコードの不一致
  5. ヘッダーの不一致: 署名対象のヘッダーが変更された

解決策

1. シークレットキーを再確認

1
2
3
4
5
# 認証情報を完全に再設定
rm ~/.aws/credentials
aws configure

# 入力時に余分な空白がないか注意

2. システム時刻を確認・同期

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 現在の時刻を確認
date -u

# NTPで同期(Linux)
sudo systemctl restart systemd-timesyncd
timedatectl status

# Docker コンテナ内
apt-get update && apt-get install -y ntpdate
ntpdate pool.ntp.org

3. プロキシ設定を確認

1
2
3
4
5
6
7
8
# プロキシ環境変数を確認
echo $HTTP_PROXY
echo $HTTPS_PROXY

# プロキシを無効化してテスト
unset HTTP_PROXY
unset HTTPS_PROXY
aws s3 ls

4. S3 のパス形式を確認

1
2
3
4
5
# パス形式を明示的に指定
aws configure set s3.addressing_style path

# または仮想ホスト形式
aws configure set s3.addressing_style virtual

5. SDKのバージョンを更新

1
2
3
4
5
# AWS CLI を最新に更新
pip install --upgrade awscli

# boto3 を更新
pip install --upgrade boto3
1
2
// Node.js SDK を更新
npm update @aws-sdk/client-s3

特殊文字を含むキーの対処

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# シークレットキーに特殊文字がある場合
# credentials ファイルに直接記述

cat > ~/.aws/credentials << 'EOF'
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtn+FEMI/K7MDENG/bPxRfiCY+EXAMPLEKEY
EOF

# シングルクォートで囲むことで特殊文字をそのまま保存

Docker環境での対処

1
2
3
4
5
# Dockerfile で時刻同期
RUN apt-get update && apt-get install -y tzdata

# または起動時に同期
CMD ["sh", "-c", "ntpdate pool.ntp.org && python app.py"]
1
2
3
4
5
# docker-compose.yml
services:
  app:
    volumes:
      - /etc/localtime:/etc/localtime:ro

よくある間違い

  • EC2/ECS のメタデータサービスへのアクセスがブロックされている
  • Lambda関数のタイムアウトで時刻ずれが蓄積
  • VPCエンドポイント経由でリクエストが改変される
  • マルチパートアップロードで署名が不一致

デバッグ

1
2
# 詳細なデバッグ出力
aws s3 ls --debug 2>&1 | grep -E "(StringToSign|Signature|Timestamp)"

関連エラー

参考リンク

関連エラー

AWS の他のエラー

最終更新: 2025-12-16