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 とユーザーのみが使用できるよう、機密情報として管理してください。 以下の方法を使用して、アクセスリクエストに署名します。
- リクエストパラメーターを使用して、正規化されたクエリ文字列を作成します。
- リクエストパラメーターは、パラメーター名のアルファベット順でソートされています (本書で記述されているリクエストインターフェイス用の "パブリックリクエストパラメーター"
およびカスタムパラメーターを含みますが、"パブリックリクエストパラメーター" で記載されている署名パラメーターは含まれません)。
注 GET メソッドでリクエストが送信された場合、リクエストパラメータはリクエスト URI のパラメータセクションに含まれているものと同じです。 つまり、疑問符 (?) に続き、"and" 記号 (&) で接続された URI の一部です。
- 各リクエストパラメーターの名前および値はエンコードされています。 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 をチルダ (~) に戻します。
- エンコードされたパラメーター名と値を等号 (=) で接続します。
- 次に、アルファベット順に等号で接続されたパラメーター名および値のペアをソートし、& 記号で接続して正規化されたクエリ文字列を生成します。
- リクエストパラメーターは、パラメーター名のアルファベット順でソートされています (本書で記述されているリクエストインターフェイス用の "パブリックリクエストパラメーター"
およびカスタムパラメーターを含みますが、"パブリックリクエストパラメーター" で記載されている署名パラメーターは含まれません)。
- この正規化されたクエリ文字列を使用し、次の規則に従って署名計算用の文字列を作成します。
StringToSign= HTTPMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString)
パラメータの説明は以下のとおりです。
- HTTPMethod:リクエスト送信に使用される HTTP メソッドです (例:GET)。
- percentEncode ("/"): 1.ii で説明した URL エンコーディングルールに従って文字 "/" を符号化した値です。
- percentEncode(CanonicalizedQueryString): 1.ii で説明した URL エンコーディングルールに従ってエンコードした正規化されたクエリ文字列 (ステップ 1 で作成) です。
- RFC2104 の定義に従って、上記の署名文字列を使用して、署名の HMAC 値を計算します。
注 署名を計算する際、キーは Access Key Secret にアンパサンド (&) を加えたものになります (ASCII:38)。 SHA1 ハッシュアルゴリズムが使用されます。
- Base64 エンコードルールに従って、先行する HMAC 値を文字列にエンコードして、署名値を取得します。
- 取得した署名値を署名パラメーターとしてリクエストパラメーターに追加して、要求署名プロセスを完了します。
注 取得した署名値を最終的なリクエストパラメーター値として 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