はじめに
最近、RDSのIAM認証を実装しています。
MySQLは以下のものを。
PostgreSQLは以下のものを。
上記ではコマンドライン上での操作を実装してみたのですが、アプリケーションとして実装する方法を検証してみます。
前提事項
以下の環境で実装しました。
実装
実装として、MySQL Connector/J driverの代わりにAmazon Web Services JDBC Driver for MySQLを使います。
具体的には、build.gradle
に以下の2行を追加します。
runtimeOnly 'software.aws.rds:aws-mysql-jdbc:1.1.14' runtimeOnly 'software.amazon.awssdk:rds:2.25.50'
既存のruntimeOnly 'com.mysql:mysql-connector-j'
はコメント化しました。
その後、application.properties
に対して接続先の設定をします。JDBC Driverを変えたので、spring.datasource.driver-class-name
の修正が必要です。具体的には以下のような記述になりました。
spring.datasource.driver-class-name=software.aws.rds.jdbc.mysql.Driver spring.datasource.url=jdbc:mysql://エンドポイント:3306/データベース名 spring.datasource.username=IAMユーザー名 spring.datasource.hikari.data-source-properties.useAwsIam=true
IAMユーザー認証を有効にするために、spring.datasource.hikari.data-source-properties.useAwsIam
をtrue
に設定する必要があります。これは、コネクションプールライブラリとしてデフォルトであるHikari CPを使っている例です。他のコネクションプールライブラリとして別のものを使っている場合は別の設定となると思います。
以上の設定をすることで、Spring Bootで作ったアプリケーションにてAmazon RDS for MySQLに対してIAM認証を実装することができました。
考察
IAM認証用に使用するライブラリやapplication.properties
に対して変更が発生することがわかりました。ローカル上でテストする際にはpropertiesファイルを切り替えるなど何らかの対応が必要かなと思います。Spring BootのProfileの機能を使う必要があるかと思います。
また、IAMユーザーに対してアクセスするデータベースに対して必要な権限がないと接続に失敗します。地味にはまりポイントなので、まずはコマンドラインで動作確認をすると良いかなと思います。
今回はMySQLで実装しましたが、PostgreSQLでの実装も考えています。同様のJDBC DriverがAWSよりリリースされているのでこれを試すのかなと考えています。