Table Store支援使用V4簽名演算法實現對使用者密鑰的保護,在進行使用者身分識別驗證時,使用的是由V4簽名演算法計算產生的衍生金鑰,而不是實際的使用者密鑰,從而降低密鑰泄露造成的影響範圍。如果衍生金鑰出現泄露,則影響局限於當天某個產品下指定地區的資源,不會影響到其他產品的資源和其他地區的資源,並且到第二天,當天的衍生金鑰會自動到期不可用。
背景資訊
V4簽名提供了一種新的身份認證方式,它是由阿里雲帳號或者RAM使用者的AccessKey Secret、日期、地區和產品碼四個資訊通過一定方式計算得到的字串。
使用V4簽名後,如果某一個V4簽名被竊取,則該帳號下其他地區、其他產品不會受到影響,並且被竊取的V4簽名有效期間不超過一天,因此使用V4簽名可以保證使用者的帳號密鑰安全。
注意事項
目前只有Table StoreJava SDK從5.16.1版本開始支援V4簽名功能。
除了V4簽名功能外,在日常業務中用到使用者密鑰時請務必妥善保管密鑰。例如在代碼中將密鑰配置為環境變數再使用等。
請求流程
在用戶端使用V4簽名演算法對使用者密鑰進行計算產生衍生金鑰,並使用衍生金鑰發起請求。
服務端接收到請求時,使用衍生金鑰進行使用者身分識別驗證。
使用者身分識別驗證通過後,服務端處理請求並返回處理結果。
說明如果使用者身分識別驗證未通過,則服務端會拒絕用戶端訪問。
用戶端收到服務端返回的處理結果。
樣本
以下樣本用於列出華東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();
}