Secrets Manager JDBCは、secrets Managerが提供する動的ApsaraDB RDSシークレットに基づいて、ビジネスロジック、ベストプラクティス、およびデザインパターンをカプセル化します。 Secrets Manager JDBCを使用すると、Secrets Managerをビジネスシステムに統合できます。 Secrets Manager JDBCでは、データベースアプリケーションで動的ApsaraDB RDSシークレットを使用できます。 これにより、データベースアカウントのパスワードをハードコードする必要がなくなります。
機能
一般的なJava Database Connectivity (JDBC) ドライバとシンプルなデータベース接続を提供します。
c3p0またはデータベース接続プール (DBCP) を使用してデータベースに接続します。
さまざまなアクセス方法を使用して、動的ApsaraDB RDSシークレットを取得できます。 たとえば、AccessKeyペア、Security Token Service (STS) 、またはElastic Compute Service (ECS) インスタンスのRAMロールを使用して、動的ApsaraDB RDSシークレットを取得できます。
シークレットの回転間隔をカスタマイズできます。
制限事項
動的ApsaraDB RDSシークレットのみがサポートされています。 デュアルアカウントモードで動的ApsaraDB RDSシークレットを使用することを推奨します。 動的ApsaraDB RDSシークレットの作成方法の詳細については、「動的ApsaraDB RDSシークレットの作成」をご参照ください。
Java 1.8以降のみがサポートされています。
MySQL、SQL Server、PostgreSQL、またはMariaDB TXを実行するApsaraDB RDSインスタンスのみがサポートされています。
Secrets Manager JDBCのインストール
Secrets Manager JDBCはJavaで開発されています。 Secrets Manager JDBCのインストール方法の詳細については、aliyun-secretsmanager-jdbcをご参照ください。
次のMaven依存関係を追加することで、Secrets Manager JDBCをインストールできます。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-secretsmanager-jdbc</artifactId>
<version>x.x.x</version>
</dependency>Secrets Manager JDBCのバージョンの詳細については、aliyun-secretsmanager-jdbc releaseをご参照ください。
アクセス方法の設定
Secrets Manager JDBCが起動すると、secretsmanager.propertiesファイルでアクセス方法が確認されます。 次の例は、異なるアクセス方法を設定する方法を示しています。
アプリケーションアクセスポイントのクライアントキーを使用したSecrets Managerへのアクセス
この方法をお勧めします。 クライアントキーの作成方法の詳細については、「クライアントキーをAAPにバインドする」をご参照ください。
説明Secrets Manager JDBC 1.0.7以降のバージョンは、アプリケーションアクセスポイントのクライアントキーを使用してSecrets Managerにアクセスすることをサポートしています。
## アクセス方法を指定します。 credentials_type=client_key ## クライアント鍵の復号化パスワードを読み取ります。 環境変数またはファイルからパスワードを読み込むことができます。 client_key_password_from_env_variable=# クライアント鍵秘密鍵パスワード環境変数# client_key_password_from_file_path=# クライアント鍵秘密鍵パスワードファイルパス# ## クライアント鍵の秘密鍵ファイルを読み込みます。 client_key_private_key_path=# クライアント鍵秘密鍵ファイルパス# ## Key Management Service (KMS) のリージョンを指定します。 cache_client_region_id=[{"regionId":"#regionId#"}]AccessKeyペアを使用したSecrets Managerへのアクセス
## アクセス方法を指定します。 credentials_type=ak ## AccessKey IDを指定します。 credentials_access_key_id=#credentials_access_key_id# ## AccessKey secretを指定します。 credentials_access_secret=#credentials_access_secret# ## KMSのリージョンを指定します。 cache_client_region_id=[{"regionId":"#regionId#"}] ## 回転間隔をカスタマイズします。 デフォルト値: 21600000 最小値: 300000。 単位:ミリ秒。 デフォルト値は6時間に相当し、最小値は5分に相当します。 refresh_secret_ttl=21600000説明AccessKey ペアの取得方法については、AccessKey ペアの作成をご参照ください。
STSを使用したSecrets Managerへのアクセス
## アクセス方法を指定します。 credentials_type=sts ## AccessKey IDを指定します。 credentials_access_key_id=#credentials_access_key_id# ## AccessKey secretを指定します。 credentials_access_secret=#credentials_access_secret# ## 動的ApsaraDB RDSシークレットを取得するセッションの名前を指定します。 credentials_role_session_name=#credentials_role_session_name# ## RAMロールのAlibaba Cloudリソース名 (ARN) を指定します。 credentials_role_arn=#credentials_role_arn# ## 動的ApsaraDB RDSシークレットの取得に使用するポリシーを指定します。 credentials_policy=#credentials_policy# ## KMSのリージョンを指定します。 cache_client_region_id=[{"regionId":"#regionId#"}] ## 回転間隔をカスタマイズします。 デフォルト値: 21600000 最小値: 300000。 単位:ミリ秒。 デフォルト値は6時間に相当し、最小値は5分に相当します。 refresh_secret_ttl=21600000説明AccessKey ペアの取得方法については、AccessKey ペアの作成をご参照ください。
ECSインスタンスのRAMロールを使用したSecrets Managerへのアクセス
## アクセス方法を指定します。 credentials_type=ecs_ram_role ## RAMロールの名前を指定します。 credentials_role_name=#credentials_role_name# ## KMSのリージョンを指定します。 cache_client_region_id=[{"regionId":"#regionId#"}] ## 回転間隔をカスタマイズします。 デフォルト値: 21600000 最小値: 300000。 単位:ミリ秒。 デフォルト値は6時間に相当し、最小値は5分に相当します。 refresh_secret_ttl=21600000説明RAMロールを作成し、RAMロールをECSインスタンスに割り当てる方法の詳細については、「ECSインスタンスからKMSに安全にアクセス」をご参照ください。
サンプルコード
JDBCによるデータベースへのアクセス
次のサンプルコードは、JDBCを使用してApsaraDB RDS for MySQLインスタンスにアクセスする方法の例を示しています。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class SecretManagerJDBCSample { public static void main(String[] args) throws Exception { Class.forName("com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver"); Connection connect = null; try { connect = DriverManager.getConnection("secrets-manager:mysql://<your-mysql-ip >:< your-mysql-port>/<your-database-name>", "#your-mysql-secret-name#", ""); } catch(SQLException e) { e.printStackTrace(); } } }c3p0接続プールを使用したデータベースへのアクセス
次のサンプルコードは、c3p0.properties設定ファイルの例を示しています。
c3p0.us er=#your-mysql-secret-name# c3p0.driverClass=com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver c3p0.jdbcUrl=secrets-manager:mysql://<your-mysql-ip >:< your-mysql-port>/<your-database-name>オープンソースフレームワークを使用したデータベースへのアクセス
次のサンプルコードは、Spring構成ファイルの例を示しています。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver" /> <property name="user" value="#your-mysql-secret-name#" /> <property name="jdbcUrl" value="secrets-manager:mysql://<your-mysql-ip >:< your-mysql-port>/<your-database-name>" /> <property name="maxPoolSize" value="500" /> <property name="minPoolSize" value="5" /> <property name="initialPoolSize" value="20" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean>