数据加密服务 DEW
数据加密服务 DEW
- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
- 最佳实践
- API参考
- SDK参考
-
常见问题
-
密钥管理类
- 什么是密钥管理?
- 什么是用户主密钥?
- 什么是默认密钥?
- 自定义密钥与默认密钥有什么区别?
- 什么是数据加密密钥?
- 为什么不能立即删除用户主密钥?
- 哪些云服务使用KMS加密数据?
- 华为云服务如何使用KMS加密数据?
- 信封加密方式有什么优势?
- 在KMS中创建的自定义密钥的个数是否有限制?
- 是否可以从KMS中导出用户主密钥?
- 如果自定义密钥被彻底删除,用户数据是否还可以解密?
- 如何使用在线工具加解密数据?
- 是否可以更新KMS管理的密钥?
- 在什么场景下推荐使用导入的密钥?
- 密钥材料被意外删除时如何处理?
- 默认密钥如何生成?
- 没有权限操作KMS,该如何处理?
- 如何修补OpenSSL以使用-id-aes256-wrap-pad包装非对称密钥?
- KMS支持的密钥算法类型
- 请求KMS异常,错误码401,应该如何处理?
- 调用encrypt-data接口,返回的密文和明文有什么关系?
- KMS如何保护创建的密钥?
- 如何使用非对称密钥对公钥对签名结果进行验签?
- 外部导入的密钥支持轮转吗?
- 密钥管理服务支持离线加解密数据吗?
- 如何将原始EC私钥转换成PKCS8格式的私钥对象?
- 凭据管理类
-
密钥对管理类
- 如何创建密钥对?
- 什么是私有密钥对和账号密钥对?
- 导入通过PuTTYgen工具创建的密钥对失败如何处理?
- 使用IE9浏览器无法导入密钥对如何处理?
- 如何使用私钥登录Linux弹性云服务器?
- 如何通过私钥获取Windows弹性云服务器的登录密码?
- 绑定密钥对失败如何处理?
- 替换密钥对失败如何处理?
- 重置密钥对失败如何处理?
- 解绑密钥对失败如何处理?
- 替换密钥对后,服务器需要重启吗?
- 关闭弹性云服务器的密码登录方式后如何重新开启?
- 解绑密钥对后用户无法登录ECS时如何处理?
- 私钥不慎遗失怎么办?
- 如何转换私钥文件格式?
- 密钥对在创建主机成功之后可以更改吗?
- 密钥对是否支持多用户共享?
- 如何获取密钥对的私钥或公钥文件?
- 账号密钥首次创建、首次升级时系统报错如何处理?
- 私有密钥对升级账号密钥对后,会占用账号密钥对配额吗?
- 用户联邦身份登录时,私有密钥对升级账号密钥对之后,为什么私有密钥对会不可见?
- 专属加密类
- 计费类
- 通用类
-
密钥管理类
- 视频帮助
-
更多文档
- 用户指南(阿布扎比区域)
-
用户指南(吉隆坡区域)
- 产品介绍
- 用户指南
-
常见问题
-
密钥管理类
- 什么是密钥管理?
- 什么是用户主密钥?
- 什么是默认密钥?
- 自定义密钥与默认密钥有什么区别?
- 什么是数据加密密钥?
- 为什么不能立即删除用户主密钥?
- 哪些云服务使用KMS加密数据?
- 云服务如何使用KMS加密数据?
- 信封加密方式有什么优势?
- 在KMS中创建的自定义密钥的个数是否有限制?
- 是否可以从KMS中导出用户主密钥?
- 如果自定义密钥被彻底删除,用户数据是否还可以解密?
- 如何使用在线工具加解密数据?
- 是否可以更新KMS管理的密钥?
- 在什么场景下推荐使用导入的密钥?
- 可以导入哪些类型的密钥?
- 密钥材料被意外删除时如何处理?
- 默认密钥如何生成?
- 没有权限操作KMS,该如何处理?
- 如何修补OpenSSL以使用-id-aes256-wrap-pad包装非对称密钥?
- KMS支持的密钥算法类型
- 请求KMS异常,错误码401,应该如何处理?
- 调用encrypt-data接口,返回的密文和明文有什么关系?
- KMS如何保护创建的密钥?
- 凭据管理类
-
密钥管理类
- 修订记录
- API参考(阿布扎比区域)
- API参考(吉隆坡区域)
- 通用参考
链接复制成功!
如何使用凭据管理服务替换硬编码的数据库账号密码
您在日常访问应用程序的过程中,通常会嵌入凭据直接访问程序。在需要更新凭据时,您除了创建新的凭据以外,还需要执行一些其他操作。您还需要花费一些时间更新应用程序以使用新的凭据。如果您有多个应用程序同一凭据,而您错过更新其中一个,则该应用程序就无法使用凭据登录。
因此使用方便有效且安全性高的凭据管理工具十分关键。
华为云凭据管理服务(Cloud Secret Management Service,CSMS)可以帮助您拥有以下优势:
- 通过凭据托管功能,降低通过硬编码方式带来的凭据泄露风险,提高数据及资产的安全性。
- 减少对业务的影响:当您进行人工轮换的方式更新凭据时,您的业务不会受到影响。
- 提供安全的SDK接入方式,动态调用您的凭据。
- 凭据存储类型多样化。您不仅可以存储业务相关的账号密码,也可以存储业务数据库详细信息,包括但不限于:数据库名称、IP地址和端口等。
使用凭据登录数据库
下文为您介绍如何创建凭据,并且通过API调用凭据来登录到您的数据库。
您首先需要确保您的账号拥有KMS Administrator或者KMS CMKFullAccess权限,详情见DEW权限管理。
图1 凭据登录流程
![点击放大](https://support.huaweicloud.com/intl/zh-cn/bestpractice-dew/zh-cn_image_0000001260617431.png)
流程说明如下:
通过API接口创建凭据和查询凭据
- 请准备基础认证信息:
- 创建和查询凭据信息:
凭据值:secretString
凭据版本值:LATEST_SECRET
凭据版本:versionId
import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.csms.v1.CsmsClient; import com.huaweicloud.sdk.csms.v1.model.CreateSecretRequest; import com.huaweicloud.sdk.csms.v1.model.CreateSecretRequestBody; import com.huaweicloud.sdk.csms.v1.model.CreateSecretResponse; import com.huaweicloud.sdk.csms.v1.model.ShowSecretVersionRequest; import com.huaweicloud.sdk.csms.v1.model.ShowSecretVersionResponse; public class CsmsCreateSecretExample { /** * 基础认证信息: * - ACCESS_KEY: 华为账号Access Key * - SECRET_ACCESS_KEY: 华为账号Secret Access Key * - PROJECT_ID: 华为云局点项目ID 详情见https://support.huaweicloud.com/intl/zh-cn/productdesc-iam/iam_01_0023.html * - CSMS_ENDPOINT: 华为云CSMS服务访问终端地址 详情见https://support.huaweicloud.com/intl/zh-cn/api-dew/dew_02_0052.html * - 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 * - 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 */ private static final String ACCESS_KEY = System.getenv("HUAWEICLOUD_SDK_AK"); private static final String SECRET_ACCESS_KEY = System.getenv("HUAWEICLOUD_SDK_SK"); private static final String PROJECT_ID = "<ProjectID>"; private static final String CSMS_ENDPOINT = "<CsmsEndpoint>"; // 用来查询凭据最新版本详情的版本Id private static final String LATEST_SECRET = "latest"; public static void main(String[] args) { String secretName = args[0]; String secretString = args[1]; // 创建凭据 createSecret(secretName, secretString); // 通过凭据版本值“latest”或者版本值“v1"查询到新创建的凭据内容 ShowSecretVersionResponse latestVersion = showSecretVersion(secretName, LATEST_SECRET); ShowSecretVersionResponse firstVersion = showSecretVersion(secretName, "v1"); assert latestVersion.equals(firstVersion); assert latestVersion.getVersion().getSecretString().equalsIgnoreCase(secretString); } /** * 创建凭据 * @param secretName * @param secretString */ private static void createSecret(String secretName, String secretString) { CreateSecretRequest secret = new CreateSecretRequest().withBody( new CreateSecretRequestBody().withName(secretName).withSecretString(secretString)); CsmsClient csmsClient = getCsmsClient(); CreateSecretResponse createdSecret = csmsClient.createSecret(secret); System.out.printf("Created secret success, secret detail:%s", createdSecret); } /** * 根据凭据版本id查询凭据版本详情 * @param secretName * @param versionId * @return */ private static ShowSecretVersionResponse showSecretVersion(String secretName, String versionId) { ShowSecretVersionRequest showSecretVersionRequest = new ShowSecretVersionRequest().withSecretName(secretName) .withVersionId(versionId); CsmsClient csmsClient = getCsmsClient(); ShowSecretVersionResponse version = csmsClient.showSecretVersion(showSecretVersionRequest); System.out.printf("Query secret success. version id:%s", version.getVersion().getVersionMetadata().getId()); return version; } /** * 获取CSMS服务客户端 * @return */ private static CsmsClient getCsmsClient() { BasicCredentials auth = new BasicCredentials() .withAk(ACCESS_KEY) .withSk(SECRET_ACCESS_KEY) .withProjectId(PROJECT_ID); return CsmsClient.newBuilder().withCredential(auth).withEndpoint(CSMS_ENDPOINT).build(); } }
使用应用程序获取数据库账号和密码
- 获取凭据管理服务的CSMS SDK的依赖声明。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>XXX</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.9</version> </dependency> <dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-csms</artifactId> <version>3.0.79</version> </dependency>
- 建立数据库链接并且获取账号密码:
示例代码如下
import com.google.gson.Gson; import com.google.gson.JsonObject; import com.huaweicloud.sdk.csms.v1.model.ShowSecretVersionRequest; import com.huaweicloud.sdk.csms.v1.model.ShowSecretVersionResponse; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; // 通过凭据信息获取指定的数据库账号和口令 public static Connection getMySQLConnectionBySecret(String secretName, String jdbcUrl) throws ClassNotFoundException, SQLException{ Class.forName(MYSQL_JDBC_DRIVER); ShowSecretVersionResponse latestVersionValue = getCsmsClient().showSecretVersion(new ShowSecretVersionRequest().withSecretName(secretName).withVersionId("latest")); String secretString = latestVersionValue.getVersion().getSecretString(); JsonObject jsonObject = new Gson().fromJson(secretString, JsonObject.class); return DriverManager.getConnection(jdbcUrl, jsonObject.get("username").getAsString(), jsonObject.get("password").getAsString()); }
父主题: 凭据管理