您可以使用KMS创建凭据,在应用程序中集成您的凭据信息,实现对敏感数据的统一管理。本文介绍如何创建凭据以及如何在应用程序中集成凭据信息。
背景信息
KMS提供凭据的创建、更新、删除等全生命周期的管理服务,应用程序通过SDK来获取凭据,解决您在应用程序中硬编码凭据带来的敏感数据泄露问题。
KMS支持托管通用凭据、RAM凭据、数据库凭据和ECS凭据。关于凭据的更多信息,请参见凭据管理概述。
注意事项
KMS使用您指定的密钥来加密凭据值,该密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型。
前提条件
已购买并启用KMS实例。具体操作,请参见购买和启用KMS实例。
已在KMS实例中创建用于加密凭据的对称密钥。具体操作,请参见创建密钥。
步骤一:创建凭据
创建凭据时支持设置轮转信息,KMS将定期为您更新凭据值,保护您的凭据安全。
登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击 。
在凭据管理页面单击您要创建的凭据页签,选择实例ID后,单击创建凭据,完成各项配置后单击确定。
通用凭据
说明通用凭据不支持在创建时设置轮转信息,如果您需要轮转通用凭据,请参见管理及使用通用凭据。
配置项
说明
凭据名称
自定义的凭据名称。凭据名称在当前地域内唯一。
设置凭据值
根据您要托管的敏感数据类型,选择凭据键/值或纯文本。
长度不超过30720字节(30KB)。
初始版本号
凭据的初始版本号。默认为v1,也支持自定义版本号。
加密主密钥
选择用于加密凭据值的密钥。
重要密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格。
如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。
标签
凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。
说明标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。
标签键不能以aliyun或acs:开头。
每个凭据最多可以设置20个标签键值对。
描述信息
凭据的描述信息。
策略配置
凭据的策略配置。详细介绍,请参见凭据策略概述。
您可以先选择默认策略,创建凭据后根据业务需要再修改策略。
RAM凭据
配置项
说明
选择RAM用户
选择您要托管凭据的RAM用户,所选RAM用户至少需要有一个AccessKey。若没有,请先创建AccessKey,详细步骤请参考创建AccessKey。
凭据名称根据RAM用户的名称自动生成,凭据名称在当前地域内唯一。
设置凭据值
输入对应的AccessKey Secret。
长度不超过30720字节(30KB)。
加密主密钥
选择用于加密凭据值的密钥。
重要密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格。
如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。
标签
凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。
说明标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。
标签键不能以aliyun或acs:开头。
每个凭据最多可以设置20个标签键值对。
自动轮转
选择开启或关闭凭据的周期性自动轮转。
天数(7天~365天)
仅当时开启自动轮转需要设置。
表示轮转的周期,设置后KMS将定期为您更新凭据值。
描述信息
凭据的描述信息。
策略配置
凭据的策略配置。详细介绍,请参见凭据策略概述。
您可以先选择默认策略,创建凭据后根据业务需要再修改策略。
数据库凭据(RDS)
仅支持选择创建单个凭据。
配置项
说明
数据库类型
选择RDS凭据。
凭据名称
自定义的凭据名称。凭据名称在当前地域内唯一。
RDS实例
选择阿里云账号下已有的RDS实例。
账号托管
双账号托管(推荐):适用于程序化访问数据库场景。托管两个相同权限的账号,保证口令重置切换的瞬间,程序访问数据库不被中断。
单击新建账号,配置账号名、选择数据库并指定权限。
说明一键创建和授权不会立即为您配置新的账号,而是在您审核确认凭据信息之后进行配置。
单击导入已有账号,选择用户名、配置口令。
说明建议您将口令配置为创建RDS实例用户账号时对应的密码。如果导入的账号和口令不匹配,您可以在凭据首次轮转之后,获取正确的账号和口令。
单账号托管:适用于高权限账号或者人工运维账号托管场景。口令重置切换的瞬间,凭据的当前版本可能暂时无法使用。
单击新建账号,配置账号名、选择账号类型。
您可以选择普通账号和高权限账号两种账号类型。当您选择普通账号时,还需选择数据库并指定权限。
单击导入已有账号页签,选择用户名、配置口令。
加密主密钥
选择用于加密凭据值的密钥。
重要密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格。
如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。
标签
凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。
说明标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。
标签键不能以aliyun或acs:开头。
每个凭据最多可以设置20个标签键值对。
自动轮转
选择开启或关闭凭据的周期性自动轮转。
轮转周期
仅当开启自动轮转时需要设置。支持设置为6小时~365天。
表示轮转的周期,设置后KMS将定期为您更新凭据值。
描述信息
凭据的描述信息。
策略配置
凭据的策略配置。详细介绍,请参见凭据策略概述。
您可以先选择默认策略,创建凭据后根据业务需要再修改策略。
数据库凭据(PolarDB)
仅支持选择创建单个凭据,并且仅支持PolarDB MySQL/PgSQL新建账号、双账号托管,不支持导入已有账号、以及单账号托管。
配置项
说明
数据库类型
选择PolarDB凭据。
凭据名称
自定义的凭据名称,凭据名称在当前地域内唯一。
PolarDB实例
选择阿里云账号下已有的PolarDB实例。
账号托管
双账号托管:适用于程序化访问数据库场景。创建两个相同权限的账号,保证口令重置切换的瞬间,程序访问数据库不被中断。
新建账号:配置账号名和权限,账号类型只支持普通账号。MySQL凭据创建时候需要选择数据库+权限
说明一键创建和授权不会立即为您配置新的账号,而是在您审核确认凭据信息之后进行配置。
账号名必须唯一,如果账号名已经存在,就不能托管到凭据中。
加密主密钥
选择用于加密凭据值的密钥。
重要密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格。
如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。
标签
凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。
说明标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。
标签键不能以aliyun或acs:开头。
每个凭据最多可以设置20个标签键值对。
自动轮转
选择开启或关闭凭据的周期性自动轮转。
轮转周期
仅当开启自动轮转时需要设置。支持设置为6小时~365天。
表示轮转的周期,设置后KMS将定期为您更新凭据值。
描述信息
凭据的描述信息。
策略配置
凭据的策略配置。详细介绍,请参见凭据策略概述。
您可以先选择默认策略,创建凭据后根据业务需要再修改策略。
数据库凭据(Redis)
支持创建单个凭据和创建批量凭据,以单个凭据为例介绍。
配置项
说明
数据库类型
选择Redis/Tair实例。
凭据名称
自定义的凭据名称。凭据名称在当前地域内唯一。
Redis/Tair实例
选择阿里云账号下已有的Redis实例或Tair实例。
账号托管
仅支持双账号托管。
设置凭据值
仅支持托管新创建的账号且仅支持双账号托管,不支持托管已存在的Redis/Tair存量账号。
定制账号名:您需要自定义Redis/Tair数据库的账号,此时KMS会调用Redis/Tair的API新创建两个权限相同的数据库账号及口令。以Redis为例,您自定义的Redis数据库的账号为
user
,则会创建两个Redis数据库账号user
、user_clone
。指定权限:取值为读写、只读。新创建的两个数据库账号权限相同。
加密主密钥
选择用于加密凭据值的密钥。
重要密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格。
如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。
标签
凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。
说明标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。
标签键不能以aliyun或acs:开头。
每个凭据最多可以设置20个标签键值对。
自动轮转
选择开启或关闭凭据的周期性自动轮转。
轮转周期
仅当开启自动轮转时需要设置。支持设置为6小时~365天。
表示轮转的周期,设置后KMS将定期为您更新凭据值。
描述信息
凭据的描述信息。
策略配置
凭据的策略配置。详细介绍,请参见凭据策略概述。
您可以先选择默认策略,创建凭据后根据业务需要再修改策略。
ECS凭据
配置项
说明
凭据名称
自定义的凭据名称。凭据名称在当前地域内唯一。
托管实例
选择阿里云账号下已有的ECS实例。
托管用户
填写ECS实例上已有的用户名称,例如:root(Linux系统)或Administrator(Windows系统)。
初始凭据值
长度不超过30720字节(30KB)。
口令:用户登录ECS实例的密码。
密钥对:用户登录ECS实例的SSH密钥对。
说明请您输入正确的凭据值。如果输入的凭据值不正确,在ECS凭据首次轮转前,您从KMS获取到的口令或密钥对将不能正常登录ECS实例。
加密主密钥
选择用于加密凭据值的密钥。
重要密钥和凭据需要属于同一个KMS实例,且密钥必须为对称密钥。关于KMS支持哪些对称密钥,请参见密钥管理类型和密钥规格。
如果是RAM用户、RAM角色,需要具备使用加密主密钥执行GenerateDataKey操作的权限。
标签
凭据的标签,方便您对凭据进行分类管理。每个标签由一个键值对(Key:Value)组成,包含标签键(Key)、标签值(Value)。
说明标签键和标签值的格式:最多支持128个字符,可以包含英文大小写字母、数字、正斜线(/)、反斜线(\)、下划线(_)、短划线(-)、半角句号(.)、加号(+)、等于号(=)、半角冒号(:)、字符at(@)、空格。
标签键不能以aliyun或acs:开头。
每个凭据最多可以设置20个标签键值对。
自动轮转
选择开启或关闭凭据的周期性自动轮转。
轮转周期
仅当开启自动轮转时需要设置。支持设置为1小时~365天。
表示轮转的周期,设置后KMS将定期为您更新凭据值。
描述信息
凭据的描述信息。
策略配置
凭据的策略配置。详细介绍,请参见凭据策略概述。
您可以先选择默认策略,创建凭据后根据业务需要再修改策略。
步骤二:应用程序获取凭据
您可以通过阿里云SDK、KMS实例SDK、凭据SDK(凭据客户端、凭据JDBC客户端、RAM凭据插件)来获取凭据值。详细介绍,请参见SDK参考。
本文以凭据客户端Java版为例进行介绍,更多信息,请参见凭据客户端。
准备工作
安装凭据客户端(Java)。
通过Maven在项目中添加依赖,安装凭据客户端。示例代码:
<dependency> <groupId>com.aliyun</groupId> <artifactId>alibabacloud-secretsmanager-client</artifactId> <version>x.x.x</version> </dependency>
说明请确保凭据客户端版本为1.3.2及以上版本。
通过配置文件(secretsmanager.properties)来配置凭据客户端运行参数。
以通过环境变量提供client key文件的口令为例,示例代码:
cache_client_dkms_config_info=[{"regionId":"<your KMS instance region>","endpoint":"<your KMS instance endpoint>","passwordFromEnvVariable":"<your_password_env_variable>","clientKeyFile":"<your client key file path>","ignoreSslCerts":false,"caFilePath":"<your KMS instanceCA certificate file path>"}]
说明您还需要在运行应用程序的服务器中设置环境变量,环境变量名称即您在
passwordFromEnvVariable
中指定的名称,环境变量的值为ClientKey文件的凭证口令。不同操作系统的环境变量配置方法不同,具体操作,请参见在Linux、macOS和Windows系统配置环境变量。
获取凭据
在您的应用程序中构建凭据客户端后,使用构建好的客户端获取凭据信息。示例代码如下:
import com.aliyuncs.kms.secretsmanager.client.SecretCacheClient;
import com.aliyuncs.kms.secretsmanager.client.SecretCacheClientBuilder;
import com.aliyuncs.kms.secretsmanager.client.exception.CacheSecretException;
import com.aliyuncs.kms.secretsmanager.client.model.SecretInfo;
public class SecretCacheClientSample {
public static void main(String[] args) {
try {
SecretCacheClient client = SecretCacheClientBuilder.newClient();
SecretInfo secretInfo = client.getSecretInfo("#secretName#");
System.out.println(secretInfo);
} catch (CacheSecretException e) {
e.printStackTrace();
}
}
}