HTTP Authorizationヘッダを利用した署名作成およびリクエスト例#
test.dataオブジェクトをtest-bucketバケットにPUTする例を記載します。
[user]$ curl -v -X PUT "https://objectstorage-s.jp-east-3.cloud.global.fujitsu.com/test-bucket/test.data" \ -H "x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" \ -H "x-amz-date:20190322T091912Z" \ -H "Authorization:AWS4-HMAC-SHA256 Credential=<アクセスキー>/20190322/jp-east-3/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=<"署名"> -T test.data
-
正規リクエスト情報
以下の内容で、request.dataファイルを作成します。
PUT /test-bucket/test.data ← Canonical_Queryがないため改行が入る host:objectstorage-s.jp-east-3.cloud.global.fujitsu.com x-amz-content-sha256:<Request_Payload> x-amz-date:20190322T091912Z ← Canonical_Headers全体の改行が入る host;x-amz-content-sha256;x-amz-date <Request_Payload> ← 文字列の最後改行文字を入れないこと
リクエストボディが存在しない場合でも<Request_Payload> は16進文字列化したものの記載が必要です。文字列は以下のように作成できる。
[user]$ RequestPayload=`echo -n "" | openssl dgst -sha256 | awk '{print $2}'` [user]$ echo $RequestPayload e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
上記リクエスト情報が格納されているファイルをrequest.dataとした場合、署名文字に渡すCanonical_strは以下で作成できます。
[user]$ REQUESTDATA=`openssl dgst -r -sha256 request.data | awk '{print $1}'` [user]$ echo $REQUESTDATA 549ff4584ae198b7e53650c48040a4f645c98437dab1c2262c24621aa915af13 ← 正規リクエストをSHA256でハッシュ化し16進文字に変換した結果 \(文字列の最後に改行文字を入れないこと\)
-
署名文字列
以下の内容で、signstring.dataファイルを作成します。
AWS4-HMAC-SHA256 20190322T091912Z 20190322/jp-east-3/s3/aws4_request 549ff4584ae198b7e53650c48040a4f645c98437dab1c2262c24621aa915af ← 1の$REQUESTDATAの内容を記載
-
署名キーの作成
[user]$ SECRETKEY=<シークレットキー> [user]$ LDATE="20190322" \[user\]$ REGION="jp-east-3" [user]$ SERVICE="s3" [user]$ TCODE1=$(echo -n "${LDATE}" | openssl dgst -sha256 -mac HMAC -macopt "key:AWS4${SECRETKEY}" | awk '{print $2}') [user]$ TCODE2=$(echo -n "${REGION}" | openssl dgst -sha256 -mac HMAC -macopt "hexkey:${TCODE1}" | awk '{print $2}') [user]$ TCODE3=$(echo -n "s3" | openssl dgst -sha256 -mac HMAC -macopt "hexkey:${TCODE2}" | awk '{print $2}') [user]$ SIGNKEY=$(echo -n "aws4_request" | openssl dgst -sha256 -mac HMAC -macopt "hexkey:${TCODE3}" | awk '{print $2}') [user]$ echo $SIGNKEY fe8a05619a205ec5e7c0bd617f6cd71eb4c0a802ee669b62161a86ece2ad38a3 ← 署名キー
-
署名の作成
署名文字列のファイルをsignstring.data、署名キーをSIGNKEY変数とした場合、署名は以下で作成できます。
[user]$ SIGN4=$(openssl dgst -sha256 -mac HMAC -macopt "hexkey:${SIGNKEY}" signstring.data | awk '{print $2}') [user]$ echo $SIGN4 6f309eb8c64a53cac33ff9d92bd3d2fa26a77822357bcfefe9fad5cb86e5d8c4 ← 本署名をAuthorizationパラメータに記載する。
📒注: 署名バージョン4は 、要求の本文のSHA256の値は計算されません。したがって、ユーザーが送信した値が検証なしで受け入れられます。