RDSは、各アクセス要求に対して認証を実行します。 したがって、HTTPまたはHTTPSで送信される各リクエストには、署名情報が含まれている必要があります。 RDSは、「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メソッドを使用して送信されたリクエストの場合、これらのパラメーターは、リクエストURLのパラメーターセクション (つまり、URL内の「? 」に続き、「&」で接続されたセクション) を構成します。
- 各リクエストパラメーターの名前および値はエンコードされています。 名前と値は、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など) は、MIMEタイプの「application/x-www-form-urlencoded」のルールに従って文字をエンコードします。 このエンコード方法を使用する場合は、エンコードされた文字列のプラス記号 (+) を % 20に、アスタリスク (*) を % 2Aに置き換え、% 7Eをチルダ (~) に戻して、前述のエンコード規則に準拠します。
- エンコードされたパラメーター名と値を等号 (=) で接続します。
- 等号で結んだパラメーター名と値のペアを、アンパーサンド「&」を使用してパラメーター名のアルファベット順に連結して、正規化クエリ文字列を作成します。
- リクエストパラメーターは、名前でアルファベット順に並べられます (パブリックリクエストパラメーターと、このドキュメントで説明されている特定のリクエストインターフェイスのユーザー定義パラメーターを含みますが、パブリックリクエストパラメーターに記載されているSignatureパラメーターは除きます) 。
- 次の規則に従って、前の手順で作成した正規化クエリ文字列を使用して署名計算に使用する文字列を作成します。
パラメーターの説明:StringToSign= HTTPMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString)
- HTTPMethod: リクエスト送信に使用されるHTTPメソッド (GETなど) 。
- 「percentEncode (「/」)」 は、1.b で説明したURLエンコーディングルールに従って文字「/」をエンコードした値 (「%2F」) です。
- percentEncode(CanonicalizedQueryString): ステップ1で構築された正規化クエリ文字列のエンコードされた文字列。
- RFC2104 の定義に基づいて、署名計算のための文字列を使用して署名の HMAC 値を計算します。
重要 署名の計算に使用されるキーは、ユーザーが保持するAccess Key Secretです。これは「&」文字 (ASCII:38) で終わり、SHA1ハッシュに基づいています。
- Base64エンコードルールに従って、前のHMAC値を文字列にエンコードします。これにより、署名値が得られます。
- 取得した署名値をsignatureパラメーターとしてリクエストパラメーターに追加し、リクエスト署名プロセスを完了します。
したがって、StringToSignは次のとおりです。説明
取得した署名値が最終的なリクエストパラメーター値としてRDSサーバーに送信されると、その値はRFC3986ルールに従って他のパラメーターと同様にURLエンコードされます。
例として DescribeDBInstances を使用します。 署名前のリクエストURLは次のとおりです。
http://rds.aliyuncs.com/?Timestamp=2013-06-01T10:33:56Z&Format=XML&AccessKeyId=testid&Action=DescribeDBInstances&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2014-08-15&SignatureVersion=1.0
% Access Key IDがtestid、Access Key Secretがtestsecret、HMAC計算に使用されるKeyがtestsecret&であるとします。 計算された署名はGET&% 2F&AccessKeyId % 3Dtestid&Action % 3DDescribeDBInstances&Format % 3DXML&RegionId % 3Dregion1&SignatureMethod % 3DHMAC-SHA1&SignatureNonce % 3DNwDAxvLU6tFE06tFE0DVb&SignatureVersion % 3D2013-D2015-3A2510%
cNr + cHw3awqsBaWs6J6hcGvnfJE=
です。署名付きリクエストURLは次のようになります(「Signature」 パラメータが追加されています)。
http://rds.aliyuncs.com/?Timestamp=2013-06-01T10%3A33%3A56Z&Format=XML&AccessKeyId=testid&Action=DescribeDBInstances&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&SignatureVersion=1.0&Version=2014-08-15&Signature=cNr%2bcHw3awqsBaWs6J6hcGvnfJE%3d