Alibaba Cloud に HTTP リクエストを送信する際、Alibaba Cloud 側で送信者を識別できるよう、リクエストに署名する必要があります。 署名には、AccessKey ID と AccessKey Secret で構成される AccessKey を使用します。 プライマリアカウントで使用する AccessKey の申請と管理は、Alibaba Cloud の公式サイトで行います。

署名プロセス

  1. 正規化されたリクエストを作成します。
    • パラメーター名を文字コードポイントの昇順でソートします。 共通リクエストパラメーターと、呼び出す 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 をエンコードした文字列を設定します。

  2. 上記の署名文字列を使用し、 RFC2104 の定義に基づいて署名の HMAC 値を計算します。 注: 署名の計算には、ユーザーが所有する Access Key Secret に "&" 文字 (ASCII: 38) が追加されたキーが、またハッシュ計算アルゴリズムには SHA1 が使用されます。
  3. Base64 エンコード規則に従って、前述の HMAC 値をエンコードすることにより、署名値が得られます。
  4. 取得した署名値を "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****