署名付きURL#
書名付きURLで、test.dataオブジェクトをtest-bucketバケットにPUTする例を記載します。
[user]$ curl -v -X PUT "https://objectstorage-s.jp-east-3.cloud.global.fujitsu.com/test-bucket/test.data?X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=<アクセスキー>%2F20190411%2Fjp-east-3%2Fs3%2Faws4_request &X-Amz-Date=20190411T002330Z &X-Amz-Expires=100 &X-Amz-SignedHeaders=host &X-Amz-Signature=<署名> " -T test.data
表 1. 署名付きURLパラメータ
パラメータ | 説明 |
---|---|
X-Amz-Algorithm | AWS4-HMAC-SHA256を指定します。 これは、署名バージョン4およびHMAC-SHAR256のアルゴリズムで署名されていることの識別です。 |
X-Amz-Credential | 以下の形式で指定します。<アクセスキー>/<UTC日付>/<リージョンID>/s3/aws4_request - アクセスキー:管理コマンドのアクセスキー取得コマンド発行されたアクセスキー - UTC日付:リクエスト日付(ISO8601形式のUTC日付) - リージョンID: 利用リージョン (ex. jp-east-3) 📘ヒント: - 実際に指定する場合に"/"文字列をエンコードして指定する必要があるため、下記のように"/"の代わりに%2Fと記述します。 <アクセスキー>%2F<UTC日付>%2F<リージョンID>%2Fs3%2Faws4_request - UTC日付はx-amz-dateの日付部分と同じ値を指定します。 |
X-Amz-Date | ISO8601形式のUTC日時を指定します。 |
X-Amz-Expires | 署名付きURLの有効期間を秒単位で指定します。 指定範囲は1~604800です。 📒注:本時間はリクエストを実行できる最小時間を設定してください。 |
X-Amz-SignedHeaders | 署名計算で利用したヘッダー名を記載します。 📘ヒント: 以下ヘッダは必須です。 ・Hostヘッダ 以下ヘッダはリクエスト時に使用する場合にだけ必須です。 ・Content-Typeヘッダ ・x-amz-*系のヘッダ |
X-Amz-Signature | 作成した署名文字列を記載します。上記パラメータの末尾に付加します。 |
📘ヒント:
バケット/オブジェクト操作向けの各APIのリクエストパラメータでは、以下の headerパラメータが必須と記載していますが、本署名付きURLを利用する場合は必須ではありません。
・x-amz-content-sha256
・x-amz-date
・Authorization
バケット/オブジェクト操作向けの各APIのリクエストパラメータでは、以下の headerパラメータが必須と記載していますが、本署名付きURLを利用する場合は必須ではありません。
・x-amz-content-sha256
・x-amz-date
・Authorization
-
正規リクエスト情報の作成
以下の内容で、request.dataファイルを作成します。
PUT /test-bucket/test.data X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=<アクセスキー>%2F20190411%2Fjp-east-3%2Fs3%2Faws4_request&X-Amz-Date=20190411T002330Z&X-Amz-Expires=100&X-Amz-SignedHeaders=host host:objectstorage-s.jp-east-3.cloud.global.fujitsu.com ← Canonical_Headers全体の改行 host UNSIGNED-PAYLOAD ← 署名付きURLの場合、固定文字列「UNSIGNED-PAYLOAD」を記載。改行はなし
上記リクエスト情報が格納されているファイルをrequest.dataとした場合、署名文字に渡すCanonical_strは以下で作成できます。
[user]$ REQUESTDATA=`openssl dgst -r -sha256 request.data | awk '{print $1}'` [user]$ echo $REQUESTDATA 466aa396f3da5d6b4ebb955d6a9c0f220d2b22d38ee6ab56e24ee38f75e70a0c ← 正規リクエストをSHA256でハッシュ化し16進文字に変換した結果
-
署名文字列ファイルの作成
以下の内容で、signstring.dataファイルを作成します。
AWS4-HMAC-SHA256 201900411T091912Z 20190411/jp-east-3/s3/aws4_request 466aa396f3da5d6b4ebb955d6a9c0f220d2b22d38ee6ab56e24ee38f75e70a0c ← 1の$REQUESTDATAの内容を記載
-
署名キーの作成
[user]$ SECRETKEY=<シークレットキー> [user]$ LDATE="20190411" [user]$ REGION="jp-east-3" [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 72e9a862ddbb424872f7da5c08b4bb5f11a7d6e58b5fc6a01848e918984b74af ← 署名キー
-
署名の作成
署名文字列のファイルをsignstring.data、署名キーをSIGNKEY変数とした場合、署名は以下で作成できる。
[user]$ SIGN4=$(openssl dgst -sha256 -mac HMAC -macopt "hexkey:${SIGNKEY}" signstring.data | awk '{print $2}') [user]$ echo $SIGN4 6f309eb8c64a53cac33ff9d92bd3d2fa26a77822357bcfefe9fad5cb86e5d8c4 ← 本署名をX-Amz-Signatureパラメータに記載