Spring Cloud Azure 認証
この記事は、✅ バージョン 4.19.0 ✅ バージョン 5.19.0 に適用されます。
この記事では、Spring Cloud Azure のすべての認証方法について説明します。
DefaultAzureCredential
DefaultAzureCredential
は、アプリケーションが Azure Cloud で実行されることを意図しているほとんどのシナリオに適しています。 これは、DefaultAzureCredential
は、開発環境での認証に使用される資格情報を使用してデプロイするときに一般的に認証に使用される資格情報を組み合わせたためです。
手記
DefaultAzureCredential
は、適切な既定の動作で一般的なシナリオを処理することで、SDK の使用を簡略化することを目的としています。 より詳細な制御が必要な場合、またはシナリオが既定の設定で提供されない場合は、他の種類の資格情報を使用する必要があります。
DefaultAzureCredential
は、次のメカニズムを使用して順番に認証を試みます。
- 環境 -
DefaultAzureCredential
は、環境変数で指定されたアカウント情報を読み取り、それを使用して認証します。 - マネージド ID - マネージド ID が有効になっている Azure ホストにアプリケーションがデプロイされている場合、
DefaultAzureCredential
はそのアカウントで認証されます。 - IntelliJ - Azure Toolkit for IntelliJ を使用して認証した場合、
DefaultAzureCredential
はそのアカウントで認証されます。 - Visual Studio Code - Visual Studio Code Azure アカウント プラグインを使用して認証した場合、
DefaultAzureCredential
はそのアカウントで認証されます。 - Azure CLI - Azure CLI
az login
コマンドを使用してアカウントを認証した場合、DefaultAzureCredential
はそのアカウントで認証されます。
先端
セキュリティ プリンシパルに、Azure リソースにアクセスするための十分なアクセス許可が付与されていることを確認します。 詳細については、「Microsoft Entra IDを使用してアクセスを承認する」を参照してください。
手記
Spring Cloud Azure AutoConfigure 4.1.0 以降では、springCloudAzureCredentialTaskExecutor
という名前の ThreadPoolTaskExecutor
Bean が既定で自動的に登録され、Azure Identity によって作成されたすべてのスレッドが管理されます。 このスレッド プールによって管理される各スレッドの名前には、az-identity-
がプレフィックスとして付けられます。 この ThreadPoolTaskExecutor
Bean は、Spring Boot によって提供される Executor
Bean とは独立しています。
マネージド ID
一般的な課題は、ソリューションを構成するさまざまなコンポーネント間の通信をセキュリティで保護するために使用されるシークレットと資格情報の管理です。 マネージド ID を使用すると、資格情報を管理する必要がなくなります。 マネージド ID は、Microsoft Entra 認証をサポートするリソースに接続するときにアプリケーションが使用する ID を提供します。 アプリケーションでは、マネージド ID を使用して Microsoft Entra トークンを取得できます。 たとえば、アプリケーションでは、マネージド ID を使用して Azure Key Vault などのリソースにアクセスし、セキュリティで保護された方法で資格情報を格納したり、ストレージ アカウントにアクセスしたりできます。
接続文字列やキーをアプリケーションで使用する代わりにマネージド ID を使用することをお勧めします。セキュリティが強化され、シークレットと資格情報を管理する手間が省けるからです。 この場合、DefaultAzureCredential
は、ローカルに格納されているアカウント情報を使用してローカルで開発し、アプリケーションを Azure Cloud にデプロイし、マネージド ID を使用するシナリオに適しています。
マネージド ID の種類
マネージド ID には、次の 2 種類があります。
- システム割り当て - 一部の Azure サービスでは、サービス インスタンスでマネージド ID を直接有効にすることができます。 システム割り当てマネージド ID を有効にすると、そのサービス インスタンスのライフサイクルに関連付けられた ID が Microsoft Entra に作成されます。 そのため、リソースが削除されると、Azure によって自動的に ID が削除されます。 設計上、この ID を使用して Microsoft Entra ID からトークンを要求できるのは、その Azure リソースだけです。
- ユーザー割り当て - スタンドアロンの Azure リソースとしてマネージド ID を作成することもできます。 ユーザー割り当てマネージド ID を作成し、Azure サービスの 1 つ以上のインスタンスに割り当てることができます。 ユーザー割り当てマネージド ID では、ID は使用するリソースとは別に管理されます。
手記
ユーザー割り当てマネージド ID を使用する場合は、spring.cloud.azure.credential.client-id
または spring.cloud.azure.<azure-service>.credential.client-id
を使用してクライアント ID を指定できます。 システム割り当てマネージド ID を使用する場合、資格情報の構成は必要ありません。
先端
セキュリティ プリンシパルに、Azure リソースにアクセスするための十分なアクセス許可が付与されていることを確認します。 詳細については、「Microsoft Entra IDを使用してアクセスを承認する」を参照してください。
マネージド ID の詳細については、「Azure リソースのマネージド ID とは」を参照してください。.
その他の資格情報の種類
より詳細な制御が必要な場合、またはシナリオが DefaultAzureCredential
または既定の設定によって提供されない場合は、他の資格情報の種類を使用する必要があります。
Microsoft Entra ID を使用した認証と承認
Microsoft Entra ID を使用すると、Azure ロールベースのアクセス制御 (Azure RBAC) を使用して、ユーザーまたはアプリケーション サービス プリンシパルである可能性があるセキュリティ プリンシパルにアクセス許可を付与できます。 セキュリティ プリンシパル (ユーザーまたはアプリケーション) が Azure リソース (Event Hubs リソースなど) にアクセスしようとすると、要求が承認される必要があります。 Microsoft Entra ID では、リソースへのアクセスは 2 段階のプロセスです。
- まず、セキュリティ プリンシパルの ID が認証され、OAuth 2.0 トークンが返されます。
- 次に、トークンは、指定されたリソースへのアクセスを承認する要求の一部として Azure サービスに渡されます。
Microsoft Entra ID で認証する
Microsoft Entra 認証をサポートするリソースにアプリケーションを接続するには、プレフィックス spring.cloud.azure.credential
または spring.cloud.azure.<azure-service>.credential
で次の構成を設定できます。
次の表に、認証プロパティの一覧を示します。
財産 | 形容 |
---|---|
client-id | Azure でサービス プリンシパル認証を実行するときに使用するクライアント ID。 |
client-secret | Azure でサービス プリンシパル認証を実行するときに使用するクライアント シークレット。 |
client-certificate-path | Azure でサービス プリンシパル認証を実行するときに使用する PEM 証明書ファイルのパス。 |
client-certificate-password | 証明書ファイルのパスワード。 |
username | Azure でユーザー名/パスワード認証を実行するときに使用するユーザー名。 |
パスワード | Azure でユーザー名/パスワード認証を実行するときに使用するパスワード。 |
managed-identity-enabled | マネージド ID を有効にするかどうか。 |
先端
Spring Cloud Azure のすべての構成プロパティの一覧については、「Spring Cloud Azure 構成プロパティ
アプリケーションは複数の場所で使用可能な資格情報を検索し、資格情報のプロパティが構成されていない場合は DefaultAzureCredential
を使用します。 特定の資格情報を使用する場合は、次の例を参照してガイダンスを参照してください。
次の例は、システム割り当てマネージド ID を使用して認証する方法を示しています。
spring.cloud.azure:
credential:
managed-identity-enabled: true
次の例は、ユーザー割り当てマネージド ID を使用して認証する方法を示しています。
spring.cloud.azure:
credential:
managed-identity-enabled: true
client-id: ${AZURE_CLIENT_ID}
次の例では、クライアント シークレットを使用してサービス プリンシパルを使用して認証する方法を示します。
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
手記
tenant-id
に使用できる値は、common
、organizations
、consumers
、またはテナント ID です。 これらの値の詳細については、「エラー AADSTS50020 - ID プロバイダーのユーザー アカウントがテナントに存在しない」の「間違ったエンドポイント (個人用アカウントと組織アカウント) セクションを参照してください。 シングルテナント アプリの変換の詳細については、「Microsoft Entra IDでのシングルテナント アプリをマルチテナントに変換する」を参照してください。
次の例は、クライアント PFX 証明書でサービス プリンシパルを使用して認証する方法を示しています。
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
client-certificate-password: ${AZURE_CLIENT_CERTIFICATE_PASSWORD}
profile:
tenant-id: <tenant>
手記
tenant-id
に使用できる値は、common
、organizations
、consumers
、またはテナント ID です。 これらの値の詳細については、「エラー AADSTS50020 - ID プロバイダーのユーザー アカウントがテナントに存在しない」の「間違ったエンドポイント (個人用アカウントと組織アカウント) セクションを参照してください。 シングルテナント アプリの変換の詳細については、「Microsoft Entra IDでのシングルテナント アプリをマルチテナントに変換する」を参照してください。
次の例は、クライアント PEM 証明書でサービス プリンシパルを使用して認証する方法を示しています。
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
profile:
tenant-id: <tenant>
手記
tenant-id
に使用できる値は、common
、organizations
、consumers
、またはテナント ID です。 これらの値の詳細については、「エラー AADSTS50020 - ID プロバイダーのユーザー アカウントがテナントに存在しない」の「間違ったエンドポイント (個人用アカウントと組織アカウント) セクションを参照してください。 シングルテナント アプリの変換の詳細については、「Microsoft Entra IDでのシングルテナント アプリをマルチテナントに変換する」を参照してください。
次の例は、ユーザー資格情報を使用して認証する方法を示しています。
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
username: ${AZURE_USER_USERNAME}
password: ${AZURE_USER_PASSWORD}
次の例は、別のサービス プリンシパルを使用して Key Vault で認証する方法を示しています。 この例では、システム割り当てマネージド ID とサービス プリンシパルの 2 つの資格情報を使用してアプリケーションを構成します。 Key Vault シークレット クライアントはサービス プリンシパルを使用しますが、他のコンポーネントでは代わりにマネージド ID が使用されます。
spring.cloud.azure:
credential:
managed-identity-enabled: true
keyvault.secret:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
手記
tenant-id
に使用できる値は、common
、organizations
、consumers
、またはテナント ID です。 これらの値の詳細については、「エラー AADSTS50020 - ID プロバイダーのユーザー アカウントがテナントに存在しない」の「間違ったエンドポイント (個人用アカウントと組織アカウント) セクションを参照してください。 シングルテナント アプリの変換の詳細については、「Microsoft Entra IDでのシングルテナント アプリをマルチテナントに変換する」を参照してください。
Microsoft Entra ID を使用してアクセスを承認する
承認手順では、1 つ以上の Azure ロールをセキュリティ プリンシパルに割り当てる必要があります。 セキュリティ プリンシパルに割り当てられるロールによって、プリンシパルに付与されるアクセス許可が決まります。
先端
すべての Azure 組み込みロールの一覧については、「Azure 組み込みロールの」を参照してください。
次の表に、Spring Cloud Azure でサポートされている Azure サービスへのアクセスを承認するための Azure 組み込みロールを示します。
役割 | 形容 |
---|---|
App Configuration Data Owner | App Configuration データへのフル アクセスを許可します。 |
App Configuration Data Reader | App Configuration データへの読み取りアクセスを許可します。 |
Azure Event Hubs データ所有者 の |
Azure Event Hubs リソースへのフル アクセスを許可します。 |
Azure Event Hubs データ レシーバー の |
Azure Event Hubs リソースへの受信アクセスを許可します。 |
Azure Event Hubs データ送信者 の |
Azure Event Hubs リソースへの送信アクセスを許可します。 |
Azure Service Bus データ所有者 の |
Azure Service Bus リソースへのフル アクセスを許可します。 |
Azure Service Bus データ レシーバー の |
Azure Service Bus リソースへの受信アクセスを許可します。 |
Azure Service Bus データ送信者 の |
Azure Service Bus リソースへの送信アクセスを許可します。 |
ストレージ BLOB データ所有者 の |
POSIX アクセス制御の割り当てを含め、Azure Storage BLOB コンテナーとデータへのフル アクセスを提供します。 |
Storage BLOB データ 閲覧者の | Azure Storage のコンテナーと BLOB の読み取りと一覧表示。 |
Storage Queue Data Reader | Azure Storage キューとキュー メッセージの読み取りと一覧表示。 |
Redis Cache 共同作成者 | Redis キャッシュを管理します。 |
手記
Spring Cloud Azure Resource Manager を使用して Event Hubs、Service Bus、Storage Queue の接続文字列、または Cache for Redis のプロパティを取得する場合は、Azure 組み込みロール Contributor
割り当てます。 Azure Cache for Redis は特別なものであり、Redis Cache Contributor
ロールを割り当てて Redis のプロパティを取得することもできます。
手記
Key Vault アクセス ポリシーは、特定のセキュリティ プリンシパル (ユーザー、アプリケーション、またはユーザー グループ) が、Key Vault のシークレット、キー、および証明書に対して異なる操作を実行できるかどうかを決定します。 アクセス ポリシーは、Azure portal、Azure CLI、または Azure PowerShell を使用して割り当てることができます。 詳細については、「Key Vault アクセス ポリシー割り当てる」を参照してください。
大事な
Azure Cosmos DB では、Cosmos DB Built-in Data Reader
と Cosmos DB Built-in Data Contributor
の 2 つの組み込みロール定義が公開されています。 ただし、ロール管理に対する Azure portal のサポートはまだ利用できません。 アクセス許可モデル、ロール定義、ロールの割り当ての詳細については、「Azure Cosmos DB アカウントの Microsoft Entra ID を使用してロールベースのアクセス制御を構成する」を参照してください。
SAS トークン
Shared Access Signature (SAS) を使用して認証するサービスを構成することもできます。
spring.cloud.azure.<azure-service>.sas-token
は、構成するプロパティです。 たとえば、spring.cloud.azure.storage.blob.sas-token
を使用してストレージ BLOB サービスに対する認証を行います。
接続文字列
接続文字列は、接続情報と資格情報を提供するために、一部の Azure サービスでサポートされています。 接続文字列を使用してこれらの Azure サービスに接続するには、spring.cloud.azure.<azure-service>.connection-string
を構成するだけです。 たとえば、Event Hubs サービスに接続するように spring.cloud.azure.eventhubs.connection-string
を構成します。