密钥存储组件规格
与 Dapr 对接的受支持的密钥存储
下表列出了 Dapr 密钥管理构建块支持的密钥存储。了解如何为 Dapr 密钥管理设置不同的密钥存储。
Table headers to note:
| Header | Description | Example |
|---|
| Status | Component certification status | Alpha Beta Stable
|
| Component version | The version of the component | v1 |
| Since runtime version | The version of the Dapr runtime when the component status was set or updated | 1.11 |
Alibaba Cloud
Amazon Web Services (AWS)
Generic
Google Cloud Platform (GCP)
| Component | Multiple Key-Values Per Secret | Status | Component version | Since runtime version |
|---|
| GCP Secret Manager |  | Alpha | v1 | 1.0 |
HuaweiCloud Cloud
Microsoft Azure
| Component | Multiple Key-Values Per Secret | Status | Component version | Since runtime version |
|---|
| Azure Key Vault |  | Stable | v1 | 1.0 |
Tencent Cloud
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"
规范元数据字段
| 字段 | 必填 | 详情 | 示例 |
|---|
| region | Y | AWS Secrets Manager 实例部署到的特定 AWS 区域 | "us-east-1" |
| accessKey | Y | 用于访问此资源的 AWS Access Key | "key" |
| secretKey | Y | 用于访问此资源的 AWS Secret Access Key | "secretAccessKey" |
| sessionToken | N | 要使用的 AWS 会话令牌 | "sessionToken" |
| multipleKeyValuesPerSecret | N | 当设置为 "true" 时,允许在单个密钥中存储多个键值对。默认为 "false" | "true" |
重要
当在 EKS(AWS Kubernetes)上使用应用程序运行 Dapr 边车(daprd)时,如果您使用的节点/Pod 已附加到定义了对 AWS 资源访问权限的 IAM 策略,则不得在所使用的组件规范定义中提供 AWS access-key、secret-key 和令牌。可选的每请求元数据属性
从此密钥存储检索密钥时,可以提供以下可选查询参数:
| 查询参数 | 描述 |
|---|
metadata.version_id | 给定密钥的版本。 |
metadata.version_stage | 给定密钥的版本阶段。 |
配置每个密钥的多个键值对
multipleKeyValuesPerSecret 标志确定密钥存储是每个密钥呈现单个值还是多个键值对。
每个密钥的单个值
如果 multipleKeyValuesPerSecret 为 false(默认),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\"}"
}
每个密钥的多个键值对
如果 multipleKeyValuesPerSecret 为 true,密钥存储会解析存储在 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]"
规范元数据字段
| 字段 | 必填 | 详情 | 示例 |
|---|
| region | Y | 部署 AWS SSM Parameter Store 实例的特定 AWS 区域 | "us-east-1" |
| accessKey | Y | 用于访问此资源的 AWS Access Key | "key" |
| secretKey | Y | 用于访问此资源的 AWS Secret Access Key | "secretAccessKey" |
| sessionToken | N | 要使用的 AWS 会话令牌 | "sessionToken" |
| prefix | N | 允许您指定多个 SSM Parameter Store 密钥存储组件。 | "prefix" |
Important
当在 EKS(AWS Kubernetes)上使用您的应用程序运行 Dapr 边车(daprd)时,如果您使用的节点/pod 已经附加到定义了对 AWS 资源访问权限的 IAM 策略,则不得在正在使用的组件规范定义中提供 AWS access-key、secret-key 和 tokens。创建 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 进行身份验证。在启用此组件之前:
- 阅读 向 Azure 进行身份验证 文档。
- 创建一个 Microsoft Entra ID 应用程序(也称为服务主体)。
- 或者,为你的应用程序平台创建一个托管标识。
规范元数据字段
| Field | Required | Details | Example |
|---|
vaultName | Y | Azure Key Vault 的名称 | "mykeyvault" |
azureEnvironment | N | 如果使用不同的 Azure 云,则为 Azure 环境的可选名称 | "AZUREPUBLICCLOUD"(默认值)、"AZURECHINACLOUD"、"AZUREUSGOVERNMENTCLOUD"、"AZUREGERMANCLOUD" |
| Auth metadata | | 有关更多信息,请参阅 向 Azure 进行身份验证 | |
此外,你必须提供 向 Azure 进行身份验证 文档中说明的身份验证字段。
可选的按请求元数据属性
从此 secret store 检索 secret 时,可以提供以下 可选查询参数:
| Query Parameter | Description |
|---|
metadata.version_id | 给定 secret 密钥的版本。 |
metadata.maxresults | (仅用于批量请求)要返回的 secret 数量,超过后将截断请求。 |
示例
先决条件
- Azure 订阅
- Azure CLI
- jq
- 你正在使用 bash 或 zsh shell
- 你已按照 向 Azure 进行身份验证 中的说明创建了 Microsoft Entra ID 应用程序(服务主体)。你需要以下值:
| Value | Description |
|---|
SERVICE_PRINCIPAL_ID | 你为给定应用程序创建的服务主体的 ID |
创建 Azure Key Vault 并为服务主体授权
- 设置一个包含你创建的服务主体的变量:
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 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}"
- 使用 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 应用程序 的详细信息。
使用客户端密钥
使用以下命令创建一个 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 密钥
创建一个 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
应用 azurekeyvault.yaml 组件:
kubectl apply -f azurekeyvault.yaml
使用证书
使用以下命令创建一个 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 密钥
创建一个 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
应用 azurekeyvault.yaml 组件:
kubectl apply -f azurekeyvault.yaml
使用 Azure 托管标识
确保你的 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
通过 Microsoft Entra ID workload identity 在 Pod 级别创建并分配托管标识
创建工作负载标识后,为其授予 read 权限:
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_id | Y | 与此组件关联的项目 ID。 | "project_id" |
type | N | 账户类型。 | "service_account" |
private_key_id | N | 如果使用显式凭据,此字段应包含服务账户 JSON 文档中的 private_key_id 字段 | "privateKeyId" |
private_key | N | 如果使用显式凭据,此字段应包含服务账户 JSON 中的 private_key 字段。替换为 x509 证书 | 12345-12345 |
client_email | N | 如果使用显式凭据,此字段应包含服务账户 JSON 中的 client_email 字段 | "client@email.com" |
client_id | N | 如果使用显式凭据,此字段应包含服务账户 JSON 中的 client_id 字段 | 0123456789-0123456789 |
auth_uri | N | 如果使用显式凭据,此字段应包含服务账户 JSON 中的 auth_uri 字段 | https://accounts.google.com/o/oauth2/auth |
token_uri | N | 如果使用显式凭据,此字段应包含服务账户 JSON 中的 token_uri 字段 | https://oauth2.googleapis.com/token |
auth_provider_x509_cert_url | N | 如果使用显式凭据,此字段应包含服务账户 JSON 中的 auth_provider_x509_cert_url 字段 | https://www.googleapis.com/oauth2/v1/certs |
client_x509_cert_url | N | 如果使用显式凭据,此字段应包含服务账户 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"
规范元数据字段
| 字段 | 必填 | 详情 | 示例 |
|---|
| vaultAddr | N | Vault 服务器的地址。默认值为 "https://127.0.0.1:8200" | "https://127.0.0.1:8200" |
| caPem | N | 要使用的 CA 证书的内联内容,采用 PEM 格式。如果已定义,则优先于 caPath 和 caCert。 | 见下方 |
| caPath | N | 包含要使用的 CA 证书文件的文件夹路径,采用 PEM 格式。如果文件夹包含多个文件,将仅使用找到的第一个文件。如果已定义,则优先于 caCert。 | "path/to/cacert/holding/folder" |
| caCert | N | 要使用的 CA 证书的路径,采用 PEM 格式。 | ""path/to/cacert.pem" |
| skipVerify | N | 跳过 TLS 验证。默认值为 "false" | "true", "false" |
| tlsServerName | N | 在 TLS 握手期间请求的服务器名称,以支持虚拟托管。此值还用于验证 Vault 服务器提供的 TLS 证书。 | "tls-server" |
| vaultTokenMountPath | Y | 包含令牌的文件的路径 | "path/to/file" |
| vaultToken | Y | 用于在 Vault 中进行身份验证的 令牌。 | "tokenValue" |
| vaultKVPrefix | N | vault 中的前缀。默认值为 "dapr" | "dapr", "myprefix" |
| vaultKVUsePrefix | N | 如果为 false,vaultKVPrefix 将被强制为空。如果未给出该值或设置为 true,则在访问 vault 时使用 vaultKVPrefix。若要能够使用存储的 BulkGetSecret 方法,需要将其设置为 false。 | "true", "false" |
| enginePath | N | vault 中的引擎路径。默认值为 "secret" | "kv", "any" |
| vaultValueType | N | Vault 值类型。map 表示将值解析为 map[string]string,text 表示将值作为字符串使用。‘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。
每个密钥的多个键值
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 服务器验证
字段 skipVerify、tlsServerName、caCert、caPath 和 caPem 控制 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]"
规范元数据字段
| 字段 | 必填 | 详情 | 示例 |
|---|
| region | Y | HuaweiCloud CSMS 实例部署到的特定区域 | "cn-north-4" |
| accessKey | Y | 用于访问此资源的 HuaweiCloud Access Key | "accessKey" |
| secretAccessKey | Y | 用于访问此资源的 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:[]
规范元数据字段
| Field | Required | Details | Example | |
|---|
defaultNamespace | N | 默认用于检索密钥的命名空间。如果未设置,则必须在每个请求元数据中指定 namespace,或通过环境变量 NAMESPACE 指定 | "default-ns" | |
kubeconfigPath | N | kubeconfig 文件的路径。如果未指定,存储使用默认的集群内配置值 | "/path/to/kubeconfig" | |
可选的每次请求元数据属性
可以向 Kubernetes 密钥存储组件提供以下可选查询参数:
| Query Parameter | Description |
|---|
metadata.namespace | 密钥的命名空间。如果未指定,则使用 pod 的命名空间。 |
相关链接
8 - Local file (for Development)
Detailed information on the local file secret store component
此 Dapr 密钥存储组件从给定文件读取纯文本 JSON,不使用身份验证。
Warning
不推荐在生产环境中使用此密钥管理方式。要设置基于本地文件的密钥存储,请创建类型为 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"
| Field | Required | Details | Example |
|---|
| secretsFile | Y | 存储密钥的文件路径 | "path/to/file.json" |
| nestedSeparator | N | 在将 JSON 层级结构展平为 map 时由存储使用。默认为 ":" | ":" |
| multiValued | N | "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
如果 multiValued 为 false,存储会加载 JSON 文件 并创建具有以下键值对的 map:
| flattened key | value |
|---|
| “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
如果 multiValued 为 true,密钥存储将启用每个密钥多个键值的行为:
| key | value |
|---|
| “redisPassword” | "your redis password" |
| “connectionStrings” | {"mysql":"your mysql connection string","sql":"your sql connection string"} |
请注意,在上表中:
connectionStrings 现在是一个 JSON 对象,包含两个键:mysql 和 sql。- 来自名称/值语义映射表的
connectionStrings:sql 和 connectionStrings: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,将被展平。
它在内存中的样子如下:
| key | value |
|---|
| “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]"
规范元数据字段
| 字段 | 必填 | 详情 | 示例 |
|---|
| region | Y | 部署 Tencent SSM 实例的特定区域 | "ap-beijing-3" |
| secretId | Y | 腾讯云账户的 SecretId | "xyz" |
| secretKey | Y | 腾讯云账户的 SecretKey | "xyz" |
| token | N | 腾讯云账户的 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]"
规范元数据字段
| Field | Required | Details | Example |
|---|
| regionId | Y | AlibabaCloud OOS Parameter Store 实例部署的特定区域 | "cn-hangzhou" |
| accessKeyId | Y | 用于访问此资源的阿里云 Access Key ID | "accessKeyId" |
| accessKeySecret | Y | 用于访问此资源的阿里云 Access Key Secret | "accessKeySecret" |
| securityToken | N | 要使用的阿里云 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 管理方法。组件格式
要设置本地环境变量 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_ 前缀开头的变量
相关链接