应用程序可以采用多种方式接入凭据管家,动态使用凭据。
接入方式
应用程序可以使用多种开发工具接入凭据管家,不同开发工具说明及其应用场景如下:
开发工具 |
说明 |
应用场景 |
KMS SDK |
KMS SDK帮助您构造HTTPS请求,更好地使用KMS API。 |
- 获取凭据值频率较低
- 需要对凭据进行创建、删除、增加新版本的凭据值等操作
|
凭据管家客户端 |
凭据管家客户端(SecretsManager Client)支持简单地配置客户端缓存频率,并定时刷新存储在凭据管家的凭据。 |
- 在客户端周期性或者频繁获取凭据值
- 需要根据凭据值进行相关操作
|
凭据管家JDBC客户端 |
凭据管家JDBC客户端(SecretsManager JDBC)支持在JDBC连接中简单地使用托管在凭据管家的凭据。 |
使用动态RDS凭据通过Java程序访问数据库
|
多种阿里云SDK的托管凭据插件 |
多种阿里云SDK的托管凭据插件是一个帮助您更有效通过动态RAM凭据快速使用阿里云服务的插件。 |
使用动态RAM凭据获取阿里云访问凭据访问阿里云服务
|
凭据管家Kubernetes插件 |
凭据管家Kubernetes插件是一种以无代码方式快速集成凭据管家能力的插件。 |
以无代码的方式周期性更新配置 |
使用KMS SDK
以下以Java语言为例,为您介绍如何在应用程序中使用动态RDS凭据。如果您使用的不是动态RDS凭据而是其他类型的凭据,也可以使用此方法。
- 获取密钥管理服务Java SDK的依赖声明。
需要获取的版本请参见
SDK概览。示例如下:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.16</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-kms</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
- 应用程序从凭据管家获取数据库账号和口令,建立数据库连接。
示例代码如下:
package com.aliyun.kms.samples;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.kms.model.v20160120.GetSecretValueRequest;
import com.aliyuncs.kms.model.v20160120.GetSecretValueResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import org.apache.commons.lang3.tuple.Pair;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class RdsSecretSampleCode {
private static final String MYSQL_JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final String MSSQL_JDBC_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static KmsClient kmsClient;
static {
kmsClient = KmsClient.getKMSClient("<regionId>", "<accessKeyId>", "<accessKeySecret>");
}
static class KmsClient {
private DefaultAcsClient acsClient;
private KmsClient(DefaultAcsClient acsClient) {
this.acsClient = acsClient;
}
private static KmsClient getKMSClient(String regionId, String accessKeyId, String accessKeySecret) {
IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return new KmsClient(client);
}
}
// 通过凭据信息获取MySQL链接。
public static Connection getMySQLConnectionBySecret(String secretName, String jdbcUrl) throws ClassNotFoundException, SQLException, ClientException {
Class.forName(MYSQL_JDBC_DRIVER);
Pair<String, String> userAndPasswordPair = getUserAndPasswordPair(secretName);
return DriverManager.getConnection(jdbcUrl, userAndPasswordPair.getKey(), userAndPasswordPair.getValue());
}
// 通过凭据信息获取MSSQL链接。
public static Connection getMSSQLConnectionBySecret(String secretName, String jdbcUrl) throws ClassNotFoundException, SQLException, ClientException {
Class.forName(MSSQL_JDBC_DRIVER);
Pair<String, String> userAndPasswordPair = getUserAndPasswordPair(secretName);
return DriverManager.getConnection(jdbcUrl, userAndPasswordPair.getKey(), userAndPasswordPair.getValue());
}
// 通过凭据信息获取指定的数据库账号和口令。
private static Pair<String, String> getUserAndPasswordPair(String secretName) throws ClientException {
final GetSecretValueRequest request = new GetSecretValueRequest();
request.setProtocol(ProtocolType.HTTPS);
request.setAcceptFormat(FormatType.JSON);
request.setMethod(MethodType.POST);
request.setSecretName(secretName);
GetSecretValueResponse response = kmsClient.acsClient.getAcsResponse(request);
JSONObject secretDataJSON = JSON.parseObject(response.getSecretData());
return Pair.of(secretDataJSON.getString("AccountName"), secretDataJSON.getString("AccountPassword"));
}
}