ApsaraDB for MongoDB は、アクセスリクエストごとに ID 認証を実施します。 したがって、HTTP リクエストと HTTPS リクエストの双方に署名情報が設定されている必要があります。 ApsaraDB for MongoDB は、対称暗号化を実行して、Access Key ID とAccess Key Secret でリクエストの送信者を確認します。

Access Key ID と Access Key Secret は、Alibaba Cloud によって公式に発行されます (Alibaba Cloud 公式サイトで申請・管理できます)。 Access Key ID は訪問者の ID を示します。 Access Key Secret は、サーバー上で署名文字列を暗号化して、検証するために使用される秘密鍵です。 この鍵は、Alibaba Cloud とユーザーのみが使用できるよう、機密情報として管理してください。 以下の方法を使用して、アクセスリクエストに署名します。

  1. リクエストパラメーターを使用して、正規化されたクエリ文字列を作成します。
    1. リクエストパラメーターは、パラメーター名のアルファベット順でソートされています (本書で記述されているリクエストインターフェイス用の "パブリックリクエストパラメーター" およびカスタムパラメーターを含みますが、"パブリックリクエストパラメーター" で記載されている署名パラメーターは含まれません)。
      GET メソッドでリクエストが送信された場合、リクエストパラメータはリクエスト URI のパラメータセクションに含まれているものと同じです。 つまり、疑問符 (?) に続き、"and" 記号 (&) で接続された URI の一部です。
    2. 各リクエストパラメーターの名前および値はエンコードされています。 UTF-8 文字セットを使用した URL エンコードが必要です。 URL エンコーディングのルールは次のとおりです。
      1. 大文字 (A~Z)、小文字 (a~z)、整数 (0~9 ) 、ハイフン (-)、アンダースコア (_)、ピリオド (.)、チルダ (~) などの他の文字はエンコードされません。
      2. 他の文字は %XY 形式でエンコードされます。この XY は文字の ASCII コードを 16 進表記することを表しています。 たとえば、二重引用符 (“) は、%22 とエンコードされます。
      3. 拡張 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:リクエスト送信に使用される HTTP メソッドです (例:GET)。
    • percentEncode ("/"): 1.ii で説明した URL エンコーディングルールに従って文字 "/" を符号化した値です。
    • percentEncode(CanonicalizedQueryString): 1.ii で説明した URL エンコーディングルールに従ってエンコードした正規化されたクエリ文字列 (ステップ 1 で作成) です。
  3. RFC2104 の定義に従って、上記の署名文字列を使用して、署名の HMAC 値を計算します。
    署名を計算する際、キーは Access Key Secret にアンパサンド (&) を加えたものになります (ASCII:38)。 SHA1 ハッシュアルゴリズムが使用されます。
  4. Base64 エンコードルールに従って、先行する HMAC 値を文字列にエンコードして、署名値を取得します。
  5. 取得した署名値を署名パラメーターとしてリクエストパラメーターに追加して、要求署名プロセスを完了します。
    取得した署名値を最終的なリクエストパラメーター値として ApsaraDB for RDS サーバーに送信する際、他のパラメーターと同様、RFC 3986 のルールに沿って URL エンコードする必要があります。
    例として DescribeDBInstances を使用します。 署名前のリクエスト URL は以下のとおりです:
    http://mongodb.aliyuncs.com/? Timestamp=2016-01-01T10:33:56Z&Format=XML&AccessKeyId=testid&Action=DescribeInstances&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2015-12-01&SignatureVersion=1.0
    StringToSignは以下のとおりです:
    GET&%2F&AccessKeyId%3Dtestid&Action%3DDescribeInstances&Format%3DXML&RegionId%3Dregion1&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3DNwDAxvLU6tFE0DVb&SignatureVersion%3D1.0&Timestamp%3D2013-06-01T10%253A33%253A56Z&Version%3D2015-01-01
    前提として、アクセスキー ID パラメーター値が testid 、Access Key Secret パラメーター値が testsecret 、HMAC 計算に使用されるキーが testsecret& 、さらに計算された署名値が以下のとおりであると仮定します。
         BIPOMlu8LXBeZtLQkJTw6iFvw1E=
    署名後のリクエスト URL は以下のとおりです (Signature パラメーターを追加)。
    http://mongodb.aliyuncs.com/? Timestamp=2016-01-01T10%3A33%3A56Z&Format=XML&AccessKeyId=testid&Action=DescribeInstances&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&SignatureVersion=1.0&Version=2015-12-01&Signature=BIPOMlu8LXBeZtLQkJTw6iFvw1E%3D