要设置 Azure Key Vault 密钥存储,创建一个类型为 secretstores.azure.keyvault
的组件。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: azurekeyvault
spec:
type: secretstores.azure.keyvault
version: v1
metadata:
- name: vaultName # 必需
value: [your_keyvault_name]
- name: azureEnvironment # 可选,默认为 AZUREPUBLICCLOUD
value: "AZUREPUBLICCLOUD"
# 请参阅下面的身份验证部分以获取所有选项
- name: azureTenantId
value: "[your_service_principal_tenant_id]"
- name: azureClientId
value: "[your_service_principal_app_id]"
- name: azureCertificateFile
value : "[pfx_certificate_file_fully_qualified_local_path]"
Azure Key Vault 密钥存储组件仅支持通过 Microsoft Entra ID 进行身份验证。在启用此组件之前,请确保:
字段 | 必需 | 详细信息 | 示例 |
---|---|---|---|
vaultName | Y | Azure Key Vault 的名称 | "mykeyvault" |
azureEnvironment | N | 如果使用不同的 Azure 云,则为 Azure 环境的可选名称 | "AZUREPUBLICCLOUD" (默认值),"AZURECHINACLOUD" ,"AZUREUSGOVERNMENTCLOUD" ,"AZUREGERMANCLOUD" |
身份验证元数据 | 有关更多信息,请参阅Azure 身份验证 |
此外,您必须提供Azure 身份验证文档中解释的身份验证字段。
从此密钥存储检索密钥时,可以提供以下可选查询参数:
查询参数 | 描述 |
---|---|
metadata.version_id | 给定密钥的版本。 |
metadata.maxresults | (仅适用于批量请求)要返回的密钥数量,超过此数量后请求将被截断。 |
值 | 描述 |
---|---|
SERVICE_PRINCIPAL_ID | 您为给定应用程序创建的服务主体的 ID |
SERVICE_PRINCIPAL_ID="[your_service_principal_object_id]"
LOCATION="[your_location]"
(您可以使用以下命令获取完整的选项列表:az account list-locations --output tsv
)
RG_NAME="[resource_group_name]"
RG_ID=$(az group create \
--name "${RG_NAME}" \
--location "${LOCATION}" \
| jq -r .id)
KEYVAULT_NAME="[key_vault_name]"
az keyvault create \
--name "${KEYVAULT_NAME}" \
--enable-rbac-authorization true \
--resource-group "${RG_NAME}" \
--location "${LOCATION}"
az role assignment create \
--assignee "${SERVICE_PRINCIPAL_ID}" \
--role "Key Vault Secrets User" \
--scope "${RG_ID}/providers/Microsoft.KeyVault/vaults/${KEYVAULT_NAME}"
根据您的应用程序,您可以使用其他限制较少的角色,例如“Key Vault Secrets Officer”和“Key Vault Administrator”。有关 Key Vault 的 Azure 内置角色的更多信息,请参阅 Microsoft 文档。
要使用客户端密钥,请在组件目录中创建一个名为 azurekeyvault.yaml
的文件。使用以下模板,填写您创建的 Microsoft Entra ID 应用程序:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: azurekeyvault
spec:
type: secretstores.azure.keyvault
version: v1
metadata:
- name: vaultName
value: "[your_keyvault_name]"
- name: azureTenantId
value: "[your_tenant_id]"
- name: azureClientId
value: "[your_client_id]"
- name: azureClientSecret
value : "[your_client_secret]"
如果您想使用保存在本地磁盘上的证书,请使用以下模板。填写您创建的 Microsoft Entra ID 应用程序的详细信息:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: azurekeyvault
spec:
type: secretstores.azure.keyvault
version: v1
metadata:
- name: vaultName
value: "[your_keyvault_name]"
- name: azureTenantId
value: "[your_tenant_id]"
- name: azureClientId
value: "[your_client_id]"
- name: azureCertificateFile
value : "[pfx_certificate_file_fully_qualified_local_path]"
在 Kubernetes 中,您将客户端密钥或证书存储到 Kubernetes 密钥存储中,然后在 YAML 文件中引用它们。在开始之前,您需要您创建的 Microsoft Entra ID 应用程序的详细信息。
使用以下命令创建一个 Kubernetes 密钥:
kubectl create secret generic [your_k8s_secret_name] --from-literal=[your_k8s_secret_key]=[your_client_secret]
[your_client_secret]
是上面生成的应用程序的客户端密钥[your_k8s_secret_name]
是 Kubernetes 密钥存储中的密钥名称[your_k8s_secret_key]
是 Kubernetes 密钥存储中的密钥键创建一个 azurekeyvault.yaml
组件文件。
组件 yaml 使用 auth
属性引用 Kubernetes 密钥存储,并且 secretKeyRef
引用存储在 Kubernetes 密钥存储中的客户端密钥。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: azurekeyvault
spec:
type: secretstores.azure.keyvault
version: v1
metadata:
- name: vaultName
value: "[your_keyvault_name]"
- name: azureTenantId
value: "[your_tenant_id]"
- name: azureClientId
value: "[your_client_id]"
- name: azureClientSecret
secretKeyRef:
name: "[your_k8s_secret_name]"
key: "[your_k8s_secret_key]"
auth:
secretStore: kubernetes
应用 azurekeyvault.yaml
组件:
kubectl apply -f azurekeyvault.yaml
使用以下命令创建一个 Kubernetes 密钥:
kubectl create secret generic [your_k8s_secret_name] --from-file=[your_k8s_secret_key]=[pfx_certificate_file_fully_qualified_local_path]
[pfx_certificate_file_fully_qualified_local_path]
是您之前获得的 PFX 文件的路径[your_k8s_secret_name]
是 Kubernetes 密钥存储中的密钥名称[your_k8s_secret_key]
是 Kubernetes 密钥存储中的密钥键创建一个 azurekeyvault.yaml
组件文件。
组件 yaml 使用 auth
属性引用 Kubernetes 密钥存储,并且 secretKeyRef
引用存储在 Kubernetes 密钥存储中的证书。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: azurekeyvault
spec:
type: secretstores.azure.keyvault
version: v1
metadata:
- name: vaultName
value: "[your_keyvault_name]"
- name: azureTenantId
value: "[your_tenant_id]"
- name: azureClientId
value: "[your_client_id]"
- name: azureCertificate
secretKeyRef:
name: "[your_k8s_secret_name]"
key: "[your_k8s_secret_key]"
auth:
secretStore: kubernetes
应用 azurekeyvault.yaml
组件:
kubectl apply -f azurekeyvault.yaml
确保您的 AKS 集群已启用托管身份,并按照使用托管身份的指南进行操作。
创建一个 azurekeyvault.yaml
组件文件。
组件 yaml 引用特定的 KeyVault 名称。您将在后续步骤中使用的托管身份必须被授予对此特定 KeyVault 实例的读取访问权限。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: azurekeyvault
spec:
type: secretstores.azure.keyvault
version: v1
metadata:
- name: vaultName
value: "[your_keyvault_name]"
应用 azurekeyvault.yaml
组件:
kubectl apply -f azurekeyvault.yaml
通过以下方式在 pod 级别创建并分配托管身份:
重要:虽然 Microsoft Entra ID pod 身份和工作负载身份都处于预览状态,但目前计划将 Microsoft Entra ID 工作负载身份推向普遍可用(稳定状态)。
创建工作负载身份后,授予其 read
权限:
apiVersion: v1
kind: Pod
metadata:
name: mydaprdemoapp
labels:
aadpodidbinding: $POD_IDENTITY_NAME
当直接使用托管身份时,您可以为应用程序关联多个身份,需要 azureClientId
来指定应使用哪个身份。
然而,当通过 Microsoft Entra ID 工作负载身份使用托管身份时,azureClientId
是不必要的且无效。要使用的 Azure 身份是从与 Azure 身份关联的服务帐户推断出来的。