署名メカニズム
アクセスリクエストのたびに、Auto Scaling は認証を実行します。したがって、HTTP と HTTPS のどちらで送信する場合も、各リクエストには署名情報が必要です。Auto Scaling は Access Key ID と Access Key Secret を使用して、対称暗号化方式によるリクエスト送信者の認証を実行します。Access Key ID と Access Key Secret は、Alibaba Cloud から訪問者に対して公式に発行されます (訪問者は Alibaba Cloud の公式 Web サイトでこれらの情報を申請し、管理することができます)。Access Key ID は訪問者の ID を示します。Access Key Secret は暗号化に使用する秘密鍵であり、サーバーで署名文字列を検証する際にも用いられます。機密として取り扱い、Alibaba Cloud と当該ユーザー以外に知られてはならない情報です。
ユーザーがサーバーへの呼び出しを実行する際に、以下の方法でリクエストに署名します。
リクエストパラメーターを使用して、正規化クエリ文字列を作成します。
リクエストパラメーターは、パラメーター名でアルファベット順に並べます (これには “パブリックリクエストパラメーター” と、このドキュメントで取り上げる任意のリクエストインターフェイスに対するユーザー定義パラメーターが含まれますが、「パブリックリクエストパラメーター」に説明のある Signature パラメーターは含まれません)。
注意: GET メソッドを使用して送信するリクエストの場合、これらのパラメーターはリクエスト URI のパラメーターセクションを構成します (つまり、URI の “?” 以降に “&” で連結)。
各リクエストパラメーターの名前と値をエンコードします。名前と値は、UTF-8 文字セットを使用して URL エンコードする必要があります。この URL エンコーディングのルールは以下のとおりです。
- 英字 A ~ Z および a ~ z、数字 0 ~ 9、記号 “-“、”_”、”.”、”~” はエンコードされません。
- 他の文字は “%XY” 形式でエンコードされます。この “XY” は、16 進表記の文字の ASCII コードです。たとえば、英字の二重引用符は “%22” としてエンコードされます。
- UTF-8 拡張文字は “%XY%ZA…” の形式でエンコードされます。
- スペースは、プラス記号 “+” ではなく “%20” としてエンコードされることに注意してください。
注意: 一般的に、URL エンコーディングに対応しているライブラリ (Java の java.net.URLEncoder など) は、すべて “application/x-www-form-urlencoded” MIME タイプのルールに従ってエンコードされます。このエンコーディング方法を用いる場合は、前述のエンコーディングルールに合わせて、エンコードされた文字列内のプラス記号 “+” を “%20” に、アスタリスク “*” を “%2A” に置き換え、”%7E” をチルダ “~” に戻してください。
エンコードしたパラメーター名と値を半角の等号 “=” で連結します。
次に等号で結んだパラメーター名と値のペアをアルファベット順に並べ、”&” 記号で連結して、正規化クエリ文字列を作成します。
以下のルールに従い、前の手順で作成した正規化クエリ文字列を使用して、署名の計算に用いる文字列を作成します。
StringToSign=
HTTPMethod + “&” +
percentEncode(“/”) + ”&” +
percentEncode(CanonicalizedQueryString)
HTTPMethod は、リクエスト送信に使用する GET などの HTTP メソッドです。
percentEncode(“/“) は、1.ii の URL エンコーディングルールに従って文字 “/“ をコード化した値、つまり “%2F” です。
percentEncode(CanonicalizedQueryString) はステップ 1 で作成した正規化クエリ文字列を、1.ii の URL エンコーディングルールに従ってエンコードした文字列です。
RFC2104 の定義に従い、前述の署名文字列を使用して署名の HMAC 値を計算します。
注意: 署名を計算する際の Key は、ユーザーが保持する Access Key Secret の末尾に、SHA1 ハッシュに基づいて “&” 文字 (ASCII: 38) を付加したものです。
Base64 エンコーディングルールに従って、上記の HMAC 値を文字列にエンコードします。これにより署名値が得られます。
得られた署名値を、Signature パラメーターとしてリクエストパラメーターに追加します。これで、リクエストの署名プロセスは完了です。
注意: 得られた署名値を最終的なリクエストパラメーター値として ECS サーバーに送信する際に、RFC3986 のルールに従って、他のパラメーターと同様に値は URL エンコーディングされます。
DescribeScalingGroups を例に説明します。署名前のリクエスト URL は次のとおりです。
http://ess.aliyuncs.com/?TimeStamp=2014-08-15T11%3A10%3A07Z&Format=xml&AccessKeyId=testid&Action=DescribeScalingGroups&SignatureMethod=HMAC-SHA1&RegionId=cn-qingdao&SignatureNonce=1324fd0e-e2bb-4bb1-917c-bd6e437f1710&SignatureVersion=1.0&Version=2014-08-28
この場合、StringToSign は次のようになります。
GET&%2F&AccessKeyId%3Dtestid&Action%3DDescribeScalingGroups&Format%3Dxml&RegionId%3Dcn-qingdao&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D1324fd0e-e2bb-4bb1-917c-bd6e437f1710&SignatureVersion%3D1.0&TimeStamp%3D2014-08-15T11%253A10%253A07Z&Version%3D2014-08-28
Access Key ID が “testid”、Access Key Secret が “testsecret”、HMAC の計算に使用する Key が “testsecret&” であると想定します。計算された署名値は “SmhZuLUnXmqxSEZ%2FGqyiwGqmf%2BM=” です。
署名付きリクエスト URL は次のとおりです (Signature パラメーターによって追加されています)。
http://ess.aliyuncs.com/?TimeStamp=2014-08-15T11%3A10%3A07Z&Format=xml&AccessKeyId=testid&Action=DescribeScalingGroups&SignatureMethod=HMAC-SHA1&RegionId=cn-qingdao&SignatureNonce=1324fd0e-e2bb-4bb1-917c-bd6e437f1710&SignatureVersion=1.0&Version=2014-08-28&Signature=SmhZuLUnXmqxSEZ%2FGqyiwGqmf%2BM%3D
署名と送信の詳細については、付録[インターフェイスの呼び出し方法]を参照してください。