Azure Key Vault 密钥仓库

详细介绍了关于 Azure Key Vault密钥仓库组件的信息

Note

Azure Managed Identity 可用于 Kubernetes 上的 Azure Key Vault 访问, 在 这里查看说明。 Instructions here.

配置

要设置Azure Key Vault密钥仓库,请创建一个类型为secretstores.azure.keyvault的组件。 See this guide on how to create and apply a secretstore configuration. See this guide on referencing secrets to retrieve and use the secret with Dapr components.

也请参见本页面中的配置组件指南。

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: azurekeyvault
  5. namespace: default
  6. spec:
  7. type: secretstores.azure.keyvault
  8. version: v1
  9. metadata:
  10. - name: vaultName
  11. value: [your_keyvault_name]
  12. - name: spnTenantId
  13. value: "[your_service_principal_tenant_id]"
  14. - name: spnClientId
  15. value: "[your_service_principal_app_id]"
  16. value : "[pfx_certificate_contents]"
  17. - name: spnCertificateFile
  18. value : "[pfx_certificate_file_fully_qualified_local_path]"

Warning

以上示例将密钥明文存储, It is recommended to use a local secret store such as Kubernetes secret store or a local file to bootstrap secure key storage.

元数据字段规范

自托管

字段必填详情Example
vaultNameYAzure Key Vault名称“mykeyvault”
spnTenantIdYService Principal Tenant Id“spnTenantId”
spnClientIdYService Principal App Id“spnAppId”
spnCertificateFileYPFX证书文件路径, PFX证书文件路径,

对于Windows, [pfx_certificate_file_fully_qualified_local_path] 值必须使用转义的反斜杠,即双反斜杠。 例如 “C:\folder1\folder2\certfile.pfx”

对于Linux,你可以使用单斜杠。

对于Linux,你可以使用单斜杠。 例如 “/folder1/folder2/certfile.pfx” 例如 “/folder1/folder2/certfile.pfx”

请参阅配置组件了解更多详情
“C:\folder1\folder2\certfile.pfx”, “/folder1/folder2/certfile.pfx”

Kubernetes

字段必填详情Example
vaultNameYAzure Key Vault名称“mykeyvault”
spnTenantIdYService Principal Tenant Id“spnTenantId”
spnClientIdYService Principal App Id“spnAppId”
spnCertificateYPKCS 12 encoded bytes of the certificate. See configure the component for details on encoding this in a Kubernetes secret.secretKeyRef: …
See configure the component for more information.

设置Key Vault和服务主体

先决条件

步骤

  1. 登录到 Azure 并设置默认订阅

    1. # Log in Azure
    2. az login
    3. # Set your subscription to the default subscription
    4. az account set -s [your subscription id]
  2. 在一个区域中创建 Azure Key Vault

    1. az keyvault create --location [region] --name [your_keyvault] --resource-group [your resource group]
  3. 创建一个服务主体

    使用新的证书创建一个服务主体,并将为期1年的证书存储在keyvault的证书库中。 如果你想为keyvault使用现有的服务主体,而不是创建新的服务主体,你可以跳过这一步。

    1. az ad sp create-for-rbac --name [your_service_principal_name] --create-cert --cert [certificate_name] --keyvault [your_keyvault] --skip-assignment --years 1
    2. {
    3. "appId": "a4f90000-0000-0000-0000-00000011d000",
    4. "displayName": "[your_service_principal_name]",
    5. "name": "http://[your_service_principal_name]",
    6. "password": null,
    7. "tenant": "34f90000-0000-0000-0000-00000011d000"
    8. }

    Save both the appId and tenant from the output which will be used in the next step

  4. 获取 [your_service_principal_name] 的对象ID

    1. az ad sp show --id [service_principal_app_id]
    2. {
    3. ...
    4. "objectId": "[your_service_principal_object_id]",
    5. "objectType": "ServicePrincipal",
    6. ...
    7. }
  5. 授予服务主体对你的 Azure Key Vault 的 GET 权限

    1. az keyvault set-policy --name [your_keyvault] --object-id [your_service_principal_object_id] --secret-permissions get

    现在,你的服务主体已经可以访问你的keyvault,你可以配置密钥仓库组件,以使用存储在keyvault中的密钥来安全地访问其他组件。

  6. 使用 Azure 门户或 Azure CLI 从 Azure Key Vault 下载 PFX 格式的证书:

  • 使用 Azure 门户:

    转到 Azure 门户上的密钥库,然后导航到 Certificates标签下的 Settings。 找到服务主体创建时创建的证书,命名为[certificate_name],点击它。

    点击以PFX/PEM格式下载下载证书。

  • 使用 Azure CLI:

    1. az keyvault secret download --vault-name [your_keyvault] --name [certificate_name] --encoding base64 --file [certificate_name].pfx

配置组件

  1. 将下载的 PFX 证书从 Azure Keyvault 复制到你的组件目录或本地磁盘上的安全位置。

  2. 在组件目录下创建一个名为azurekeyvault.yaml的文件

    1. apiVersion: dapr.io/v1alpha1
    2. kind: Component
    3. metadata:
    4. name: azurekeyvault
    5. namespace: default
    6. spec:
    7. type: secretstores.azure.keyvault
    8. version: v1
    9. metadata:
    10. - name: vaultName
    11. value: [your_keyvault_name]
    12. - name: spnTenantId
    13. value: "[your_service_principal_tenant_id]"
    14. - name: spnClientId
    15. value: "[your_service_principal_app_id]"
    16. - name: spnCertificateFile
    17. value : "[pfx_certificate_file_fully_qualified_local_path]"

在元数据字段中填写上述设置过程中密钥库的详细信息。

在Kubernetes中,将服务主体的证书存储到Kubernetes Secret Store中,然后用Kubernetes secretstore中的这个证书启用Azure Key Vault密钥仓库。

  1. 使用以下命令创建一个kubernetes密钥:

    1. kubectl create secret generic [your_k8s_spn_secret_name] --from-file=[your_k8s_spn_secret_key]=[pfx_certificate_file_fully_qualified_local_path]
  • [pfx_certificate_file_fully_qualified_local_path]是你在上面下载的PFX证书文件的路径
  • [your_k8s_spn_secret_name]是Kubernetes密钥仓库中的密钥名称
  • [your_k8s_spn_secret_key] is secret key in Kubernetes secret store
  1. 创建一个azurekeyvault.yaml组件文件

组件yaml使用auth属性引用Kubernetes secretstore,secretKeyRef引用存储在Kubernetes secret store中的证书。

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: azurekeyvault
  5. namespace: default
  6. spec:
  7. type: secretstores.azure.keyvault
  8. version: v1
  9. metadata:
  10. - name: vaultName
  11. value: [your_keyvault_name]
  12. - name: spnTenantId
  13. value: "[your_service_principal_tenant_id]"
  14. - name: spnClientId
  15. value: "[your_service_principal_app_id]"
  16. - name: spnCertificate
  17. secretKeyRef:
  18. name: [your_k8s_spn_secret_name]
  19. key: [your_k8s_spn_secret_key]
  20. auth:
  21. secretStore: kubernetes
  1. 应用azurekeyvault.yaml组件
  1. kubectl apply -f azurekeyvault.yaml

参考资料