マネージド ID または Azure Key Vault シークレット ストアを使用して、Dapr コンポーネント用の Azure および Microsoft 以外のサービスへの接続を安全に確立します。
作業を開始する前に、 Dapr コンポーネントのサポートの詳細を確認してください。
推奨事項
可能な限りは、最も安全な接続を実現するために、マネージド ID のサポートを提供する Azure コンポーネントを使用することが推奨されます。 Azure Key Vault シークレット ストアを使用するのは、マネージド ID 認証がサポートされていない場合 "だけ" にしてください。
| サービスの種類 | 推奨 |
|---|---|
| マネージド ID がサポートされている Azure コンポーネント | マネージド ID フローを使用する (推奨) |
| マネージド ID がサポートされていない Azure コンポーネント | Azure Key Vault シークレット ストアを使用する |
| Azure 以外のコンポーネント | Azure Key Vault シークレット ストアを使用する |
マネージド ID を使用する (推奨)
Azure でホストされるサービスの場合、Dapr は 、スコープ付きコンテナー アプリのマネージド ID を 使用して、バックエンド サービス プロバイダーに対する認証を行うことができます。 マネージド ID を使用している場合、コンポーネント マニフェストにシークレット情報を含める必要はありません。 マネージド ID の使用が推奨されるのは、機密性の高い入力のコンポーネント内への保存がなくなり、シークレット ストアの管理も必要なくなるためです。
注意
azureClientId メタデータ フィールド (マネージド ID のクライアント ID) は、ユーザー割り当てマネージド ID を使って認証を行うすべてのコンポーネントで必要です。
Dapr シークレット ストアのコンポーネント参照を使用する
Entra 以外の ID が有効になっているサービス、またはマネージド ID 認証をサポートしていないコンポーネント用に Dapr コンポーネントを作成する場合、いくつかのメタデータ フィールドには機密性の高い入力値が必要となります。 このアプローチでは、シークレット情報に安全にアクセスする既存の Dapr シークレット ストア コンポーネントを参照することで、これらのシークレットを取得します。
参照を設定するには:
-
Azure Container Apps スキーマを使用して Dapr シークレット ストア コンポーネントを作成します。 サポートされているすべての Dapr シークレット ストアのコンポーネントの種類は、
secretstoresで始まります。 - 機密メタデータ入力を取得するために作成 した Dapr シークレット ストア コンポーネントを参照する追加のコンポーネントを (必要に応じて) 作成します。
Dapr シークレット ストア コンポーネントを作成する
Azure Container Apps でシークレット ストア コンポーネントを作成する場合は、次のいずれかの方法でメタデータ セクションに秘匿性の高い情報を指定できます。
- Azure Key Vault シークレット ストアの場合は、マネージド ID を使用して接続を確立します。
- Azure 以外のシークレット ストアの場合は、コンポーネント マニフェストの一部として直接定義されるプラットフォームで管理される Kubernetes シークレットを使用します。
Azure Key Vault シークレット ストア
次のコンポーネント スキーマは、Azure Key Vault シークレット ストアを使用する中で考えられる限り最も単純なシークレット ストア構成を示しています。
publisher-app と subscriber-app は両方とも、Azure Key Vault インスタンスに対する適切なアクセス許可を持つシステム割り当てまたはユーザー割り当てマネージド ID を持つように構成されています。
componentType: secretstores.azure.keyvault
version: v1
metadata:
- name: vaultName
value: [your_keyvault_name]
- name: azureEnvironment
value: "AZUREPUBLICCLOUD"
- name: azureClientId # Only required for authenticating user-assigned managed identity
value: [your_managed_identity_client_id]
scopes:
- publisher-app
- subscriber-app
プラットフォーム管理のKubernetesシークレット
Kubernetes シークレット、ローカル環境変数、ローカル ファイル Dapr シークレット ストアの代わりに、Azure Container Apps には、Kubernetes シークレットを作成して使用するためのプラットフォームで管理されたアプローチが用意されています。 この方法は、シークレット ストアやマネージド ID を設定せずに CLI を介してコンポーネントを迅速にデプロイするために、Azure 以外のサービスに接続するため、または Dev/Test シナリオで使用できます。
このコンポーネント構成では、秘匿性の高い値をメタデータ セクションから参照できるシークレット パラメーターとして定義します。
componentType: secretstores.azure.keyvault
version: v1
metadata:
- name: vaultName
value: [your_keyvault_name]
- name: azureEnvironment
value: "AZUREPUBLICCLOUD"
- name: azureTenantId
value: "[your_tenant_id]"
- name: azureClientId
value: "[your_client_id]"
- name: azureClientSecret
secretRef: azClientSecret
secrets:
- name: azClientSecret
value: "[your_client_secret]"
scopes:
- publisher-app
- subscriber-app
Dapr シークレット ストア コンポーネントを参照する
先ほどのいずれかの方法を使って Dapr シークレット ストアを作成すると、同じ環境内の他の Dapr コンポーネントからそのシークレット ストアを参照できるようになります。 次の例では、Microsoft Entra ID 認証の使用を示します。
componentType: pubsub.azure.servicebus.queue
version: v1
secretStoreComponent: "[your_secret_store_name]"
metadata:
- name: namespaceName
# Required when using Azure Authentication.
# Must be a fully-qualified domain name
value: "[your_servicebus_namespace.servicebus.windows.net]"
- name: azureTenantId
value: "[your_tenant_id]"
- name: azureClientId
value: "[your_client_id]"
- name: azureClientSecret
secretRef: azClientSecret
scopes:
- publisher-app
- subscriber-app