Spring Cloud Azure Kafka のサポート

Spring Cloud Azure Kafka のサポートは、Spring アプリケーションが OAuth 資格情報または接続文字列を使用してAzure Event Hubsを認証して接続するのに役立ちます。 この記事では、サポートされている認証の種類、構成オプション、依存関係、および使用シナリオについて説明します。

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

スターターの現在のバージョンは Apache Kafka Clients 2.0.0 と互換性があり、Java 8 以降を使用します。

サポートされている認証の種類

スターターでは、次の認証の種類がサポートされています。

  • プレーン接続文字列認証
    • 直接接続文字列認証
    • ARM ベースの接続文字列認証
  • OAuth 資格情報認証
    • マネージド ID 認証
    • ユーザー名/パスワード認証
    • サービス プリンシパル認証
    • DefaultAzureCredential 認証

しくみ

OAuth 資格情報認証

このセクションでは、Spring Cloud Azure OAuth 認証の全体的なワークフローについて説明します。

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

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

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

プレーン接続文字列認証

接続文字列認証モードでは、接続文字列認証を直接使用することも、Azure Resource Manager を使用して接続文字列を取得することもできます。 使用法の詳細については、「接続文字列認証の 基本的な使用法」セクションを参照してください。

手記

バージョン 4.3.0 以降、OAuth 認証を優先して接続文字列認証は非推奨とされます。

構成

OAuth 認証で Kafka サポートを使用する場合の構成可能なプロパティ

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

  1. Event Hubs Kafka 向け Spring Cloud Azure のプロパティ
  2. credentialのプレフィックスを持つ profilespring.cloud.azure のグローバル認証構成オプション。
  3. Kafka 固有のレベルの構成。 Kafka レベルの構成は、commonconsumerproducer、または異なるプレフィックスを持つ admin スコープ用の Spring Boot および Spring Cloud Stream バインダーでも使用できます。

グローバル プロパティは、com.azure.spring.cloud.autoconfigure.context.AzureGlobalPropertiesを介して公開されます。 Kafka 固有のプロパティは、org.springframework.boot.autoconfigure.kafka.KafkaProperties (Spring Boot) と org.springframework.cloud.stream.binder.kafka.properties.KafkaBinderConfigurationProperties (Spring Cloud Stream バインダー) を介して公開されます。

次の一覧は、サポートされているすべての構成オプションを示しています。

  • Event Hubs Kafka プロパティ用の Spring Cloud Azure。

    • プロパティ: spring.cloud.azure.eventhubs.kafka.enabled
    • 説明: Kafka の Azure Event Hubs への資格情報無料接続を有効にするかどうか、既定値は trueです。
  • Spring Cloud Azure のグローバル認証構成オプション

    • プレフィックス: spring.cloud.azure
    • サポートされているオプション: spring.cloud.azure.credential.*spring.cloud.azure.profile.*

    グローバル構成オプションの完全な一覧については、「グローバル構成プロパティ を参照してください。

  • Spring Boot Kafka の一般的な構成

    • プレフィックス: spring.kafka.properties.azure
    • 例: spring.kafka.properties.azure.credential.*
  • Spring Kafka コンシューマー構成オプション

    • プレフィックス: spring.kafka.consumer.properties.azure
    • 例: spring.kafka.consumer.properties.azure.credential.*
  • Spring Kafka プロデューサーの構成オプション

    • プレフィックス: spring.kafka.producer.properties.azure
    • 例: spring.kafka.producer.properties.azure.credential.*
  • Spring Kafka 管理者の構成オプション

    • プレフィックス: spring.kafka.admin.properties.azure
    • 例: spring.kafka.admin.properties.azure.credential.*
  • Spring Cloud Stream Kafka Binder の一般的な構成

    • プレフィックス: spring.cloud.stream.kafka.binder.configuration.azure
    • 例: spring.cloud.stream.kafka.binder.configuration.azure.credential.*
  • Spring Cloud Stream Kafka Binder コンシューマーの構成

    • プレフィックス: spring.cloud.stream.kafka.binder.consumer-properties.azure
    • 例: spring.cloud.stream.kafka.binder.consumer-properties.azure.credential.*
  • Spring Cloud Stream Kafka Binder プロデューサーの構成

    • プレフィックス: spring.cloud.stream.kafka.binder.producer-properties.azure
    • 例: spring.cloud.stream.kafka.binder.producer-properties.azure.credential.*
  • Spring Cloud Stream Kafka Binder 管理者の構成

    • プレフィックス: サポートされていません。Spring Boot Kafka の共通構成または管理者構成を使用してください。

次の表に、Spring Boot Kafka の一般的な構成オプションを示します。

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

手記

さまざまなレベルの構成オプションでは、次の規則が適用されます。 より具体的な構成オプションは、一般的な構成オプションよりも優先順位が高くなります。 例えば:

  • Spring Kafka の一般的な構成オプションは、グローバル オプションよりも優先されます。
  • Spring Kafka コンシューマー構成オプションは、一般的なオプションよりも優先されます。
  • Spring Kafka プロデューサーの構成オプションは、一般的なオプションよりも優先されます。
  • Spring Kafka 管理者の構成オプションは、一般的なオプションよりも優先されます。
  • Spring Cloud Stream Kafka Binder オプションは、同じパターンに従います。

プレーン接続文字列認証で Kafka サポートを使用する場合の構成可能なプロパティ

次の表に、Kafka の Spring Boot Event Hubs の一般的な構成オプションを示します。

財産 説明
spring.cloud.azure.eventhubs.kafka.enabled Azure Event Hubs Kafka サポートを有効にするかどうかを指定します。 既定値は trueです。
spring.cloud.azure.eventhubs.connection-string Azure Event Hubs 接続文字列。 接続文字列を直接指定する場合は、この値を指定します。
spring.cloud.azure.eventhubs.namespace Azure Event Hubs 名前空間。 Azure Resource Manager を使用して接続情報を取得する場合は、この値を指定します。
spring.cloud.azure.eventhubs.resource.resource-group Azure Event Hubs 名前空間のリソース グループ。 Azure Resource Manager を使用して接続情報を取得する場合は、この値を指定します。
spring.cloud.azure.profile.subscription-id サブスクリプション ID。 Azure Resource Manager を使用して接続情報を取得する場合は、この値を指定します。

依存関係のセットアップ

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

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

手記

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

基本的な使用方法

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

OAuth 認証を使用する

Spring Cloud Azure が Kafka に提供する OAuth 認証を使用する場合は、上記の構成を使用して特定の資格情報を構成できます。 または、資格情報を構成しないことを選択することもできます。 この場合、Spring Cloud Azureは環境から資格情報を読み込みます。 このセクションでは、Azure CLI環境またはAzure Spring Apps ホスティング環境から資格情報を読み込む方法について説明します。

手記

セキュリティ プリンシパルを使用して、Azure リソースにアクセスするためのMicrosoft Entra IDで認証と承認を行う場合は、「Microsoft Entra IDを使用してアクセスを承認する」セクションを参照して、セキュリティ プリンシパルがAzure リソースにアクセスするための十分なアクセス許可を持っていることを確認します。

次のセクションでは、OAuth 認証でさまざまな Spring エコシステム ライブラリを使用するシナリオについて説明します。

Spring Kafka アプリケーションのサポート

このセクションでは、Spring Kafka または Spring Integration Kafka ライブラリを使用する Spring Boot アプリケーションの使用シナリオについて説明します。

依存関係のセットアップ
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<!-- Using Spring Kafka library only-->
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>{version}</version><!--Need to be set, for example:2.8.6-->
</dependency>
<!-- Using Spring Integration library only -->
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-kafka</artifactId>
    <version>{version}</version><!--Need to be set, for example:5.5.12-->
</dependency>

構成の更新

OAuth 認証を使用するには、次の例に示すように、Event Hubs エンドポイントを指定します。

spring.kafka.bootstrap-servers=<NAMESPACENAME>.servicebus.windows.net:9093

Spring Cloud Stream バインダー Kafka アプリケーションのサポート

このセクションでは、Spring Cloud Stream バインダー Kafka ライブラリを使用する Spring Boot アプリケーションの使用シナリオについて説明します。

依存関係のセットアップ
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-kafka</artifactId>
    <version>{version}</version><!--Need to be set, for example:3.2.3-->
</dependency>
構成

OAuth 認証を使用するには、次の例に示すように、Event Hubs エンドポイントを指定します。

spring.cloud.stream.kafka.binder.brokers=<NAMESPACENAME>.servicebus.windows.net:9093

手記

バージョン 4.3.0を使用している場合は、 spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources=com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration プロパティを設定して、OAuth 認証ワークフロー全体を有効にします。 kafka-binder-nameは、1 つの Kafka バインダー アプリケーションで既定でkafkaされます。 構成 AzureKafkaSpringCloudStreamConfiguration では、 KafkaBinderConfigurationPropertiesの OAuth セキュリティ パラメーターを指定します。 この構成は、Azure ID を有効にするためにKafkaOAuth2AuthenticateCallbackHandlerで使用されます。

4.4.0後のバージョンの場合、このプロパティは Kafka バインダー環境ごとに自動的に追加されるため、手動で追加する必要はありません。

OAuth 認証にマネージド ID を使用する

  1. マネージド ID を使用するには、サービスのマネージド ID を有効にして、 Azure Event Hubs Data Receiver ロールと Azure Event Hubs Data Sender ロールを割り当てます。 詳細については、「アクセス権に Azure ロールを割り当てる」を参照してください。

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

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
    

    重要

    ユーザー割り当てマネージド ID を使用している場合は、ユーザー割り当てマネージド ID クライアント ID を持つプロパティ spring.cloud.azure.credential.client-id も追加します。

サンプル

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

接続文字列認証を使用する

接続文字列認証を直接使用することも、Azure Resource Manager を使用して接続文字列を取得することもできます。

手記

バージョン 5.0.0 以降では、Spring Cloud Stream フレームワークで接続文字列認証を使用する場合でも、接続文字列が動作することを確認するには、次のプロパティが必要です。 Kafka バインダー名をカスタマイズしない場合は、 <kafka-binder-name> の値を kafka する必要があります。 spring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources=com.azure.spring.cloud.autoconfigure.implementation.eventhubs.kafka.AzureEventHubsKafkaAutoConfiguration

使用する spring-cloud-dependencies のバージョンが 2022.0.0場合は、例外 java.lang.IllegalStateException: kafka_context has not been refreshed yetが発生します。 この問題を解決するには、より高いバージョンにアップグレードします。

依存関係のセットアップ

Kafka 用 Azure Event Hubs を使用するように Apache Kafka アプリケーションを移行する場合は、次の依存関係を追加します。

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

Azure Resource Managerを使用して接続文字列を取得する場合は、次の依存関係を追加します。

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-resourcemanager</artifactId>
</dependency>

構成

Event Hubs 接続文字列を直接使用する

Event Hubs for Kafka に接続する最も簡単な方法は、接続文字列を使用することです。 次のプロパティを追加するだけです。

spring.cloud.azure.eventhubs.connection-string=${AZURE_EVENTHUBS_CONNECTION_STRING}
Azure Resource Manager を使用して接続文字列を取得する

アプリケーションで接続文字列を構成しない場合は、Azure Resource Manager を使用して接続文字列を取得できます。 Azure Resource Manager で認証するには、Azure CLI に格納されている資格情報や、Visual Studio Code や Intellij IDEA などの別のローカル開発ツールを使用することもできます。 または、アプリケーションが Azure Cloud にデプロイされている場合は、マネージド ID を使用できます。 プリンシパルにリソース メタデータを読み取る十分なアクセス許可があることを確認します。

手記

セキュリティ プリンシパルを使用して、Azure リソースにアクセスするためのMicrosoft Entra IDで認証と承認を行う場合は、「Microsoft Entra IDを使用してアクセスを承認する」セクションを参照して、セキュリティ プリンシパルがAzure リソースにアクセスするための十分なアクセス許可を持っていることを確認します。

Azure Resource Manager を使用して接続文字列を取得するには、次のプロパティを追加するだけです。

spring:
  cloud:
    azure:
      profile:
        subscription-id: ${AZURE_SUBSCRIPTION_ID}
      eventhubs:
        namespace: ${AZURE_EVENTHUBS_NAMESPACE}
        resource:
          resource-group: ${AZURE_EVENTHUBS_RESOURCE_GROUP}

サンプル

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