問題の説明
X-Amz-SignedHeaders パラメーターに host フィールドがありません。host フィールドは必須です。
原因
リクエストは Amazon S3 互換の署名バージョン 4 を使用していますが、X-Amz-SignedHeaders に host が含まれていません。X-Amz-SignedHeaders は、署名計算に含まれる HTTP ヘッダーをリストします。host ヘッダーは常に必須です。
例
次のリクエストは、クエリ文字列認証 (署名付き URL 形式) を使用しています。X-Amz-SignedHeaders が range のみに設定されているため、host がありません。
GET /test.txt
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=LTAI****************/20221220/us-east-1/s3/aws4_request
&X-Amz-Date=20221220T084818Z
&X-Amz-Expires=86400
&X-Amz-SignedHeaders=range
&X-Amz-Signature=ab2***st HTTP/1.0
Date: Tue, 20 Dec 2022 08:48:18 GMT
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Range: bytes=100-900
x-oss-s3-compat: trueソリューション
X-Amz-SignedHeaders に host を追加し、他のヘッダーとはセミコロンで区切ります。
GET /test.txt
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=LTAI****************/20221220/us-east-1/s3/aws4_request
&X-Amz-Date=20221220T084818Z
&X-Amz-Expires=86400
&X-Amz-SignedHeaders=host;range
&X-Amz-Signature=ab2***st HTTP/1.0
Date: Tue, 20 Dec 2022 08:48:18 GMT
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Range: bytes=100-900
x-oss-s3-compat: true主な変更点: X-Amz-SignedHeaders=range → X-Amz-SignedHeaders=host;range。
署名エラーを回避するには、Amazon S3 SDK を使用してリクエストを作成および署名します。詳細については、「OSS へのアクセスに Amazon S3 SDK を使用する」をご参照ください。