一、操作流程
以数据库用户名和口令的托管为例,介绍基本的凭据托管和使用场景。
1. DB 管理员设置数据库用户名和口令。
2. DB 管理员在凭据管理系统 SSM 中创建一个凭据对象,用来加密存储步骤1中的用户名和口令,关于创建凭据,详情请参见 创建凭据。
3. 当应用系统需要访问数据库时,可向凭据管理系统 SSM 请求访问凭据,接口请求详情,请参见 获取凭据明文。
4. 应用系统通过访问凭据接口所返回的内容,解析出明文凭据,获取到用户名和口令,从而访问该用户对应的目标数据库。
5. DB 管理员可为凭据创建多个版本内容,也可更新凭据版本内容,实现配置同步、版本管理及凭据轮换。
二、应用效果
对应用系统而言,通过调用 SSM 凭据管理系统的 API 或 SDK 来获取敏感的凭据明文,可避免在程序或配置中,明文编码凭据带来的信息泄露风险,调用对比如下:
·使用本地存储数据库连接信息,连接信息明文保存在本地配置或者代码文件中,敏感凭据易泄露。
·获取凭据明文示例代码:
func GetDBConfig() string { dbConnStr := "user:password@tcp(127.0.0.1:3306)/test" return dbConnStr}
·使用凭据明文示例代码:
conn, err := sql.Open("mysql", GetDBConfig())if err != nil { // error handler}
·使用 SSM 凭据管理系统连接数据库 DB 时,代码和本地配置中无需明文存储 DB 的连接信息。
·获取凭据明文示例代码:
func GetDBConfig(secretName, version *string) string { credential := common.NewCredential( secretId, secretKey, ) cpf := profile.NewClientProfile() cpf.HttpProfile.Endpoint = endpoint client, _ := ssm.NewClient(credential, region, cpf) request := ssm.NewGetSecretValueRequest() request.SecretName = secretName request.VersionId = version resp, err := client.GetSecretValue(request) if err != nil { // error handler } return *resp.Response.SecretString}
·使用凭据明文示例代码:
secretName := "MySecret1"version := "MyVersion1"conn, err := sql.Open("mysql", GetDBConfig(&secretName, &version))if err != nil { // error handler}