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/tls | TLS 客户端或服务器数据 |
环境变量
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_VALUE1TLS
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 时,需要文件内容,而不是文件路径。