ApsaraDB for PolarDB は、API リクエストを送信するユーザーをそれぞれ認証します。 したがって、HTTP リクエストと HTTPS リクエストのどちらを送信する場合でも、リクエストに署名情報を付加する必要があります。 ApsaraDB for PolarDB は、AccessKey ID と AccessKey Secret を使用して対称暗号化を実行し、各リクエストの送信者を認証します。 AccessKey ID とAccessKey Secret は、Alibaba Cloud によってユーザーに公式に発行されます。 AccessKey ID とAccessKey Secret は Alibaba Cloud の公式 Web サイトでリクエストおよび管理できます。 AccessKey ID はユーザーの ID を示します。 AccessKey Secret は、署名文字列を暗号化し、サーバー側で署名文字列を検証するために使用されるキーです。 AccessKey Secret は機密情報として厳格に保護し、Alibaba Cloud とユーザー以外に知られてはなりません。
API リクエストを送信するときは、次のようにリクエストの署名を生成する必要があります。
- リクエストパラメーターを使用して、正規化クエリ文字列を作成します。
- すべてのリクエストパラメーター (「共通パラメーター」トピックで説明されている共通リクエストパラメーターと操作固有のパラメーター。ただし 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.net.URLEncoder) はすべて MIME タイプ application/x-www-form-urlen-urlencoded のルールに沿ってエンコードします。 このエンコード方式を使用する場合、エンコードされた文字列でプラス記号 (+) を %20 に、アスタリスク (*) を %2A に、%7E をチルダ (~) に置き換えて、必要な文字列を生成できます。
-
- 等号 (=) を使用して、URL エンコードされた各リクエストパラメーターの名前と値をキーと値のペアとして接続します。
- URL エンコードされたリクエストパラメーターのキーと値のペアをパラメーター名の辞書順でソートし、それらをアンパサンド (&) で接続して、正規化クエリ文字列を生成します。
- すべてのリクエストパラメーター (「共通パラメーター」トピックで説明されている共通リクエストパラメーターと操作固有のパラメーター。ただし Signature パラメーターは除く)
をパラメーター名の辞書順でソートします。
- ステップ 1 で取得した正規化クエリ文字列を使用して、次の規則に従って StringToSign 文字列を生成します。
パラメーターの意味は次のとおりです。StringToSign= HTTPMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString)
-
- HTTPMethod:リクエストの送信に使用する HTTP メソッド (GET など) を示します。
- percentEncode("/"):1.b で説明されている URL エンコード規則に従ったスラッシュ (/) のエンコード値。エンコード値は %2F です。
- percentEncode(CanonicalizedQueryString):ステップ 1 で作成した正規化クエリ文字列を使用してエンコードされた文字列。 エンコード方式は、ステップ 1.ii で説明した URL エンコード規則に従います。
-
- StringToSign 文字列を使用して、RFC2104 で定義されている署名の HMAC 値を計算します。
重要 署名の計算に使用されるキーは、AccessKey Secret の最後にアンパサンド (&) (ASCII コード: 38) を追加したものです。 使用されるハッシュアルゴリズムは SHA1 です。
- HMAC 値を Base64 エンコード規則に基づいてエンコードして文字列に変換し、署名文字列を生成します。
- 署名文字列を Signature パラメーターの値としてリクエストパラメーターに追加して、リクエストの署名生成プロセスを完了します。
注
Signature パラメーターを ApsaraDB for PolarDB サーバーにリクエストパラメーターとして送信する前に、RFC3986 に従って、Signature パラメーターの名前と値の URL エンコードも実行する必要があります。
たとえば、DescribeCdnService 操作の署名なしのリクエスト URL は次のとおりです。
http://polardb.aliyuncs.com/?Timestamp=2013-06-01T10:33:56Z&Format=XML&AccessKeyId=testid&Action=DescribeDBClusters&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2014-08-15&SignatureVersion=1.0
AccessKey ID は testid で、AccessKey Secret は testsecret です。 そして署名の HMAC 値を計算するために使用されるキーは testsecret& です。 計算された署名は、GET&%2F&AccessKeyId%3Dtestid&Action%3DDescribeDBClusters&Format%3DXML&RegionId%3Dregion1&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3DNwDAxvLU6tFE0DVb&SignatureVersion%3D1.0&TimeStamp%3D2013-06-01T10%253A33%253A56Z&Version%3D2014-08-15
BIPOMlu8LXBeZtLQkJTw6iFvw1E=
となります。Signature パラメーターを追加したリクエスト URL は次のとおりです 。
http://polardb.aliyuncs.com/?Timestamp=2013-06-01T10%3A33%3A56Z&Format=XML&AccessKeyId=testid&Action=DescribeDBClusters&SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&SignatureVersion=1.0&Version=2014-08-15&Signature=BIPOMlu8LXBeZtLQkJTw6iFvw1E%3D