データベースへのPasswordless接続 (1) MySQL

このエントリは2022/10/05現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。

先日、MySQL/PostgreSQL/SQL DatabaseへのJDBC/Spring Data JDBC/JPA接続でパスワードレス認証 (Azure AD認証) がPublic Previewで利用できるようになった(SQL Databaseへの素のJDBC接続のパスワードレス認証は2022/10/05現在未リリース)。

Delete Passwords: Passwordless Connections for Java Apps to Azure Services
https://techcommunity.microsoft.com/t5/apps-on-azure-blog/delete-passwords-passwordless-connections-for-java-apps-to-azure/ba-p/3638714
Azure サービスのパスワードレス接続 / Passwordless connections for Azure services
https://learn.microsoft.com/azure/developer/intro/passwordless-overview

以下のチュートリアルに従えば試すことは可能だが、一部ハマるところがあるので備忘録として記載しておく。

クイックスタート: Azure Database for MySQL で Java と JDBC を使用する / Quickstart: Use Java and JDBC with Azure Database for MySQL
https://learn.microsoft.com/azure/mysql/single-server/connect-java?tabs=passwordless

このエントリではチュートリアルと異なり、Azure Database for MySQL Flexible Serverを使って確認している。Flexible Serverの手順は以下にある(が2022/10/05現在パスワードレス認証の項目がないので、上記URLと両方見て設定を確認する必要がある)。

Azure Database for MySQL フレキシブル サーバーで Java と JDBC を使用する / Use Java and JDBC with Azure Database for MySQL Flexible Server
https://learn.microsoft.com/azure/mysql/flexible-server/connect-java

チュートリアル上は、JDK 8を使うよう指示が出ているが、JDK 19でも動作したことは記載しておく。

はまりどころやメモ

Managed Identityへのロール付与

Azure AD認証を利用するためには、Managed identityにAzure ADロール (Directory Readers) を付与する必要がある。手法は以下の2個だが、必要なAzure ADのSKUが違うので注意。

手法Azure ADのSKU
Managed Identityに直接ロールを付与任意のAzure AD SKU (AD Freeでも可)
Managed Identityをグループに入れ、そのグループにロールを付与Azure AD P1もしくはP2
https://learn.microsoft.com/azure/active-directory/roles/groups-assign-role

MySQL Flexible Serverに割り当てたUser assigned managed identityに一致させる必要があるか?

上記のAzure ADロールを割り当てるManaged Identityは、MySQL Flexible Serverに割り当てたUser assigned managed identityと一致する必要がある。セキュリティ > 認証(プレビュー)を辿ると、下図のような表示を確認できる。この中に以下の記載がある。

Adding Azure AD admins requires an Identity to added to Azure Database for MySQL – Flexible Server. The Identity requires the following privileges – User.Read.All, GroupMember.Read.All and Application.Read.ALL to be granted. (Azure AD 管理者を追加するには、MySQL – フレキシブル サーバーの Azure Database に追加する ID が必要です。ID には、User.Read.All、GroupMember.Read.All、Application.Read.ALL の特権を許可する必要があります。)

つまり、user assigned managed identityはセキュリティ > IDで設定したものと同じでなければならない。

application.properties

IDEによっては、user=…の記述部分が使われていない、という表示が出るかもしれないが、当然ながらuserを指定していないとアクセスできないので、IDEの警告は無視すること。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中