1. ホーム
  2. php

[解決済み] Amazon S3 - 'The request signature we calculated does not match signature' エラーを修正する方法は?

2022-03-09 20:56:44

質問

2日以上前からウェブで検索し、おそらくオンラインで文書化されたシナリオや回避策にはほとんど目を通したのですが、今のところ何もうまくいきません。

私が使用しているのは AWS SDK PHP 5.3 で動作する PHP V2.8.7 用です。

私は以下のコードでAmazon S3バケットに接続しようとしています。

// Create a `Aws` object using a configuration file
$aws = Aws::factory('config.php');

// Get the client from the service locator by namespace
$s3Client = $aws->get('s3');

$bucket = "xxx";
$keyname = "xxx";

try {
    $result = $s3Client->putObject(array(
        'Bucket' => $bucket,
        'Key' => $keyname,
        'Body' => 'Hello World!'
    ));

    $file_error = false;
} catch (Exception $e) {
    $file_error = true;

    echo $e->getMessage();

    die();
}

私のconfig.phpファイルは以下の通りです。

return [
    // Bootstrap the configuration file with AWS specific features
    'includes' => ['_aws'],
    'services' => [
        // All AWS clients extend from 'default_settings'. Here we are
        // overriding 'default_settings' with our default credentials and
        // providing a default region setting.
        'default_settings' => [
            'params' => [
                'credentials' => [
                    'key'    => 'key',
                    'secret' => 'secret'
                ]
            ]
        ]
    ]
];

以下のようなエラーが発生しています。

私たちが計算したリクエスト署名は、あなたが提供した署名と一致しません。鍵や署名の方法を確認してください。

すでに20回以上アクセスキーとシークレットを確認し、新しいものを生成し、情報を渡すためにさまざまな方法(プロファイルやコードに認証情報を含めるなど)を使用しましたが、今のところ何もうまくいきません。

どうすればいいですか?

2日間のデバッグの末、ようやく問題が判明しました...。

私がオブジェクトに割り当てていたキーは、ピリオドで始まるものでした。 ..\images\ABC.jpg そのため、エラーが発生しました。

APIがもっと意味のある適切なエラーメッセージを提供してくれればいいのですが、残念ながら、これが誰かの助けになることを願っています