用户密钥安全

表格存储支持使用V4签名算法实现对用户密钥的保护,在进行用户身份验证时,使用的是由V4签名算法计算生成的派生密钥,而不是实际的用户密钥,从而降低密钥泄露造成的影响范围。如果派生密钥出现泄露,则影响局限于当天某个产品下指定地域的资源,不会影响到其他产品的资源和其他地域的资源,并且到第二天,当天的派生密钥会自动过期不可用。

背景信息

V4签名提供了一种新的身份认证方式,它是由阿里云账号或者RAM用户的AccessKey Secret、日期、地域和产品码四个信息通过一定方式计算得到的字符串。

使用V4签名后,如果某一个V4签名被窃取,则该账号下其他地域、其他产品不会受到影响,并且被窃取的V4签名有效期不超过一天,因此使用V4签名可以保证用户的账号密钥安全。

注意事项

  • 目前只有表格存储Java SDK5.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初始化表格存储客户端。
     */
    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());
    // 关闭表格存储客户端。
    client.shutdown();
}