全部產品
Search
文件中心

Tablestore:使用者密鑰安全

更新時間:Jun 30, 2024

Table Store支援使用V4簽名演算法實現對使用者密鑰的保護,在進行使用者身分識別驗證時,使用的是由V4簽名演算法計算產生的衍生金鑰,而不是實際的使用者密鑰,從而降低密鑰泄露造成的影響範圍。如果衍生金鑰出現泄露,則影響局限於當天某個產品下指定地區的資源,不會影響到其他產品的資源和其他地區的資源,並且到第二天,當天的衍生金鑰會自動到期不可用。

背景資訊

V4簽名提供了一種新的身份認證方式,它是由阿里雲帳號或者RAM使用者的AccessKey Secret、日期、地區和產品碼四個資訊通過一定方式計算得到的字串。

使用V4簽名後,如果某一個V4簽名被竊取,則該帳號下其他地區、其他產品不會受到影響,並且被竊取的V4簽名有效期間不超過一天,因此使用V4簽名可以保證使用者的帳號密鑰安全。

注意事項

  • 目前只有Table StoreJava SDK從5.16.1版本開始支援V4簽名功能。

  • 除了V4簽名功能外,在日常業務中用到使用者密鑰時請務必妥善保管密鑰。例如在代碼中將密鑰配置為環境變數再使用等。

請求流程

  1. 在用戶端使用V4簽名演算法對使用者密鑰進行計算產生衍生金鑰,並使用衍生金鑰發起請求。

  2. 服務端接收到請求時,使用衍生金鑰進行使用者身分識別驗證。

  3. 使用者身分識別驗證通過後,服務端處理請求並返回處理結果。

    說明

    如果使用者身分識別驗證未通過,則服務端會拒絕用戶端訪問。

  4. 用戶端收到服務端返回的處理結果。

樣本

以下樣本用於列出華東1(杭州)地區中myinstance執行個體下的表列表。其中初始化用戶端時使用V4簽名功能實現。

public static void main(String[] args) {
    // 執行個體所屬地區ID。此處以華東1(杭州)地區為例介紹。
    String region = "cn-hangzhou";
    // 執行個體的訪問網域名稱。  
    String endPoint = "https://myinstance.cn-hangzhou.ots.aliyuncs.com";
    // 執行個體名稱。
    String instanceName = "myinstance";
    // 阿里雲帳號或者RAM使用者的AccessKey。 
    String accessKeyId = System.getenv("OTS_AK_ENV");
    String accessKeySecret = System.getenv("OTS_SK_ENV");
    /**
     * 使用原始的AccessKey ID,AccessKey Secret先構造DefaultCredentials,再產生V4Credentials。
     */
    DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
    V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
    CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
    /**
     * 使用V4Credentials初始化Table Store用戶端。
     */
    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());
    // 關閉Table Store用戶端。
    client.shutdown();
}