マネージド ID またはAzure Key Vault シークレット ストアを使用して、Dapr コンポーネントのAzureと非Microsoft サービスへの接続を安全に確立します。
作業を開始する前に、 Dapr コンポーネントのサポートの詳細を確認してください。
推奨事項
最も安全な接続を実現するために、可能な限りマネージド ID のサポートを提供するAzure コンポーネントを使用することをお勧めします。 マネージド ID 認証がサポートされていない場合に
| サービスの種類 | 推奨 |
|---|---|
| マネージド ID をサポートするAzure コンポーネント | マネージド ID フローを使用する (推奨) |
| マネージド ID をサポートしない Azure コンポーネント | Azure Key Vault シークレット ストアを使用します |
| Azure以外のコンポーネント | Azure Key Vault シークレット ストアを使用します |
マネージド ID を使用する (推奨)
Azureホストされるサービスの場合、Dapr は、スコープ付きコンテナー アプリの管理 ID を使用してバックエンド サービス プロバイダーに対する認証を行うことができます。 マネージド ID を使用している場合、コンポーネント マニフェストにシークレット情報を含める必要はありません。 マネージド ID の使用が推奨されるのは、機密性の高い入力のコンポーネント内への保存がなくなり、シークレット ストアの管理も必要なくなるためです。
注意
azureClientId メタデータ フィールド (マネージド ID のクライアント ID) は、ユーザー割り当てマネージド ID を使って認証を行うすべてのコンポーネントで必要です。
Dapr シークレット ストアのコンポーネント参照を使用する
マネージド ID 認証をサポートしていない、Entra 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 とユーザー割り当てマネージド 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 シークレットを作成して使用するためのプラットフォーム管理アプローチを提供します。 この方法を使用して、Azure以外のサービスに接続できます。 または、開発/テスト シナリオでは、シークレット ストアやマネージド ID を設定せずに、CLI を使用してコンポーネントをすばやくデプロイするために使用できます。
このコンポーネント構成では、秘匿性の高い値をメタデータ セクションから参照できるシークレット パラメーターとして定義します。
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