This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

密钥存储组件规格

与 Dapr 对接的受支持的密钥存储

下表列出了 Dapr 密钥管理构建块支持的密钥存储。了解如何为 Dapr 密钥管理设置不同的密钥存储。

Table headers to note:

HeaderDescriptionExample
StatusComponent certification statusAlpha
Beta
Stable
Component versionThe version of the componentv1
Since runtime versionThe version of the Dapr runtime when the component status was set or updated1.11

Alibaba Cloud

ComponentMultiple Key-Values Per SecretStatusComponent versionSince runtime version
AlibabaCloud OOS Parameter StoreMultiple Key-Values Per Secret: Not supportedAlphav11.6

Amazon Web Services (AWS)

ComponentMultiple Key-Values Per SecretStatusComponent versionSince runtime version
AWS Secrets ManagerBetav11.15
AWS SSM Parameter StoreMultiple Key-Values Per Secret: Not supportedAlphav11.1

Generic

ComponentMultiple Key-Values Per SecretStatusComponent versionSince runtime version
HashiCorp VaultStablev11.10
Kubernetes secretsStablev11.0
Local environment variablesMultiple Key-Values Per Secret: Not supportedStablev11.9
Local fileStablev11.9
OpenBaoStablev11.16

Google Cloud Platform (GCP)

ComponentMultiple Key-Values Per SecretStatusComponent versionSince runtime version
GCP Secret ManagerMultiple Key-Values Per Secret: Not supportedAlphav11.0

HuaweiCloud Cloud

ComponentMultiple Key-Values Per SecretStatusComponent versionSince runtime version
HuaweiCloud Cloud Secret Management Service (CSMS)Multiple Key-Values Per Secret: Not supportedAlphav11.8

Microsoft Azure

ComponentMultiple Key-Values Per SecretStatusComponent versionSince runtime version
Azure Key VaultMultiple Key-Values Per Secret: Not supportedStablev11.0

Tencent Cloud

ComponentMultiple Key-Values Per SecretStatusComponent versionSince runtime version
Tencent Cloud Secrets Manager (SSM)Multiple Key-Values Per Secret: Not supportedAlphav11.9

1 - AWS Secrets Manager

有关 AWS Secrets Manager 密钥存储组件的详细信息

组件格式

要设置 AWS Secrets Manager 密钥存储,请创建类型为 secretstores.aws.secretmanager 的组件。有关如何创建和应用密钥存储配置的信息,请参阅此指南。有关使用 Dapr 组件检索和使用密钥的信息,请参阅引用密钥指南。

有关身份验证相关属性的信息,请参阅向 AWS 进行身份验证

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: awssecretmanager
spec:
  type: secretstores.aws.secretmanager
  version: v1
  metadata:
  - name: region
    value: "[aws_region]"
  - name: accessKey
    value: "[aws_access_key]"
  - name: secretKey
    value: "[aws_secret_key]"
  - name: sessionToken
    value: "[aws_session_token]"
  - name: multipleKeyValuesPerSecret
    value: "false"

规范元数据字段

字段必填详情示例
regionYAWS Secrets Manager 实例部署到的特定 AWS 区域"us-east-1"
accessKeyY用于访问此资源的 AWS Access Key"key"
secretKeyY用于访问此资源的 AWS Secret Access Key"secretAccessKey"
sessionTokenN要使用的 AWS 会话令牌"sessionToken"
multipleKeyValuesPerSecretN当设置为 "true" 时,允许在单个密钥中存储多个键值对。默认为 "false""true"

可选的每请求元数据属性

从此密钥存储检索密钥时,可以提供以下可选查询参数

查询参数描述
metadata.version_id给定密钥的版本。
metadata.version_stage给定密钥的版本阶段。

配置每个密钥的多个键值对

multipleKeyValuesPerSecret 标志确定密钥存储是每个密钥呈现单个值还是多个键值对。

每个密钥的单个值

如果 multipleKeyValuesPerSecretfalse(默认),AWS Secrets Manager 将按原样返回密钥值。给定名为 database-credentials 的密钥,其包含以下 JSON 内容:

{
  "username": "admin",
  "password": "secret123",
  "host": "db.example.com"
}

请求此密钥会将整个 JSON 作为单个值返回:

$ curl http://localhost:3500/v1.0/secrets/awssecretmanager/database-credentials
{
  "database-credentials": "{\"username\":\"admin\",\"password\":\"secret123\",\"host\":\"db.example.com\"}"
}

每个密钥的多个键值对

如果 multipleKeyValuesPerSecrettrue,密钥存储会解析存储在 AWS Secrets Manager 中的 JSON 内容,并将其作为多个键值对返回。

从上方请求相同的 database-credentials 密钥时,响应会将 JSON 对象分解为各自的条目,允许将其解析为多个键值对。

$ curl http://localhost:3500/v1.0/secrets/awssecretmanager/database-credentials
{
  "username": "admin",
  "password": "secret123", 
  "host": "db.example.com"
}

创建 AWS Secrets Manager 实例

使用 AWS 文档设置 AWS Secrets Manager:https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html。

相关链接

2 - AWS SSM Parameter Store

AWS SSM Parameter Store 密钥存储组件的详细信息

组件格式

要设置 AWS SSM Parameter Store 密钥存储,需创建类型为 secretstores.aws.parameterstore 的组件。有关如何创建和应用密钥存储配置的信息,请参阅此指南。有关使用 Dapr 组件检索和使用密钥的信息,请参阅此关于引用密钥的指南。

有关身份验证相关属性的信息,请参阅向 AWS 进行身份验证

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: awsparameterstore
spec:
  type: secretstores.aws.parameterstore
  version: v1
  metadata:
  - name: region
    value: "[aws_region]"
  - name: accessKey
    value: "[aws_access_key]"
  - name: secretKey
    value: "[aws_secret_key]"
  - name: sessionToken
    value: "[aws_session_token]"
  - name: prefix
    value: "[secret_name]"

规范元数据字段

字段必填详情示例
regionY部署 AWS SSM Parameter Store 实例的特定 AWS 区域"us-east-1"
accessKeyY用于访问此资源的 AWS Access Key"key"
secretKeyY用于访问此资源的 AWS Secret Access Key"secretAccessKey"
sessionTokenN要使用的 AWS 会话令牌"sessionToken"
prefixN允许您指定多个 SSM Parameter Store 密钥存储组件。"prefix"

创建 AWS SSM Parameter Store 实例

使用 AWS 文档设置 AWS SSM Parameter Store:https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html。

相关链接

3 - Azure Key Vault secret store

关于 Azure Key Vault secret store 组件的详细信息

组件格式

要设置 Azure Key Vault secret store,需创建一个类型为 secretstores.azure.keyvault 的组件。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: azurekeyvault
spec:
  type: secretstores.azure.keyvault
  version: v1
  metadata:
  - name: vaultName # Required
    value: [your_keyvault_name]
  - name: azureEnvironment # Optional, defaults to AZUREPUBLICCLOUD
    value: "AZUREPUBLICCLOUD"
  # See authentication section below for all options
  - 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]"

使用 Microsoft Entra ID 进行身份验证

Azure Key Vault secret store 组件仅支持使用 Microsoft Entra ID 进行身份验证。在启用此组件之前:

  1. 阅读 向 Azure 进行身份验证 文档。
  2. 创建一个 Microsoft Entra ID 应用程序(也称为服务主体)。
  3. 或者,为你的应用程序平台创建一个托管标识。

规范元数据字段

FieldRequiredDetailsExample
vaultNameYAzure Key Vault 的名称"mykeyvault"
azureEnvironmentN如果使用不同的 Azure 云,则为 Azure 环境的可选名称"AZUREPUBLICCLOUD"(默认值)、"AZURECHINACLOUD""AZUREUSGOVERNMENTCLOUD""AZUREGERMANCLOUD"
Auth metadata有关更多信息,请参阅 向 Azure 进行身份验证

此外,你必须提供 向 Azure 进行身份验证 文档中说明的身份验证字段。

可选的按请求元数据属性

从此 secret store 检索 secret 时,可以提供以下 可选查询参数

Query ParameterDescription
metadata.version_id给定 secret 密钥的版本。
metadata.maxresults(仅用于批量请求)要返回的 secret 数量,超过后将截断请求。

示例

先决条件

  • Azure 订阅
  • Azure CLI
  • jq
  • 你正在使用 bash 或 zsh shell
  • 你已按照 向 Azure 进行身份验证 中的说明创建了 Microsoft Entra ID 应用程序(服务主体)。你需要以下值:
    ValueDescription
    SERVICE_PRINCIPAL_ID你为给定应用程序创建的服务主体的 ID

创建 Azure Key Vault 并为服务主体授权

  1. 设置一个包含你创建的服务主体的变量:
SERVICE_PRINCIPAL_ID="[your_service_principal_object_id]"
  1. 设置一个用于创建所有资源的位置的变量:
LOCATION="[your_location]"

(你可以通过以下命令获取完整的选项列表:az account list-locations --output tsv

  1. 创建一个资源组,并给它取一个你喜欢的名称:
RG_NAME="[resource_group_name]"
RG_ID=$(az group create \
  --name "${RG_NAME}" \
  --location "${LOCATION}" \
  | jq -r .id)
  1. 创建一个使用 Azure RBAC 进行授权的 Azure Key Vault:
KEYVAULT_NAME="[key_vault_name]"
az keyvault create \
  --name "${KEYVAULT_NAME}" \
  --enable-rbac-authorization true \
  --resource-group "${RG_NAME}" \
  --location "${LOCATION}"
  1. 使用 RBAC 为 Microsoft Entra ID 应用程序分配角色,以便它可以访问 Key Vault。 在本例中,分配 “Key Vault Secrets User” 角色,该角色具有对 Azure Key Vault 的 “Get secrets” 权限。
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”。请参阅 Microsoft Docs 以了解有关 Key Vault 的 Azure 内置角色的更多信息

配置组件

使用客户端密钥

要使用客户端密钥,请在 components 目录中创建一个名为 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 Secret Store 中,然后在 YAML 文件中引用它们。在开始之前,你需要 你创建的 Microsoft Entra ID 应用程序 的详细信息。

使用客户端密钥

  1. 使用以下命令创建一个 Kubernetes secret:

    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 secret store 中的 secret 名称
    • [your_k8s_secret_key] 是 Kubernetes secret store 中的 secret 密钥
  2. 创建一个 azurekeyvault.yaml 组件文件。

    组件 yaml 使用 auth 属性引用 Kubernetes secretstore,secretKeyRef 引用存储在 Kubernetes secret store 中的客户端密钥。

    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
    
  3. 应用 azurekeyvault.yaml 组件:

    kubectl apply -f azurekeyvault.yaml
    

使用证书

  1. 使用以下命令创建一个 Kubernetes secret:

    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 secret store 中的 secret 名称
    • [your_k8s_secret_key] 是 Kubernetes secret store 中的 secret 密钥
  2. 创建一个 azurekeyvault.yaml 组件文件。

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

    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
    
  3. 应用 azurekeyvault.yaml 组件:

    kubectl apply -f azurekeyvault.yaml
    

使用 Azure 托管标识

  1. 确保你的 AKS 集群已启用托管标识,并按照 使用托管标识的指南 进行操作。

  2. 创建一个 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]"
    
  3. 应用 azurekeyvault.yaml 组件:

    kubectl apply -f azurekeyvault.yaml
    
  4. 通过 Microsoft Entra ID workload identity 在 Pod 级别创建并分配托管标识

  5. 创建工作负载标识后,为其授予 read 权限:

    • 在你所需的 KeyVault 实例上
    • 在你的应用程序部署中。通过以下两种方式注入 Pod 标识:
      • 通过标签注释
      • 通过指定与所需工作负载标识关联的 Kubernetes 服务帐户
    apiVersion: v1
    kind: Pod
    metadata:
      name: mydaprdemoapp
      labels:
        aadpodidbinding: $POD_IDENTITY_NAME
    

直接使用 Azure 托管标识与通过 Microsoft Entra ID workload identity 使用托管标识的对比

直接使用托管标识时,你可以将多个标识与一个应用关联,需要使用 azureClientId 来指定应使用哪个标识。

但是,当通过 Microsoft Entra ID workload identity 使用托管标识时,azureClientId 不是必需的,并且不起作用。要使用的 Azure 标识是从与 Azure 标识关联的服务帐户推断出来的,该关联是通过 Azure 联合标识建立的。

参考

4 - GCP Secret Manager

GCP Secret Manager 密钥存储组件的详细信息

组件格式

要设置 GCP Secret Manager 密钥存储,需创建一个类型为 secretstores.gcp.secretmanager 的组件。请参阅此指南了解如何创建和应用密钥存储配置。请参阅关于引用密钥的指南,以在 Dapr 组件中检索和使用密钥。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: gcpsecretmanager
spec:
  type: secretstores.gcp.secretmanager
  version: v1
  metadata:
  - name: type
    value: <replace-with-account-type>
  - name: project_id
    value: <replace-with-project-id>
  - name: private_key_id
    value: <replace-with-private-key-id>
  - name: client_email
    value: <replace-with-email>
  - name: client_id
    value: <replace-with-client-id>
  - name: auth_uri
    value: <replace-with-auth-uri>
  - name: token_uri
    value: <replace-with-token-uri>
  - name: auth_provider_x509_cert_url
    value: <replace-with-auth-provider-cert-url>
  - name: client_x509_cert_url
    value: <replace-with-client-cert-url>
  - name: private_key
    value: <replace-with-private-key>

规格元数据字段

字段必填详情示例
project_idY与此组件关联的项目 ID。"project_id"
typeN账户类型。"service_account"
private_key_idN如果使用显式凭据,此字段应包含服务账户 JSON 文档中的 private_key_id 字段"privateKeyId"
private_keyN如果使用显式凭据,此字段应包含服务账户 JSON 中的 private_key 字段。替换为 x509 证书12345-12345
client_emailN如果使用显式凭据,此字段应包含服务账户 JSON 中的 client_email 字段"client@email.com"
client_idN如果使用显式凭据,此字段应包含服务账户 JSON 中的 client_id 字段0123456789-0123456789
auth_uriN如果使用显式凭据,此字段应包含服务账户 JSON 中的 auth_uri 字段https://accounts.google.com/o/oauth2/auth
token_uriN如果使用显式凭据,此字段应包含服务账户 JSON 中的 token_uri 字段https://oauth2.googleapis.com/token
auth_provider_x509_cert_urlN如果使用显式凭据,此字段应包含服务账户 JSON 中的 auth_provider_x509_cert_url 字段https://www.googleapis.com/oauth2/v1/certs
client_x509_cert_urlN如果使用显式凭据,此字段应包含服务账户 JSON 中的 client_x509_cert_url 字段https://www.googleapis.com/robot/v1/metadata/x509/<PROJECT_NAME>.iam.gserviceaccount.com

GCP 凭据

由于 GCP Secret Manager 组件使用 GCP Go 客户端库,默认情况下它使用 Application Default Credentials 进行身份验证。这在 Authenticate to GCP Cloud services using client libraries 指南中有进一步说明。 此外,请参阅如何 设置 Application Default Credentials

可选的每请求元数据属性

可以向 GCP Secret Manager 组件提供以下可选查询参数

查询参数描述
metadata.version_id给定密钥的版本。

设置 GCP Secret Manager 实例

使用 GCP 文档设置 GCP Secret Manager:https://cloud.google.com/secret-manager/docs/quickstart。

相关链接

5 - HashiCorp Vault

HashiCorp Vault 密钥存储组件的详细信息

创建 Vault 组件

要设置 HashiCorp Vault 密钥存储,需要创建一个类型为 secretstores.hashicorp.vault 的组件。请参阅此指南了解如何创建和应用密钥存储配置。请参阅引用密钥指南,了解如何使用 Dapr 组件检索和使用密钥。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: vault
spec:
  type: secretstores.hashicorp.vault
  version: v1
  metadata:
  - name: vaultAddr
    value: [vault_address] # 可选。默认值:"https://127.0.0.1:8200"
  - name: caCert # 可选。与此项或 caPath 或 caPem 二选一
    value: "[ca_cert]"
  - name: caPath # 可选。与此项或 CaCert 或 caPem 二选一
    value: "[path_to_ca_cert_file]"
  - name: caPem # 可选。与此项或 CaCert 或 CaPath 二选一
    value : "[encoded_ca_cert_pem]"
  - name: skipVerify # 可选。默认值:false
    value : "[skip_tls_verification]"
  - name: tlsServerName # 可选。
    value : "[tls_config_server_name]"
  - name: vaultTokenMountPath # 如果未提供 vaultToken 则为必填。令牌文件的路径。
    value : "[path_to_file_containing_token]"
  - name: vaultToken # 如果未提供 vaultTokenMountPath 则为必填。令牌值。
    value : "[path_to_file_containing_token]"
  - name: vaultKVPrefix # 可选。默认值:"dapr"
    value : "[vault_prefix]"
  - name: vaultKVUsePrefix # 可选。默认值:"true"
    value: "[true/false]"
  - name: enginePath # 可选。默认值:"secret"
    value: "secret"
  - name: vaultValueType # 可选。默认值:"map"
    value: "map"

规范元数据字段

字段必填详情示例
vaultAddrNVault 服务器的地址。默认值为 "https://127.0.0.1:8200""https://127.0.0.1:8200"
caPemN要使用的 CA 证书的内联内容,采用 PEM 格式。如果已定义,则优先于 caPathcaCert见下方
caPathN包含要使用的 CA 证书文件的文件夹路径,采用 PEM 格式。如果文件夹包含多个文件,将仅使用找到的第一个文件。如果已定义,则优先于 caCert"path/to/cacert/holding/folder"
caCertN要使用的 CA 证书的路径,采用 PEM 格式。""path/to/cacert.pem"
skipVerifyN跳过 TLS 验证。默认值为 "false""true", "false"
tlsServerNameN在 TLS 握手期间请求的服务器名称,以支持虚拟托管。此值还用于验证 Vault 服务器提供的 TLS 证书。"tls-server"
vaultTokenMountPathY包含令牌的文件的路径"path/to/file"
vaultTokenY用于在 Vault 中进行身份验证的 令牌"tokenValue"
vaultKVPrefixNvault 中的前缀。默认值为 "dapr""dapr", "myprefix"
vaultKVUsePrefixN如果为 false,vaultKVPrefix 将被强制为空。如果未给出该值或设置为 true,则在访问 vault 时使用 vaultKVPrefix。若要能够使用存储的 BulkGetSecret 方法,需要将其设置为 false。"true", "false"
enginePathNvault 中的引擎路径。默认值为 "secret""kv", "any"
vaultValueTypeNVault 值类型。map 表示将值解析为 map[string]stringtext 表示将值作为字符串使用。‘map’ 设置 multipleKeyValuesPerSecret 行为。text 使 Vault 充当具有名称/值语义的密钥存储。 默认值为 "map""map", "text"

可选的请求元数据属性

可以向 Hashicorp Vault 密钥存储组件提供以下可选查询参数

查询参数描述
metadata.version_id给定密钥的版本。

设置 Hashicorp Vault 实例

使用 Vault 文档设置 Hashicorp Vault:https://www.vaultproject.io/docs/install/index.html。

对于 Kubernetes,您可以使用 Helm Chart:https://github.com/hashicorp/vault-helm

每个密钥的多个键值

HashiCorp Vault 支持在一个密钥中存储多个键值。虽然这种行为最终取决于由 enginePath 配置的底层密钥引擎,但它可能会改变您从 Vault 存储和检索密钥的方式。例如,密钥中的多个键值是在 secret 引擎中公开的行为,这是由 enginePath 字段配置的默认引擎。

检索密钥时,将返回一个 JSON 有效负载,其中键名作为字段,各自的值作为值。

假设您按如下方式向 Vault 设置添加一个密钥:

vault kv put secret/dapr/mysecret firstKey=aValue secondKey=anotherValue thirdKey=yetAnotherDistinctValue

在上述示例中,密钥名为 mysecret,它下面有 3 个键值。 请注意,密钥是在 dapr 前缀下创建的,因为这是 vaultKVPrefix 标志的默认值。 从 Dapr 检索它将产生以下输出:

$ curl http://localhost:3501/v1.0/secrets/my-hashicorp-vault/mysecret
{
  "firstKey": "aValue",
  "secondKey": "anotherValue",
  "thirdKey": "yetAnotherDistinctValue"
}

请注意,密钥的名称(mysecret)在结果中未重复。

TLS 服务器验证

字段 skipVerifytlsServerNamecaCertcaPathcaPem 控制 Dapr 在使用 TLS/HTTPS 连接时是否以及如何验证 vault 服务器的证书。

内联 CA PEM caPem

caPem 字段值应该是您要使用的 PEM CA 证书的内容。鉴于 PEM 证书由多行组成,定义该值起初可能看起来具有挑战性。YAML 允许使用几种方式来定义多行值

以下是定义 caPem 字段的一种方法。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: vault
spec:
  type: secretstores.hashicorp.vault
  version: v1
  metadata:
  - name: vaultAddr
    value: https://127.0.0.1:8200
  - name: caPem
    value: |-
          -----BEGIN CERTIFICATE-----
          << 您的 PEM 文件内容的其余部分在此处,适当缩进。 >>
          -----END CERTIFICATE-----

相关链接

6 - HuaweiCloud Cloud Secret Management Service (CSMS)

关于 HuaweiCloud Cloud Secret Management Service (CSMS) 密钥存储组件的详细信息

组件格式

要设置 HuaweiCloud Cloud Secret Management Service (CSMS) 密钥存储,请创建一个类型为 secretstores.huaweicloud.csms 的组件。有关如何创建和应用密钥存储配置,请参阅此指南。有关如何使用 Dapr 组件检索和使用密钥,请参阅此引用密钥指南。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: huaweicloudcsms
spec:
  type: secretstores.huaweicloud.csms
  version: v1
  metadata:
  - name: region
    value: "[huaweicloud_region]"
  - name: accessKey
    value: "[huaweicloud_access_key]"
  - name: secretAccessKey
    value: "[huaweicloud_secret_access_key]"

规范元数据字段

字段必填详情示例
regionYHuaweiCloud CSMS 实例部署到的特定区域"cn-north-4"
accessKeyY用于访问此资源的 HuaweiCloud Access Key"accessKey"
secretAccessKeyY用于访问此资源的 HuaweiCloud Secret Access Key"secretAccessKey"

可选的请求级别元数据属性

从此密钥存储检索密钥时,可以提供以下可选查询参数

查询参数描述
metadata.version_id给定密钥的版本。

设置 HuaweiCloud Cloud Secret Management Service (CSMS) 实例

使用 HuaweiCloud 文档设置 HuaweiCloud Cloud Secret Management Service (CSMS):https://support.huaweicloud.com/intl/en-us/usermanual-dew/dew_01_9993.html。

相关链接

7 - Kubernetes 密钥

Kubernetes 密钥存储组件的详细信息

默认 Kubernetes 密钥存储组件

当 Dapr 部署到 Kubernetes 集群时,会自动创建一个名为 kubernetes 的密钥存储。这个预置的密钥存储允许您使用原生的 Kubernetes 密钥存储,无需为密钥存储编写、部署或维护组件配置文件,对于希望简单访问 Kubernetes 集群中原生存储的密钥的开发者非常有用。

仍然可以配置 Kubernetes 密钥存储的自定义组件定义文件(详情见下文)。使用自定义定义可以将代码中引用的密钥存储与托管平台解耦,因为存储名称不是固定的,可以自定义,使代码更加通用和可移植。此外,通过显式定义 Kubernetes 密钥存储组件,您可以从本地 Dapr 自托管安装连接到 Kubernetes 密钥存储。这需要有效的 kubeconfig 文件。

创建自定义 Kubernetes 密钥存储组件

要设置 Kubernetes 密钥存储,需创建类型为 secretstores.kubernetes 的组件。有关如何创建和应用密钥存储配置,请参阅此指南。有关使用 Dapr 组件检索和使用密钥,请参阅此指南引用密钥

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: mycustomsecretstore
spec:
  type: secretstores.kubernetes
  version: v1
  metadata:[]

规范元数据字段

FieldRequiredDetailsExample
defaultNamespaceN默认用于检索密钥的命名空间。如果未设置,则必须在每个请求元数据中指定 namespace,或通过环境变量 NAMESPACE 指定"default-ns"
kubeconfigPathNkubeconfig 文件的路径。如果未指定,存储使用默认的集群内配置值"/path/to/kubeconfig"

可选的每次请求元数据属性

可以向 Kubernetes 密钥存储组件提供以下可选查询参数

Query ParameterDescription
metadata.namespace密钥的命名空间。如果未指定,则使用 pod 的命名空间。

相关链接

8 - Local file (for Development)

Detailed information on the local file secret store component

此 Dapr 密钥存储组件从给定文件读取纯文本 JSON,不使用身份验证。

Component format

要设置基于本地文件的密钥存储,请创建类型为 secretstores.local.file 的组件。在 ./components 目录中创建具有以下内容的文件:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: local-secret-store
spec:
  type: secretstores.local.file
  version: v1
  metadata:
  - name: secretsFile
    value: [path to the JSON file]
  - name: nestedSeparator
    value: ":"
  - name: multiValued
    value: "false"

Spec metadata fields

FieldRequiredDetailsExample
secretsFileY存储密钥的文件路径"path/to/file.json"
nestedSeparatorN在将 JSON 层级结构展平为 map 时由存储使用。默认为 ":"":"
multiValuedN"true" 设置 multipleKeyValuesPerSecret 行为。允许在展平 JSON 层级结构之前具有一层多值键/值对。默认为 "false""true"

Setup JSON file to hold the secrets

给定以下从 secretsFile 加载的 JSON:

{
    "redisPassword": "your redis password",
    "connectionStrings": {
        "sql": "your sql connection string",
        "mysql": "your mysql connection string"
    }
}

标志 multiValued 决定密钥存储是呈现名称/值行为还是每个密钥多个键值的行为

Name/Value semantics

如果 multiValuedfalse,存储会加载 JSON 文件 并创建具有以下键值对的 map:

flattened keyvalue
“redisPassword”"your redis password"
“connectionStrings:sql”"your sql connection string"
“connectionStrings:mysql”"your mysql connection string"

如果将 multiValued 设置为 true,在键 connectionStrings 上调用 GET 请求将导致 500 HTTP 响应和错误消息。例如:

$ curl http://localhost:3501/v1.0/secrets/local-secret-store/connectionStrings
{
  "errorCode": "ERR_SECRET_GET",
  "message": "failed getting secret with key connectionStrings from secret store local-secret-store: secret connectionStrings not found"
}

此错误是预期的,因为根据上表,不存在 connectionStrings 键。

但是,请求展平键 connectionStrings:sql 将成功响应,结果如下:

$ curl http://localhost:3501/v1.0/secrets/local-secret-store/connectionStrings:sql
{
  "connectionStrings:sql": "your sql connection string"
}

Multiple key-values behavior

如果 multiValuedtrue,密钥存储将启用每个密钥多个键值的行为:

keyvalue
“redisPassword”"your redis password"
“connectionStrings”{"mysql":"your mysql connection string","sql":"your sql connection string"}

请注意,在上表中:

  • connectionStrings 现在是一个 JSON 对象,包含两个键:mysqlsql
  • 来自名称/值语义映射表connectionStrings:sqlconnectionStrings:mysql 展平键已缺失。

现在在键 connectionStrings 上调用 GET 请求将成功返回 HTTP 响应,类似于以下内容:

$ curl http://localhost:3501/v1.0/secrets/local-secret-store/connectionStrings
{
  "sql": "your sql connection string",
  "mysql": "your mysql connection string"
}

同时,现在请求展平键 connectionStrings:sql 将返回 500 HTTP 错误响应,内容如下:

{
  "errorCode": "ERR_SECRET_GET",
  "message": "failed getting secret with key connectionStrings:sql from secret store local-secret-store: secret connectionStrings:sql not found"
}

Handling deeper nesting levels

请注意,如 spec metadata fields table 中所述,multiValued 仅处理单个嵌套层级。

假设您有一个启用了 multiValued 的本地文件密钥存储,指向具有以下 JSON 内容的 secretsFile

{
    "redisPassword": "your redis password",
    "connectionStrings": {
        "mysql": {
          "username": "your mysql username",
          "password": "your mysql password"
        }
    }
}

connectionStrings 下键 mysql 的内容的嵌套层级大于 1,将被展平。

它在内存中的样子如下:

keyvalue
“redisPassword”"your redis password"
“connectionStrings”{ "mysql:username": "your mysql username", "mysql:password": "your mysql password" }

同样,请求键 connectionStrings 将成功返回 HTTP 响应,但其内容如上表所示,将是展平的:

$ curl http://localhost:3501/v1.0/secrets/local-secret-store/connectionStrings
{
  "mysql:username": "your mysql username",
  "mysql:password": "your mysql password"
}

这对于模拟 Vault 或 Kubernetes 等每个密钥键返回多个键/值对的密钥存储非常有用。

9 - OpenBao

OpenBao 密钥存储组件的详细信息。

用法

目前没有专门的 OpenBao 密钥存储。不过,你可以使用 secretstores.hashicorp.vault 组件,该组件已经过测试并被确认可以正常工作。

有关如何设置和配置密钥存储的说明,请参阅 HashiCorp Vault 指南。相同的 metadata 字段与 OpenBao 兼容。

组件示例

---
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: openbao
spec:
  # 使用来自 vault 的
  # 密钥存储提供者
  type: secretstores.hashicorp.vault
  version: v1
  metadata:
    - name: vaultAddr
      value: http://openbao.openbao.svc.cluster.local:8200
    - name: skipVerify # 可选。默认值:false
      value: true
    - name: vaultToken
      secretKeyRef:
        name: roottoken
        key: token
    - name: enginePath # 可选。默认值:"secret"
      value: "secrets"
    - name: vaultValueType # 可选。默认值:"map"
      value: "map"

更多信息

10 - Tencent Cloud Secrets Manager (SSM)

有关 Tencent Cloud Secrets Manager (SSM) 密钥存储组件的详细信息

组件格式

要设置 Tencent Cloud Secrets Manager (SSM) 密钥存储,请创建类型为 secretstores.tencentcloud.ssm 的组件。 有关如何创建和应用密钥存储配置,请参阅此指南。 有关使用 Dapr 组件检索和使用密钥,请参阅此引用密钥指南。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: tencentcloudssm
spec:
  type: secretstores.tencentcloud.ssm
  version: v1
  metadata:
  - name: region
    value: "[tencentcloud_region]"
  - name: secretId
    value: "[tencentcloud_secret_id]"
  - name: secretKey
    value: "[tencentcloud_secret_key]"
  - name: token
    value: "[tencentcloud_secret_token]"

规范元数据字段

字段必填详情示例
regionY部署 Tencent SSM 实例的特定区域"ap-beijing-3"
secretIdY腾讯云账户的 SecretId"xyz"
secretKeyY腾讯云账户的 SecretKey"xyz"
tokenN腾讯云账户的 Token。仅在使用临时凭证时需要""

可选的每次请求元数据属性

从此密钥存储检索密钥时,可以提供以下可选查询参数

查询参数描述
metadata.version_id给定密钥的版本。

设置 Tencent Cloud Secrets Manager (SSM)

使用 Tencent Cloud 文档设置 Tencent Cloud Secrets Manager (SSM):https://www.tencentcloud.com/products/ssm

相关链接

11 - 阿里云 OOS Parameter Store

关于阿里云 OOS Parameter Store secret store 组件的详细信息

组件格式

若要设置阿里云 OOS Parameter Store secret store,需创建一个类型为 secretstores.alicloud.parameterstore 的组件。有关如何创建和应用 secretstore 配置,请参阅此指南。有关检索和使用 secret 与 Dapr 组件的指南,请参阅此引用 secret 指南。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: alibabacloudparameterstore
spec:
  type: secretstores.alicloud.parameterstore
  version: v1
  metadata:
  - name: regionId
    value: "[alicloud_region_id]"
  - name: accessKeyId 
    value: "[alicloud_access_key_id]"
  - name: accessKeySecret
    value: "[alicloud_access_key_secret]"
  - name: securityToken
    value: "[alicloud_security_token]"

规范元数据字段

FieldRequiredDetailsExample
regionIdYAlibabaCloud OOS Parameter Store 实例部署的特定区域"cn-hangzhou"
accessKeyIdY用于访问此资源的阿里云 Access Key ID"accessKeyId"
accessKeySecretY用于访问此资源的阿里云 Access Key Secret"accessKeySecret"
securityTokenN要使用的阿里云 Security Token"securityToken"

可选的每请求元数据属性

从此 secret store 检索 secret 时,可以提供以下可选查询参数

查询参数描述
metadata.version_id给定 secret 密钥的版本
metadata.path(仅用于批量请求)元数据中的路径。如果未设置,默认为根路径(所有 secret)。

创建阿里云 OOS Parameter Store 实例

使用阿里云文档设置阿里云 OOS Parameter Store:https://www.alibabacloud.com/help/en/doc-detail/186828.html。

相关链接

12 - 本地环境变量(用于开发)

本地环境变量 secret store 组件的详细信息

此 Dapr secret store 组件使用本地定义的环境变量,不使用身份验证。

组件格式

要设置本地环境变量 secret store,请创建一个类型为 secretstores.local.env 的组件。在 ./components 目录中创建包含以下内容的文件:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: envvar-secret-store
spec:
  type: secretstores.local.env
  version: v1
  metadata:
    # - name: prefix
    #   value: "MYAPP_"

规范元数据字段

字段必填详情示例
prefix如果设置,则将操作限制为具有给定前缀的环境变量。前缀将从返回的 secret 名称中移除。
在 Windows 上匹配不区分大小写,在所有其他操作系统上匹配区分大小写。
"MYAPP_"

注意事项

出于安全原因,此组件不能用于访问以下环境变量:

  • APP_API_TOKEN
  • 任何名称以 DAPR_ 前缀开头的变量

相关链接