有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
应用程序或服务中,用于身份验证的各种认证信息,如口令、令牌、证书、SSH 密钥或 API 密钥等,通常情况下直接明文保存在应用程序的配置文件中,安全性较低。借助凭据管理系统将这些敏感认证信息加密存储,可有效避免敏感凭据明文编码带来的风险问题。

操作流程

以数据库用户名和口令的托管为例,介绍基本的凭据托管和使用场景。

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
}