Secret 存储组件规范
与 Dapr 接口兼容的 Secret 存储支持
下表列出了 Dapr Secret 构建块所支持的 Secret 存储。了解如何为 Dapr 的 Secret 管理设置不同的 Secret 存储。
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 的密钥存储,需创建一个类型为 secretstores.aws.secretmanager
的组件。请参阅本指南了解如何创建和应用密钥存储配置。请参阅本指南以引用 secrets以检索和使用 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]"
规格元数据字段
字段 | 必需 | 详情 | 示例 |
---|
region | Y | 部署 AWS Secrets Manager 实例的特定 AWS 区域 | "us-east-1" |
accessKey | Y | 访问此资源的 AWS 访问密钥 | "key" |
secretKey | Y | 访问此资源的 AWS 秘密访问密钥 | "secretAccessKey" |
sessionToken | N | 要使用的 AWS 会话令牌 | "sessionToken" |
重要
当在 EKS(AWS Kubernetes)上与应用程序一起运行 Dapr sidecar(daprd)时,如果您使用的节点或 Pod 已经附加了定义访问 AWS 资源的 IAM 策略,则不应在组件规格中提供 AWS 访问密钥、秘密密钥和令牌。可选的每请求元数据属性
从此密钥存储检索密钥时,可以提供以下可选查询参数:
查询参数 | 描述 |
---|
metadata.version_id | 指定密钥的版本。 |
metadata.version_stage | 指定密钥的版本阶段。 |
创建 AWS Secrets Manager 实例
请参考 AWS 文档以设置 AWS Secrets Manager:https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html。
相关链接
2 - AWS SSM 参数存储
有关 AWS SSM 参数存储 - 机密存储组件的详细信息
组件格式
要设置 AWS SSM 参数存储的机密存储,需创建一个 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 参数存储实例的特定 AWS 区域 | "us-east-1" |
accessKey | Y | 访问此资源的 AWS 访问密钥 | "key" |
secretKey | Y | 访问此资源的 AWS 秘密访问密钥 | "secretAccessKey" |
sessionToken | N | 要使用的 AWS 会话令牌 | "sessionToken" |
prefix | N | 用于指定多个 SSM 参数存储机密存储组件的前缀。 | "prefix" |
重要
在 EKS(AWS Kubernetes)上运行 Dapr sidecar(daprd)时,如果节点/Pod 已附加了访问 AWS 资源的 IAM 策略,则不应在组件规格中提供 AWS 访问密钥、秘密密钥和令牌。创建 AWS SSM 参数存储实例
请参考 AWS 文档以设置 AWS SSM 参数存储:https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html。
相关链接
3 - Azure Key Vault 密钥存储
有关 Azure Key Vault 密钥存储组件的详细信息
组件格式
要设置 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]"
通过 Microsoft Entra ID 进行身份验证
Azure Key Vault 密钥存储组件仅支持通过 Microsoft Entra ID 进行身份验证。在启用此组件之前,请确保:
- 阅读Azure 身份验证文档。
- 创建一个 Microsoft Entra ID 应用程序(也称为服务主体)。
- 或者,为您的应用程序平台创建一个托管身份。
规范元数据字段
字段 | 必需 | 详细信息 | 示例 |
---|
vaultName | Y | Azure Key Vault 的名称 | "mykeyvault" |
azureEnvironment | N | 如果使用不同的 Azure 云,则为 Azure 环境的可选名称 | "AZUREPUBLICCLOUD" (默认值),"AZURECHINACLOUD" ,"AZUREUSGOVERNMENTCLOUD" ,"AZUREGERMANCLOUD" |
身份验证元数据 | | 有关更多信息,请参阅Azure 身份验证 | |
此外,您必须提供Azure 身份验证文档中解释的身份验证字段。
可选的每请求元数据属性
从此密钥存储检索密钥时,可以提供以下可选查询参数:
查询参数 | 描述 |
---|
metadata.version_id | 给定密钥的版本。 |
metadata.maxresults | (仅适用于批量请求)要返回的密钥数量,超过此数量后请求将被截断。 |
示例
先决条件
- Azure 订阅
- Azure CLI
- jq
- 您正在使用 bash 或 zsh shell
- 您已根据Azure 身份验证中的说明创建了一个 Microsoft Entra ID 应用程序(服务主体)。您将需要以下值:
值 | 描述 |
---|
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 的“获取密钥”权限。
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
使用 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
通过以下方式在 pod 级别创建并分配托管身份:
重要:虽然 Microsoft Entra ID pod 身份和工作负载身份都处于预览状态,但目前计划将 Microsoft Entra ID 工作负载身份推向普遍可用(稳定状态)。
创建工作负载身份后,授予其 read
权限:
apiVersion: v1
kind: Pod
metadata:
name: mydaprdemoapp
labels:
aadpodidbinding: $POD_IDENTITY_NAME
直接使用 Azure 托管身份与通过 Microsoft Entra ID 工作负载身份
当直接使用托管身份时,您可以为应用程序关联多个身份,需要 azureClientId
来指定应使用哪个身份。
然而,当通过 Microsoft Entra ID 工作负载身份使用托管身份时,azureClientId
是不必要的且无效。要使用的 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>
规格元数据字段
字段 | 必需 | 详细信息 | 示例 |
---|
type | Y | 账户类型。 | "service_account" |
project_id | Y | 与此组件关联的项目 ID。 | "project_id" |
private_key_id | N | 私钥 ID | "privatekey" |
client_email | Y | 客户端电子邮件地址 | "client@example.com" |
client_id | N | 客户端 ID | "11111111" |
auth_uri | N | 认证 URI | "https://accounts.google.com/o/oauth2/auth" |
token_uri | N | 认证令牌 URI | "https://oauth2.googleapis.com/token" |
auth_provider_x509_cert_url | N | 认证提供者的证书 URL | "https://www.googleapis.com/oauth2/v1/certs" |
client_x509_cert_url | N | 客户端的证书 URL | "https://www.googleapis.com/robot/v1/metadata/x509/<project-name>.iam.gserviceaccount.com" |
private_key | Y | 用于认证的私钥 | "privateKey" |
可选的每请求元数据属性
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 | 否 | Vault 服务器的地址。默认为 "https://127.0.0.1:8200" | "https://127.0.0.1:8200" |
caPem | 否 | 要使用的 CA 证书的内联内容,PEM 格式。如果定义,则优先于 caPath 和 caCert 。 | 见下文 |
caPath | 否 | 要使用的 CA 证书文件所在文件夹的路径,PEM 格式。如果文件夹包含多个文件,则仅使用找到的第一个文件。如果定义,则优先于 caCert 。 | "path/to/cacert/holding/folder" |
caCert | 否 | 要使用的 CA 证书的路径,PEM 格式。 | ""path/to/cacert.pem" |
skipVerify | 否 | 跳过 TLS 验证。默认为 "false" | "true" , "false" |
tlsServerName | 否 | 在 TLS 握手期间请求的服务器名称,以支持虚拟主机。此值还用于验证 Vault 服务器提供的 TLS 证书。 | "tls-server" |
vaultTokenMountPath | 是 | 包含令牌的文件路径 | "path/to/file" |
vaultToken | 是 | 令牌 用于在 Vault 中进行身份验证。 | "tokenValue" |
vaultKVPrefix | 否 | Vault 中的前缀。默认为 "dapr" | "dapr" , "myprefix" |
vaultKVUsePrefix | 否 | 如果为 false,则强制 vaultKVPrefix 为空。如果未给出值或设置为 true,则在访问 Vault 时使用 vaultKVPrefix。将其设置为 false 是为了能够使用存储的 BulkGetSecret 方法。 | "true" , "false" |
enginePath | 否 | Vault 中的引擎路径。默认为 "secret" | "kv" , "any" |
vaultValueType | 否 | 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 - Kubernetes secrets
详细介绍 Kubernetes secret 存储组件
默认 Kubernetes secret 存储组件
在 Dapr 部署到 Kubernetes 集群时,系统会自动配置一个名为 kubernetes
的 secret 存储。这个预配置的 secret 存储允许开发人员直接使用 Kubernetes 的原生 secret 存储,而无需编写、部署或维护额外的组件配置文件,这对于希望简单地访问 Kubernetes 集群中 secret 的开发人员非常有用。
您仍然可以配置一个自定义的 Kubernetes secret 存储组件定义文件(详见下文)。通过自定义定义,您可以将代码中对 secret 存储的引用与托管平台解耦,因为存储名称可以自定义,不是固定的,这样可以使代码更通用和可移植。此外,通过显式定义 Kubernetes secret 存储组件,您可以从本地 Dapr 自托管安装连接到 Kubernetes secret 存储。这需要一个有效的 kubeconfig
文件。
限制 secret 存储访问
当使用
secret 范围 限制应用程序中对 secret 的访问时,重要的是在范围定义中包含默认的 secret 存储以进行限制。
创建自定义 Kubernetes secret 存储组件
要设置 Kubernetes secret 存储,请创建一个类型为 secretstores.kubernetes
的组件。请参阅本指南了解如何创建和应用 secretstore 配置。请参阅本指南了解如何引用 secret以检索和使用 Dapr 组件的 secret。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: mycustomsecretstore
spec:
type: secretstores.kubernetes
version: v1
metadata:[]
配置元数据字段
字段 | 必需 | 详情 | 示例 | |
---|
defaultNamespace | 否 | 默认命名空间以检索 secret。如果未设置,则必须在每个请求元数据中或通过环境变量 NAMESPACE 指定 namespace | "default-ns" | |
kubeconfigPath | 否 | kubeconfig 文件的路径。如果未指定,存储将使用默认的集群内配置值 | "/path/to/kubeconfig" | |
可选的每请求元数据参数
可以为 Kubernetes secret 存储组件提供以下可选查询参数:
查询参数 | 描述 |
---|
metadata.namespace | secret 的命名空间。如果未指定,则使用 pod 的命名空间。 |
相关链接
7 - 阿里云 OOS 参数存储
详细介绍阿里云 OOS 参数存储的密钥存储组件
组件格式
要配置阿里云 OOS 参数存储的密钥存储,需创建一个类型为 secretstores.alicloud.parameterstore
的组件。请参阅本指南了解如何创建和应用密钥存储配置。请参阅本指南,了解如何在 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]"
规格元数据字段
字段 | 必需 | 详细信息 | 示例 |
---|
regionId | Y | 部署阿里云 OOS 参数存储实例的特定区域 | "cn-hangzhou" |
accessKeyId | Y | 访问此资源的阿里云访问密钥 ID | "accessKeyId" |
accessKeySecret | Y | 访问此资源的阿里云访问密钥 Secret | "accessKeySecret" |
securityToken | N | 使用的阿里云安全令牌 | "securityToken" |
可选的每请求元数据属性
在从此密钥存储检索 secret 时,可以提供以下可选查询参数:
查询参数 | 描述 |
---|
metadata.version_id | 指定 secret 密钥的版本 |
metadata.path | (仅用于批量请求)元数据中的路径。如果未设置,默认为根路径(所有 secret)。 |
创建阿里云 OOS 参数存储实例
请参考阿里云文档,了解如何设置阿里云 OOS 参数存储:https://www.alibabacloud.com/help/en/doc-detail/186828.html。
相关链接
8 - 本地环境变量(用于开发)
本地环境 secret 存储组件的详细信息
此 Dapr secret 存储组件使用本地定义的环境变量,并且不使用身份验证。
警告
这种 secret 管理方法不建议用于生产环境。组件格式
要配置本地环境变量 secret 存储,需要创建一个类型为 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_
前缀开头的变量
相关链接
9 - 本地文件(用于开发)
详细介绍本地文件 secret 存储组件
此 Dapr secret 存储组件从指定文件读取纯文本 JSON,并且不使用身份验证。
警告
不建议在生产环境中使用这种 secret 管理方法。组件格式
要设置基于本地文件的 secret 存储,请创建一个类型为 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"
规格元数据字段
字段 | 必需 | 详细信息 | 示例 |
---|
secretsFile | Y | 存储 secret 的文件路径 | "path/to/file.json" |
nestedSeparator | N | 用于展平 JSON 层次结构时的分隔符,默认为 ":" | ":" |
multiValued | N | "true" 启用 multipleKeyValuesPerSecret 行为,允许在展平 JSON 层次结构前有一级多值键/值对。默认为 "false" | "true" |
设置 JSON 文件以保存 secret
假设从 secretsFile
加载的 JSON 如下:
{
"redisPassword": "your redis password",
"connectionStrings": {
"sql": "your sql connection string",
"mysql": "your mysql connection string"
}
}
multiValued
标志决定 secret 存储是采用 名称/值行为还是每个 secret 的多个键值行为。
名称/值语义
如果 multiValued
为 false
,存储将加载 JSON 文件 并创建一个包含以下键值对的映射:
展平的键 | 值 |
---|
“redisPassword” | "your redis password" |
“connectionStrings:sql” | "your sql connection string" |
“connectionStrings:mysql” | "your mysql connection string" |
如果 multiValued
设置为 true,尝试获取 connectionStrings
键将导致 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"
}
多键值行为
如果 multiValued
为 true
,secret 存储将启用每个 secret 的多个键值行为:
键 | 值 |
---|
“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
请求会成功返回,类似于以下内容:
$ 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"
}
处理更深的嵌套级别
注意,如 规格元数据字段表 中所述,multiValued
仅处理单个嵌套级别。
假设您有一个启用了 multiValued
的本地文件 secret 存储,指向一个 secretsFile
,其中包含以下 JSON 内容:
{
"redisPassword": "your redis password",
"connectionStrings": {
"mysql": {
"username": "your mysql username",
"password": "your mysql password"
}
}
}
connectionStrings
下的键 mysql
的内容具有大于 1 的嵌套级别,并将被展平。
以下是它在内存中的样子:
键 | 值 |
---|
“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 这样的 secret 存储非常有用,它们每个 secret 键返回多个键/值对。
相关链接
10 - 华为云密钥管理服务 (CSMS)
详细介绍华为云密钥管理服务 (CSMS) - 密钥存储组件
组件格式
要配置华为云密钥管理服务 (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 | 是 | 华为云 CSMS 实例所在的具体区域 | "cn-north-4" |
accessKey | 是 | 用于访问此资源的华为云访问密钥 | "accessKey" |
secretAccessKey | 是 | 用于访问此资源的华为云密钥访问密钥 | "secretAccessKey" |
可选的每请求元数据属性
在从此密钥存储检索密钥时,可以提供以下可选查询参数:
查询参数 | 描述 |
---|
metadata.version_id | 指定密钥的版本。 |
设置华为云密钥管理服务 (CSMS) 实例
请参考华为云文档以设置华为云密钥管理服务 (CSMS):https://support.huaweicloud.com/intl/en-us/usermanual-dew/dew_01_9993.html。
相关链接