3快速概览Sealed Secrets 在Sealed Secret开源项目中,你可以将你的Secret加密为一个SealedSecret,这样就可以安全地存储,甚至可以存储到公共存储库中。 SealedSecret只能由运行在目标集群中的控制器解密,其他人,甚至包括原始作者,都无法从SealedSecret获得原始的Secret。 这些加密数据被编码在SealedSecret资源中,你可以将其视为创建Secret的配方。 下面是如何使用Sealed Secrets来管理Secret的具体步骤。 5、让我们使用SealedSecret资源清单文件,在Kubernetes中创建资源。 上面步骤4中创建的SealedSecret资源清单文件可以被提交到Git代码仓库中。secrets.yaml文件可以丢弃,因为它不再需要了。
sealed-secret-example.yaml的内容如下,spec.encryptedData.secret就是加密后的内容: apiVersion: bitnami.com/v1alpha1 kind: SealedSecret 创建加密文件: $ k create -f sealed-secret-example.yaml sealedsecret.bitnami.com/secret-example created $ k kube-system ownerReferences: - apiVersion: bitnami.com/v1alpha1 controller: true kind: SealedSecret 1a1baa878299 resourceVersion: "675560" uid: e0db31ad-082b-4596-9fd0-28cc810d86f4 type: Opaque 注:SealedSecret
它被设计为两部分,一部分作为kubernetes资源控制器,运行在kubernetes集群中,该控制器始终监控 SealedSecret这个资源类型,并将它解密为Kubernetes可以识别的Secret ;另外一部分被设计为客户端工具,由用户操作将Secret类型加密为SealedSecret类型。 部署 SealedSecret 类型的资源清单到集群中 当 sealed secret container 发现 SealedSecret CRD 时,会自动将其解密为 k8s 集群可识别的 Secret lrzsz 等工具拷贝到本地; # kubeseal 自动连接 k8s 集群获取公钥 kubeseal --fetch-cert > public-cert.pem 通过如下命令讲Secret类型加密为 SealedSecret --format=yaml --cert .public-cert.pem < secret.yaml > secret-sealed.yaml 此时,Secret类型的配置清单就不需要啦,直接把SealedSecret
Sealed Secrets 引入了一个新的自定义资源 SealedSecret,控制器会 watch 这些 CRD 的变更,对 SealedSecret 资源中的加密数据进行解密,并将结果保存在 Kubernetes KubeSeal CLI 工具允许开发人员获取普通的 Kubernetes Secret 资源并将其转换为 SealedSecret 对象,可以从控制器自动获取执行加密所需的公钥,否则,公钥必须由用户提供作为输入 控制器支持命名空间级别的多租户,因为它需要明确指定目标命名空间,为命名空间 A 加密的 SealedSecret 在放置在命名空间 B 中时是无法解密的,反之亦然。 每个集群都会有自己的 SealedSecrets 控制器和私钥,这意味着如果需要将同一个 Secret 部署到多个集群,则需要创建多个 SealedSecret 对象,增加了维护开销和 GitOps 配置的复杂性
Sealed Secrets Sealed Secrets 是加密 kubernetes secret 的一种方式,充分利用 kubernetes 的高扩展性,通过 CRD 来创建一个 SealedSecret 对象,通过将加密的内容存储在扩展 SealedSecret 对象中,而 SealedSecret 只能够被运行于目标集群上的 controller 解密,其他人员和方式都无法正确解密原始数据。 SealedSecret 对象同时又会生成与其名称相同的 secret 对象,随后就可以按照常规方式使用 secret 对象了。 对象了: $ kubectl -n test apply -f test-seal-secret.yaml 接着查看 SealedSecret 和 secret: $ kubectl -n test get SealedSecret,secret sealedsecret.bitnami.com/seal-test-secret 4s secret/seal-test-secret
grep seal sealedsecrets bitnami.com true SealedSecret mario.json # 加密 $ cat mario.json | kubeseal > mario-secret.json 查看新生成的 mario-secret.json: { "kind": "SealedSecret
解决方案:将您的 Secret 加密到 SealedSecret 中,即使在公共存储库中也可以安全存储。 SealedSecret 只能由目标集群中运行的控制器解密,其他人(甚至原始作者)无法从 SealedSecret 中获得原始 Secret。 Kubeseal 将创建一个 SealedSecret 自定义资源。4.开发者将此 CR 推送到自己的 git 仓库中5.可使用 ArgoCD 等 CD 工具在集群上部署 CR。 6.控制器将检测到 SealedSecret 资源,并使用集群上的私钥对其进行解密。
你把明文Secret用公钥加密,变成一个SealedSecret,提交到仓库,只有集群里的controller才能解。
43800h \ --insecure 确认新信任锚的详细信息(加密算法、到期日期、SAN 等): step certificate inspect sample-trust.crt 创建一个 SealedSecret gitops/resources/linkerd/trust-anchor.yaml 这将覆盖本地 gitops/resources/linkerd/trust-anchor.yaml 文件中 现有的 SealedSecret
当您将 SealedSecret kubectl apply 到集群时,它会自动被解密并转换为普通 Kubernetes Secret 的 Sealed Secrets 控制器。
安全 & 合规 AuthN/Z:OIDC/MTLS,最小权限到适配器级别; 密钥:KMS/SealedSecret,定期轮换; 审计:事件溯源(NATS/Redpanda 保留)、步骤级审计入库; 合规
basic-auth.json kubeseal --format=yaml --cert=pub-cert.pem < basic-auth.json > basic-auth.yaml 这将生成一个类型为 SealedSecret
Sealed Secrets: Protecting your passwords before they reach Kubernetes SealeSecret 将 secret 资源整个加密保存为 SealedSecret
这些加密的secrets被编码到了K8s的SealedSecret资源中(可以保存到Git中)。
举例来说,你可能会在我的基础设施仓库中发现以下内容: apiVersion: bitnami.com/v1alpha1 kind: SealedSecret metadata: name: panelbear-secrets