The documentation you are viewing is for Dapr v1.5 which is an older version of Dapr. For up-to-date documentation, see the latest version.
Azure Key Vault 密钥仓库
配置
要设置Azure Key Vault密钥仓库,请创建一个类型为secretstores.azure.keyvault
的组件。 有关如何创建和应用密钥库配置,请参阅本指南。 请参阅本指南 引用Secret 在 Dapr 组件中检索和使用的 Secret。
也请参见本页面中的配置组件指南。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: azurekeyvault
namespace: default
spec:
type: secretstores.azure.keyvault
version: v1
metadata:
- name: vaultName
value: [your_keyvault_name]
- name: spnTenantId
value: "[your_service_principal_tenant_id]"
- name: spnClientId
value: "[your_service_principal_app_id]"
value : "[pfx_certificate_contents]"
- name: spnCertificateFile
value : "[pfx_certificate_file_fully_qualified_local_path]"
使用 Azure AD 进行身份验证
Azure Key Vault 密钥仓库组件仅支持使用 Azure AD 进行身份验证。 在启用此组件之前,请确保已经阅读了Azure 身份验证文档,并创建了Azure AD应用程序(也称为服务委托)。 或者,请确保已为应用程序平台创建了托管标识。
元数据字段规范
字段 | 必填 | 详情 | 示例 |
---|---|---|---|
vaultName |
Y | Azure Key Vault名称 | "mykeyvault" |
azureEnvironment |
N | Azure 环境的可选名称(如果使用其他 Azure 云) | "AZUREPUBLICCLOUD" (default value), "AZURECHINACLOUD" , "AZUREUSGOVERNMENTCLOUD" , "AZUREGERMANCLOUD" |
此外,必须提供身份验证字段,如 Azure 身份验证文档中所述。
创建 Azure Key Vault 并授权服务主体
先决条件
- Azure Subscription
- Azure CLI
- jq
- 下面的脚本针对 bash 或 zsh shell 进行了优化
请确保已按照 Azure 身份验证文档中的步骤创建 Azure AD 应用程序(也称为服务主体)。 您将需要下列值:
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)
- 创建 Azure Key Vault(使用 Azure RBAC 进行授权):
KEYVAULT_NAME="[key_vault_name]"
az keyvault create \
--name "${KEYVAULT_NAME}" \
--enable-rbac-authorization true \
--resource-group "${RG_NAME}" \
--location "${LOCATION}"
- 使用 RBAC,将角色分配给 Azure AD 应用程序,以便它可以访问 Key Vault 。
在这种情况下,请分配"Key Vault Crypto Officer"角色,该角色具有广泛的访问权限; 也可以使用其他限制性更强的角色,具体取决于您的应用程序。
az role assignment create \
--assignee "${SERVICE_PRINCIPAL_ID}" \
--role "Key Vault Crypto Officer" \
--scope "${RG_ID}/providers/Microsoft.KeyVault/vaults/${KEYVAULT_NAME}"
配置组件
若要使用 client secret,请在组件目录中创建一个名为 azurekeyvault.yaml
的文件,并按照 Azure 身份验证文档填写创建的 Azure AD 应用程序:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: azurekeyvault
namespace: default
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]"
如果您想使用本地磁盘上保存的 证书 ,则使用此模板, 填写您按照 Azure身份验证 文档创建的 Azure AD 应用程序的详细信息:
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: azurekeyvault
namespace: default
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 文件中的那些内容。 您将需要在 身份验证Azure 文档后创建的 Azure AD应用程序的详细信息。
使用 客户端密钥:
-
使用以下命令创建一个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 secretstore,secretKeyRef
引用存储在Kubernetes secret store中的客户端密钥。apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: azurekeyvault namespace: default 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 secretstore,secretKeyRef
引用存储在 Kubernetes 密钥存储中的证书。apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: azurekeyvault namespace: default 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
使用 Azure managed identity:
-
确保您的AKS集群启用了托管标识,并遵照了 使用托管标识指南。
-
创建
azurekeyvault.yaml
组件文件。组件yaml应用特定的 KeyVault 名称。 在后续步骤中使用的托管标识必须被授予该 KeyVault 实例的读权限。
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: azurekeyvault namespace: default spec: type: secretstores.azure.keyvault version: v1 metadata: - name: vaultName value: "[your_keyvault_name]"
-
应用
azurekeyvault.yaml
组件:kubectl apply -f azurekeyvault.yaml
-
按照 本指南 创建和使用托管标识/Pod标识。 创建 AKS Pod 标识后, 授予该标识对所需的 KeyVault 实例的读权限,最后,在您的应用程序 deployment 中通过标签注解注入 Pod 标识:
apiVersion: v1
kind: Pod
metadata:
name: mydaprdemoapp
labels:
aadpodidbinding: $POD_IDENTITY_NAME
参考资料
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.