Dapr コンポーネント経由で他の Azure またはサード パーティのサービスに接続する
マネージド ID または Azure Key Vault シークレット ストアを使用して、Dapr コンポーネント用の Azure およびサード パーティのサービスへの接続を安全に確立します。
作業を開始する前に、提供されている 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 の使用が推奨されるのは、機密性の高い入力のコンポーネント内への保存がなくなり、シークレット ストアの管理も必要なくなるためです。
Note
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 コンポーネントからそのシークレット ストアを参照できるようになります。 次の例は、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