すべてのプロダクト
Search
ドキュメントセンター

Auto Scaling:署名

最終更新日:Sep 24, 2024

このトピックでは、署名について説明します。

Auto Scalingは、アクセス要求ごとに認証を実行します。 したがって、HTTPまたはHTTPSで送信される各リクエストには、署名情報が含まれている必要があります。 AccessKeyIDとAccessKeySecretを使用して、Auto Scalingは対称暗号化を実行し、リクエストの送信者を認証します。 AccessKeyIDとAccessKeySecretは、Alibaba Cloudによって訪問者に正式に発行されます (訪問者はAlibaba Cloudの公式Webサイトで申請および管理できます) 。 AccessKeyIDは、訪問者のIDを示します。 AccessKeySecretは、サーバー上の署名文字列の暗号化と検証に使用される秘密鍵です。 機密情報を保持する必要があり、Alibaba Cloudとユーザーのみが利用できるようにする必要があります。

ユーザーがサーバーにアクセスすると、次の方法でリクエスト署名が行われます。

  1. 正規化クエリ文字列は、リクエストパラメーターを使用して作成されます。

    1. リクエストパラメータは、パラメータ名によってアルファベット順に並べられます (これには、「パブリックリクエストパラメータ」と、このドキュメントに記載されている指定されたリクエストインターフェイスのユーザー定義パラメータが含まれますが、「パブリックリクエストパラメータ」に記載されているSignatureパラメータは含まれません) 。

      説明

      GETメソッドを使用して送信されたリクエストの場合、これらのパラメーターはリクエストURIのパラメーターセクションを構成します (つまり、URIの「? 」に続き、「&」で接続されているセクション) 。

    2. 各リクエストパラメーターの名前および値はエンコードされています。 名前と値は、UTF-8文字セットを使用してURLエンコードする必要があります。 URL のエンコーディング規則は以下のとおりです。

      • 英字A-Zとa-z、数字0-9、および文字 "-" 、"_" 、"." 、"~" はエンコードされていません。

      • 他の文字は「 % XY」形式でエンコードされ、「XY」は文字のASCIIコードを16進表記で表します。 たとえば、英語の二重引用符は「 % 22」としてエンコードされます。

      • 拡張UTF-8文字は、「 % XY % ZA… 」形式でエンコードされます。

      • スペースはプラス記号「 + 」ではなく「 % 20」にエンコードされることに注意してください。

      説明

      一般に、URLエンコーディングをサポートするライブラリ (たとえば、Javaのjava.net.URLEncoder) はすべて、「application/x-www-form-urlencoded」MIMEタイプのルールに従ってエンコードされます。 このエンコード方法を使用する場合は、エンコードされた文字列のプラス記号「 + 」を「 % 20」に、アスタリスク「 * 」を「 % 2A」に置き換え、「 % 7E」を変更してチルダ「〜」に戻します。

    3. エンコードされたパラメータ名と値を等号「=」で接続します。

    4. 次に、アルファベット順に等号で接続されたパラメータ名と値のペアをソートし、それらを「&」記号で接続して正規化クエリ文字列を生成します。

  2. 次のルールに従い、前のステップで生成した正規化クエリ文字列を使用し、署名計算用の文字列を生成します。

    StringToSign=
     HTTPMethod + "&" +
     percentEncode("/") + "&" +
     percentEncode(CanonicalizedQueryString)
    • HTTPMethodは、GETなど、リクエスト送信に使用されるHTTPメソッドです。

    • percentEncode("/") は、1.iiに記載されているURLエンコード規則に従って文字 "/" のコード値、つまり "% 2F" です。

    • percentEncode(CanonicalizedQueryString) は、ステップ1で作成されたCanonicalized Query Stringのエンコードされた文字列で、1.bで説明されているURLエンコードルールに従って作成されます。

  3. RFC2104 の定義にもとづいて、上記の署名文字列を使用して署名の HMAC 値を計算します。

    説明

    署名の計算に使用されるキーは、ユーザーが保持するAccessKeySecretで、「&」文字 (ASCII:38) で終わり、SHA1ハッシュに基づいています。

  4. Base64 エンコードルールにもとづき、上記の HMAC 値を文字列にエンコードします。 この処理によって署名値が生成されます。

  5. 生成された署名値を 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

    AccessKeyIDが "testid" 、AccessKeySecretが "testsecret" 、HMAC計算に使用されるキーが "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

署名とリクエストの送信の詳細については、「」「インターフェイスを呼び出す方法」をご参照ください。