Tablestoreでは、V4署名アルゴリズムを使用してAccessKeyペアを保護できます。Tablestoreは、AccessKeyペアの漏洩のリスクを軽減するために、ID認証にAccessKeyペアではなく、V4署名アルゴリズムによって生成された派生キーを使用します。派生キーが漏洩した場合、派生キーが漏洩した日に特定のリージョンの特定のサービスに属するリソースのみが影響を受けます。派生キーの有効期間は1日以内です。
背景情報
V4署名アルゴリズムは、新しい認証方法を提供します。V4署名は、Alibaba CloudアカウントまたはRAMユーザーのAccessKeyシークレット、日付、リージョン、および製品コードに基づいて計算される文字列です。
V4署名を使用していて、署名の1つが盗難された場合、Alibaba CloudアカウントまたはRAMユーザーに属する他のリージョンおよびサービスは影響を受けません。盗難されたV4署名は、1日以内のみ有効です。V4署名を使用して、AccessKeyペアのセキュリティを確保できます。
注意事項
Java V5.16.1以降のTablestore SDKのみがV4署名アルゴリズムをサポートしています。
V4署名を使用し、AccessKeyペアを機密にしてAccessKeyペアのセキュリティを確保できます。たとえば、コードの環境変数にAccessKeyペアを保存できます。
リクエストプロセス
クライアントはV4署名アルゴリズムを使用してAccessKeyペアを計算し、派生キーを生成してから、派生キーを使用してリクエストを開始します。
サーバーがリクエストを受信した後、サーバーは派生キーを使用してユーザーを認証します。
ID認証に合格すると、サーバーはリクエストを処理し、処理結果を返します。
説明ID認証に失敗した場合、サーバーはクライアントからのアクセスを拒否します。
クライアントは、サーバーから返された処理結果を受信します。
サンプルコード
次のサンプルコードは、中国(杭州)リージョンにあるmyinstanceという名前のTablestoreインスタンスのテーブルを一覧表示する方法の例を示しています。この例では、V4署名アルゴリズムを使用してクライアントを初期化します。
public static void main(String[] args) {
// インスタンスのリージョンIDを指定します。この例では、中国(杭州)リージョンが使用されます。
String region = "cn-hangzhou";
// インスタンスのエンドポイントを指定します。
String endPoint = "https://myinstance.cn-hangzhou.ots.aliyuncs.com";
// インスタンスの名前を指定します。
String instanceName = "myinstance";
// Alibaba CloudアカウントまたはRAMユーザーのAccessKeyペアを指定します。
String accessKeyId = System.getenv("OTS_AK_ENV");
String accessKeySecret = System.getenv("OTS_SK_ENV");
/**
* 元のAccessKey IDとAccessKeyシークレットを使用してDefaultCredentialsを作成し、V4Credentialsを生成します。
*/
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
/**
* V4Credentialsを使用してTablestoreクライアントを初期化します。
*/
SyncClient client = new SyncClient(endPoint, provider, instanceName, null, new ResourceManager(null, null));
// ビジネス操作を実行します。この例では、インスタンス内のテーブルの名前が一覧表示されます。
ListTableResponse response = client.listTable();
System.out.println("request id : " + response.getRequestId());
System.out.println("tableNames : " + response.getTableNames());
// Tablestoreクライアントをシャットダウンします。
client.shutdown();
}