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が起動すると、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インスタンスに割り当てる方法の詳細については、「t1996953.html#task_2001511」をご参照ください。
サンプルコード
- 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>