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 格式。如果定义,则优先于 caPathcaCert 见下文
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]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-----          

相关链接