ECS は各アクセスリクエストに対して ID 認証を実行します。 このためリクエストには、HTTP または HTTPS のどちらを介してサブミットしたかに関わりなく、署名情報が含まれている必要があります。

ECS は、Access Key ID と Access Key Secret に基づく対称暗号化を使用して、リクエスト送信者の ID を検証します。 Access Key ID と Access Key Secret は Alibaba Cloud によってユーザーに発行されます (ユーザーは Alibaba Cloud の Web サイトでキーをリクエストおよび管理できます)。 Access Key ID はユーザーの ID を示します。 -Access Key Secret は、署名文字列を暗号化してサーバー上の署名文字列を検証する場合に使用される秘密鍵です。 この情報は機密として厳密に取り扱い、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 でエンコードすることにご注意ください。

      重要 このエンコード方式は、application/x-www-form-urlencoded MIME エンコードアルゴリズム (Java 標準ライブラリーで提供される java.net.URLEncoder クラスの実装など) と類似していますが、異なる方式です。 エンコードした文字列内のプラス記号 (+) を "%20"、アスタリスク (*) を "%2A" に直接置き換え、"%7E" を波形符号 (~) に戻せば、上記のエンコード規則に準拠してこのエンコード方式を使用することができます。 このアルゴリズムは、以下の percentEncode() メソッドを使用して実装できます。
      private static final String ENCODING = "UTF-8";
      private static String percentEncode(String value) throws UnsupportedEncodingException {
        return value ! = null? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null;
      }
    3. エンコードされたパラメーター名と値を等号 (=) で接続します。
    4. 次に、アルファベット順に等号で接続されたパラメーター名と値のペアをソートし、アンパサンド (&) で接続して正規化クエリ文字列を生成します。
  2. 以下のルールに従って正規化クエリ文字列を使用し、署名計算用の文字列を構築します。
    StringToSign=
      HTTPMethod + “&” +
      percentEncode(“/”) + ”&” +
       percentEncode(CanonicalizedQueryString)

    この公式では、HTTPMethod はリクエストのサブミットに使用される HTTP メソッド (GET など) です。 percentEncode (“ /“) は、1.ii で説明した URL エンコーディング規則に従って、文字 “ /” のエンコード値 (%2F) です。 percentEncode (CanonicalizedQueryString) は、1.ii で説明した URL エンコード規則に従ってステップ 1 で構成された正規化クエリ文字列のエンコードされた文字列です。

  3. 署名計算の文字列を使用して RFC2104 に基づく署名の HMAC 値を計算します。
    重要 署名の計算に使用されるキーは、アンパサンド "&" (ASCII:38) を追加した秘密アクセス鍵で、SHA1 ハッシュアルゴリズムをベースとしています。
  4. HMAC 値を Base64 エンコード規則に基づく文字列にエンコードして、署名値を取得します。
  5. 得られた署名値を Signature パラメーターとしてリクエストパラメーターに追加し、リクエスト署名プロセスを完了します。
    重要 取得した署名値は、最終的なリクエストパラメーター値として GPDB サーバーにサブミットする前に、他のパラメーターと同様、RFC3986 規則に基づいて URL エンコーディングする必要があります。
    "DescribeDBInstances" を例とした場合の署名前のリクエスト URL は以下のとおりです。
    http://ecs.aliyuncs.com/?TimeStamp=2016-02-23T12:46:24Z&Format=XML&AccessKeyId=testid&Action=DescribeRegions&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&SignatureVersion=1.0
    対応する StringToSign は以下のとおりです。
    GET&%2F&AccessKeyId%3Dtestid&Action%3DDescribeRegions&Format%3DXML&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&SignatureVersion%3D1.0&TimeStamp%3D2016-02-23T12%253A46%253A24Z&Version%3D2014-05-26
    Access Key Secret パラメーターの値を testsecret と仮定します。 HMAC の計算に使用されるキーはtestsecret& で、計算後の署名の値は以下のとおりです。
    CT9X0VtwR86fNWSnsc6v8YGOjuE=
    署名付きリクエスト URL は以下のとおりです (Signature パラメーターを追加)。
    http://ecs.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeRegions&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&AccessKeyId=testid&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D&SignatureMethod=HMAC-SHA1&TimeStamp=2016-02-23T12%3A46%3A24Z