Skip to Content

Secret

Secret 保存少量敏感数据,例如密码、令牌或密钥。
这些内容也可能被写入 Cargo 规格。
使用 Secret,就无需在应用代码中包含机密数据。

Secret 可独立于使用它的 Cargo 创建,因此在创建、查看和编辑 Cargo 时,Secret 及其数据泄露的风险更低。
Nanocl 和集群中的应用还可采取额外保护措施,例如避免将 Secret 数据写入非易失存储。

默认情况下,Nanocl Secret 在 API 服务器的底层数据存储 CockroachDB 中未加密保存。
拥有 API 访问权限的人可以读取或修改 Secret,能够访问 CockroachDB 的人也可以。任何有权创建 Cargo 的人,也能利用该权限读取 Secret,包括创建部署等间接访问方式。

安全使用 Secret 时,至少执行以下步骤:

  • 为 Secret 启用静态数据加密。
  • 考虑使用外部 Secret 存储提供商。

Secret 的用途

Secret 可用于以下场景:

  • 设置 Cargo 环境变量。
  • 保存 TLS 证书。

Nanocl 守护进程也使用 Secret,例如引导令牌 Secret 用于自动化节点注册。

Secret 类型

创建 Secret 时,必须通过资源的类型字段指定 Kind。
Secret 类型方便程序处理数据。

Nanocl 提供了适用于常见场景的内置类型。
这些类型的验证方式和约束各不相同。

可以为 Secret 对象的 Kind 设置自己的字符串,定义并使用自定义类型。

Nanocl 不限制类型名称。但如果使用内置类型,必须满足该类型的所有要求。

内置类型用途
nanocl.io/env环境变量数据
nanocl.io/tlsTLS 客户端或服务器数据

环境变量

Kind 为 Env 的 Secret 是可绑定到 Cargo 的环境变量。
用以下 Statefile 创建:

ApiVersion: v0.18 Secrets: - Name: env.super-secret Kind: nanocl.io/env Data: - MY_ENV=MY_VALUE - MY_ENV1=MY_VALUE1

TLS

Kind 为 Tls 的 Secret 是可绑定到代理规则(ProxyRules)的证书。
用以下 Statefile 创建:

ApiVersion: v0.18 Secrets: - Name: cert.my-certificate Kind: nanocl.io/tls Data: Certificate: | -----BEGIN CERTIFICATE----- MIIDETCCAfkCFFOJVQs8PxWlcJQDn... CertificateKey: | -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0B...

下面是 Tls 类型的完整规范:

Certificate
required
string

在 TLS Secret 中保存的证书内容。

CertificateClient
string or null

在 TLS Secret 中保存的证书颁发机构内容。

CertificateKey
required
string

在 TLS Secret 中保存的私钥内容。

Dhparam
string or null

在 TLS Secret 中保存的 DH 参数内容。

VerifyClient
boolean or null

启用或禁用客户端验证。

使用 TLS Secret 时,需要文件内容,而不是文件路径。

最后更新于