如何保护 kubernetes 机密?



我试图避免任何用户都可以查看的 kubernetes 秘密。 我尝试了密封的机密,但这只是隐藏要存储在版本控制中的机密。 一旦我应用了该机密,我就可以使用以下命令查看该机密。

kubectl get secret mysecret -o yaml

上面的命令仍然显示 base64 编码形式的秘密。

如何避免有人使用上述简单命令看到秘密(即使是 base64 格式(。

你可以使用 Hashicrop Vault 或 kubernetes-external-secrets (https://github.com/godaddy/kubernetes-external-secrets(。

或者,如果您只想限制,则应创建一个只读用户,并使用角色和角色绑定限制只读用户的密钥访问权限。

然后,如果有人试图描述秘密,那么它将抛出拒绝访问错误。

示例代码:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: test-secrets
namespace: default
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
- create
- delete
- apiGroups:
- ""
resources:
- pods/exec
verbs:
- create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: test-secrets
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: test-secrets
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: demo

上述角色无权访问机密。因此,演示用户的访问被拒绝。

没有办法用 Kubernetes 内部工具做到这一点。您将始终必须依赖第三方工具。

Hashicorps Vault是一个非常常用的解决方案,它非常强大,并支持一些非常好的功能,如动态机密或信封加密。但它在配置方面也可能变得非常复杂。因此,您需要自己决定需要哪种解决方案。

我建议你使用密封的秘密。它会加密您的密钥,您可以将加密的密钥安全地推送到存储库中。它没有那么大的功能列表,但它完全符合您的描述。

您可以通过 Init 容器将 Hashicrop Vault 机密注入到 Kubernetes pod 中,并使用 sidecar 容器使它们保持最新状态。

更多详情请点击此处 https://www.hashicorp.com/blog/injecting-vault-secrets-into-kubernetes-pods-via-a-sidecar/

最新更新