Alibaba Cloud に HTTP リクエストを送信する際、Alibaba Cloud 側で送信者を識別できるよう、リクエストに署名する必要があります。 署名には、AccessKey ID と AccessKey Secret で構成される AccessKey を使用します。 プライマリアカウントで使用する AccessKey の申請と管理は、Alibaba Cloud の公式サイトで行います。
署名プロセス
- 正規化されたリクエストを作成します。
- パラメーター名を文字コードポイントの昇順でソートします。 共通リクエストパラメーターと、呼び出す API のパラメーターがソート対象です。
注 GET メソッドを使用してリクエストを送信する場合、対象のパラメーターはリクエスト URI の "?" と "&"で連結されたパラメーター部分です。
- 各リクエストパラメーターの名前と値をエンコードします。 エンコードには UTF-8 文字セットを使用します。 コーディング規則は次のとおりです。
- 大文字、小文字、数字、ハイフン (-)、アンダースコア (.)、ピリオド 、チルダ (~) はエンコード不要です。
- 他の文字は、"%XY" (XY は ASCII 文字の 16 進表現) としてエンコードします。 二重引用符 (") は %22 としてエンコードします。
- 英字のスペース ( ) は、プラス記号 (+) ではなく%20 としてエンコードします。
注 通常の場合、URL エンコードをサポートするライブラリ (Java の java.net.URLEncoder など) はすべて、"application / x-www-form-urlencoded" MIME タイプのルールに従ってエンコードします。 この方式でエンコードする場合、上記の規則に合わせるため、エンコードされた文字列のプラス記号 (+) を %20 に、アスタリスク (*) を %2A に、%7E をチルダ (~) に戻します 。
- エンコードされたパラメーター名と値を英字の等号 (=) で接続します。
- 次に、等号で接続されたパラメーター名と値のペアをアルファベット順に並べ、それらを "&" 記号で連結して、正規化されたクエリ文字列 (Canonicalized Query
String) を生成します。
上記の手順で取得した Canonicalized Query String を使用し、次の規則に従って署名計算用の文字列を作成します。
StringToSign= HTTPMethod + “&” + percentEncode(“/”) + ”&” + percentEncode(CanonicalizedQueryString)
HTTPMethod: GETなど、リクエストの送信に使用される HTTP メソッドを設定します。 -percentEncode (“/”): 上記の URL エンコード規則に従って文字 "/" をエンコードした値 ("2F") を設定します。
percentEncode(CanonicalizedQueryString): 手順 1.b に記載の URL エンコード規則に従って生成された Canonicalized Query String をエンコードした文字列を設定します。
- パラメーター名を文字コードポイントの昇順でソートします。 共通リクエストパラメーターと、呼び出す API のパラメーターがソート対象です。
- 上記の署名文字列を使用し、 RFC2104 の定義に基づいて署名の HMAC 値を計算します。 注: 署名の計算には、ユーザーが所有する Access Key Secret に "&" 文字 (ASCII: 38) が追加されたキーが、またハッシュ計算アルゴリズムには SHA1 が使用されます。
- Base64 エンコード規則に従って、前述の HMAC 値をエンコードすることにより、署名値が得られます。
- 取得した署名値を "Signature" パラメーターとしてリクエストパラメーターに追加し、リクエストの署名プロセスを完了します。
注 注: 取得した署名値が最終リクエストパラメーター値として KMS サーバーに送信されると、その値はRFC3986 に従って他のパラメーターと同様に URL エンコードされた値となります。
例
たとえば CreateKey
の場合、署名前のリクエスト URL は次のとおりです。
https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
&SignatureVersion=1.0
&Format=json
&Version=2016-01-20
&AccessKeyId=testid
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-28T03:13:08Z
CanonicalizedQueryString
は次のとおりです。
AccessKeyId=testid&Action=CreateKey&Format=json&SignatureMethod=HMAC-SHA1&SignatureVersion=1.0&Timestamp=2016-03-28T03%3A13%3A08Z&Version=2016-01-20
StringToSign
は次のとおりです。
GET&%2F&AccessKeyId%3Dtestid&Action%3DCreateKey&Format%3Djson&SignatureMethod%3DHMAC-SHA1&SignatureVersion%3D1.0&Timestamp%3D2016-03-28T03%253A13%253A08Z&Version%3D2016-01-20
Access Key ID が testid
、Access Key Secret が testsecret
、HMAC 値の計算に使用するキーが testsecret&
の場合、計算される署名の値は次のとおりです。
s/OdVWMTmNGagvWlljdAJ7Itsew=
署名されたリクエスト URL (Signature パラメーターが追加された状態) は次のとおりです。
https://kms.cn-hangzhou.aliyuncs.com/?Action=CreateKey
&SignatureVersion=1.0
&Format=json
&Version=2016-01-20
&AccessKeyId=F585********APMU
&SignatureMethod=HMAC-SHA1
&Timestamp=2016-03-28T03:13:08Z
&Signature=41wk2SSX1GJh7fwnc5eqOfiJPF****