すべてのプロダクト
Search
ドキュメントセンター

Tablestore:AccessKeyペアのセキュリティ

最終更新日:Dec 28, 2024

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ペアを保存できます。

リクエストプロセス

  1. クライアントはV4署名アルゴリズムを使用してAccessKeyペアを計算し、派生キーを生成してから、派生キーを使用してリクエストを開始します。

  2. サーバーがリクエストを受信した後、サーバーは派生キーを使用してユーザーを認証します。

  3. ID認証に合格すると、サーバーはリクエストを処理し、処理結果を返します。

    説明

    ID認証に失敗した場合、サーバーはクライアントからのアクセスを拒否します。

  4. クライアントは、サーバーから返された処理結果を受信します。

サンプルコード

次のサンプルコードは、中国(杭州)リージョンにある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();
}