次の方法で共有


Spring Cloud Azure MySQL のサポート

Azure Database for MySQL は、MySQL コミュニティ エディションを利用したリレーショナル データベース サービスです。 単一サーバーまたはフレキシブル サーバーを使用して、Azure で MySQL データベースをホストできます。 これは、予測可能なパフォーマンスと動的なスケーラビリティを備えたミッション クリティカルなワークロードを処理できる、フル マネージドのサービスとしてのデータベース オファリングです。

バージョン 4.5.0から、Spring Cloud Azure では、Azure Database for MySQL フレキシブル サーバーへの認証のさまざまな種類の資格情報がサポートされています。

サポートされている MySQL のバージョン

スターターの現在のバージョンでは、Azure Database for MySQL フレキシブル サーバーバージョン 5.7 または 8.0を使用する必要があります。

コア機能

パスワードレス接続

パスワードレス接続では、アプリケーション、その構成ファイル、または環境変数に資格情報を格納せずに Azure サービスに接続するために Microsoft Entra 認証が使用されます。 Microsoft Entra 認証は、Microsoft Entra ID で定義されている ID を使用して Azure Database for MySQL に接続するためのメカニズムです。 Microsoft Entra 認証を使用すると、データベース ユーザー ID やその他の Microsoft サービスを一元的な場所で管理できるため、アクセス許可の管理が簡素化されます。

しくみ

Spring Cloud Azure では、まず、アプリケーション認証の構成に応じて、次のいずれかの種類の資格情報を構築します。

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

これらの種類の資格情報が見つからない場合、DefaultAzureCredential 資格情報は、アプリケーションのプロパティ、環境変数、マネージド ID、または IDE から取得されます。 詳細については、Spring Cloud Azure 認証に関するページを参照してください。

次の大まかな図は、Azure Database for MySQL で OAuth 資格情報認証を使用した認証のしくみをまとめたものです。 矢印は通信経路を示します。

MySQL の Microsoft Entra 認証を示す図。

構成

Spring Cloud Azure for MySQL では、次の 2 つのレベルの構成オプションがサポートされています。

  1. credentialのプレフィックスを持つ profilespring.cloud.azure のグローバル認証構成オプション。

  2. Spring Cloud Azure for MySQL の一般的な構成オプション。

次の表に、Spring Cloud Azure for MySQL の一般的な構成オプションを示します。

名前 形容
spring.datasource.azure.passwordless-有効 OAuth2 Microsoft Entra トークン資格情報を使用して Azure データベースへのパスワードレス接続を有効にするかどうかを指定します。
spring.datasource.azure.credential.client-certificate-password 証明書ファイルのパスワード。
spring.datasource.azure.credential.client-certificate-path Azure でサービス プリンシパル認証を実行するときに使用する PEM 証明書ファイルのパス。
spring.datasource.azure.credential.client-id (英語) Azure でサービス プリンシパル認証を実行するときに使用するクライアント ID。 これはレガシ プロパティです。
spring.datasource.azure.credential.client-secret Azure でサービス プリンシパル認証を実行するときに使用するクライアント シークレット。 これはレガシ プロパティです。
spring.datasource.azure.credential.managed-identity-enabled マネージド ID を有効にして Azure で認証するかどうかを指定します。 trueclient-id が設定されている場合は、クライアント ID をユーザー割り当てマネージド ID クライアント ID として使用します。 既定値は falseです。
spring.datasource.azure.credential.password Azure でユーザー名/パスワード認証を実行するときに使用するパスワード。
spring.datasource.azure.credential.ユーザー名 Azure でユーザー名/パスワード認証を実行するときに使用するユーザー名。
spring.datasource.azure.profile.cloud-type 接続する Azure クラウドの名前。
spring.datasource.azure.profile.environment.active-directory-endpoint 接続先の Microsoft Entra エンドポイント。
spring.datasource.azure.profile.tenant-id Azure リソースのテナント ID。 tenant-id に使用できる値は、commonorganizationsconsumers、またはテナント ID です。

依存関係のセットアップ

次の依存関係をプロジェクトに追加します。 これにより、プロジェクトに spring-boot-starter 依存関係が推移的に自動的に含まれます。

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>

手記

バージョン 4.5.0以降、パスワードレス接続がサポートされています。

上記の依存関係と共に BOM spring-cloud-azure-dependencies を必ず追加してください。 詳細については、「Spring Cloud Azure 開発者ガイド」の「Getting started」セクションを参照してください。

基本的な使用方法

以降のセクションでは、従来の Spring Boot アプリケーションの使用シナリオを示します。

大事な

パスワードレス接続では、Microsoft Entra 認証が使用されます。 Microsoft Entra 認証を使用するには、まず Microsoft Entra 管理者ユーザーを設定する必要があります。 Microsoft Entra ID ベースの認証に対してユーザーを作成して有効にできるのは、Microsoft Entra 管理者ユーザーだけです。 詳細については、「Spring Data JDBC と Azure Database for MySQLを使用する」を参照してください。

パスワードなしで Azure MySQL にローカルに接続する

  1. ユーザーを作成し、アクセス許可を付与するには、「Spring Data JDBC と Azure Database for MySQLを使用する」の「MySQL 非管理者ユーザーの作成とアクセス許可の付与」セクションを参照してください。

  2. application.yml ファイルで次のプロパティを構成します。

    spring:
      datasource:
        url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME}
        username: ${AZURE_MYSQL_AD_NON_ADMIN_USERNAME}
        azure:
          passwordless-enabled: true
    

サービス プリンシパルを使用して Azure MySQL に接続する

  1. サービス プリンシパル用の Microsoft Entra ユーザーを作成し、アクセス許可を付与します。

    1. まず、次のコマンドを使用して、いくつかの環境変数を設定します。

      export AZURE_MYSQL_AZURE_AD_SP_USERID=$(az ad sp list \
          --display-name <service_principal-name> \
          --query '[0].appId' 
          --output tsv)
      export AZURE_MYSQL_AZURE_AD_SP_USERNAME=<YOUR_MYSQL_AZURE_AD_USERNAME>
      export AZURE_MYSQL_SERVER_NAME=<YOUR_MYSQL_SERVER_NAME>
      export AZURE_MYSQL_DATABASE_NAME=<YOUR_MYSQL_DATABASE_NAME>
      export CURRENT_USERNAME=$(az ad signed-in-user show \
          --query userPrincipalName \
          --output tsv)
      
    2. 次に、管理者以外のユーザーを作成するための create_ad_user_sp.sql という SQL スクリプトを作成します。 次の内容を追加し、ローカルに保存します。

      cat << EOF > create_ad_user_sp.sql
      SET aad_auth_validate_oids_in_tenant = OFF;
      CREATE AADUSER '$AZURE_MYSQL_AZURE_AD_SP_USERNAME' IDENTIFIED BY '$AZURE_MYSQL_AZURE_AD_SP_USERID';
      GRANT ALL PRIVILEGES ON $AZURE_MYSQL_DATABASE_NAME.* TO '$AZURE_MYSQL_AZURE_AD_SP_USERNAME'@'%';
      FLUSH privileges;
      EOF
      
    3. 次のコマンドを使用して SQL スクリプトを実行し、Microsoft Entra の管理者以外のユーザーを作成します。

      mysql -h $AZURE_MYSQL_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user_sp.sql
      
    4. 次のコマンドを使用して、一時 SQL スクリプト ファイルを削除します。

      rm create_ad_user_sp.sql
      
  2. application.yml ファイルで次のプロパティを構成します。

    spring:
      cloud:
        azure:
          credential:
            client-id: ${AZURE_CLIENT_ID}
            client-secret: ${AZURE_CLIENT_SECRET}
          profile:
            tenant-id: <tenant>
      datasource:
        url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME}
        username: ${AZURE_MYSQL_AD_SP_USERNAME}
        azure:
          passwordless-enabled: true
    

手記

tenant-id に使用できる値は、commonorganizationsconsumers、またはテナント ID です。 これらの値の詳細については、「エラー AADSTS50020 - ID プロバイダーのユーザー アカウントがテナントに存在しない」の「間違ったエンドポイント (個人用アカウントと組織アカウント) セクションを参照してください。 シングルテナント アプリの変換の詳細については、「Microsoft Entra IDでのシングルテナント アプリをマルチテナントに変換する」を参照してください。

Azure Spring Apps でマネージド ID を使用して Azure MySQL に接続する

  1. マネージド ID を有効にするには、「アプリケーションを移行して Azure Database for MySQLとのパスワードレス接続を使用する」の「Azure portal を使用してマネージド ID を割り当てる」の セクションを参照してください。

  2. アクセス許可を付与するには、「アプリケーションを移行して Azure Database for MySQLとのパスワードレス接続を使用する 」の「マネージド ID へのロールの割り当て」セクションを参照してください。

  3. application.yml ファイルで次のプロパティを構成します。

    spring:
      datasource:
        url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME}
        username: ${AZURE_MYSQL_AD_MI_USERNAME}
        azure:
          passwordless-enabled: true
    

サンプル

GitHub の azure-spring-boot-samples リポジトリを参照してください。