次の方法で共有


Spring Cloud Azure PostgreSQL のサポート

Azure Database for PostgreSQL は、オープンソースの Postgres データベース エンジンに基づくリレーショナル データベース サービスです。 これは、予測可能なパフォーマンス、セキュリティ、高可用性、動的なスケーラビリティを備えたミッション クリティカルなワークロードを処理できる、フル マネージドのサービスとしてのデータベースです。

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

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

サポートされているバージョンについては、Azure Database for PostgreSQL - フレキシブル サーバーでサポートされている PostgreSQL メジャー バージョン を参照してください。

コア機能

パスワードレス接続

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

しくみ

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

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

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

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

PostgreSQL の Microsoft Entra 認証を示す図。

構成

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

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

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

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

名前 形容
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-postgresql</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 PostgreSQLを使用する」を参照してください。

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

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

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

    spring:
      datasource:
        url: jdbc:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require
        username: ${AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME}
        azure:
          passwordless-enabled: true
    

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

  1. サービス プリンシパルにロールを割り当てます。

    1. 管理者以外のユーザーを作成するための create_ad_user_sp.sql という SQL スクリプトを作成します。 次の内容を追加し、ローカルに保存します。

      大事な

      Microsoft Entra テナント <service-principal-name> 既に存在しているか、管理者以外のユーザーを作成できないことを確認します。

      cat << EOF > create_ad_user_sp.sql
      select * from pgaadauth_create_principal('<service-principal-name>', false, false);
      EOF
      
    2. 次のコマンドを使用して SQL スクリプトを実行し、Microsoft Entra の管理者以外のユーザーを作成します。

      psql "host=$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com user=$CURRENT_USERNAME@$AZ_DATABASE_SERVER_NAME dbname=postgres port=5432 password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) sslmode=require" < create_ad_user_sp.sql
      
    3. 次のコマンドを使用して、一時 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:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require
        username: ${AZ_POSTGRESQL_AD_SP_USERNAME}
        azure:
          passwordless-enabled: true
    

手記

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

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

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

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

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

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
            client-id: ${AZURE_CLIENT_ID}
      datasource:
        url: jdbc:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require
        username: ${AZ_POSTGRESQL_AD_MI_USERNAME}
        azure:
          passwordless-enabled: true
    

サンプル

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