在 GKE 集群中的 pod 运行 中使用存储在 Google Secrets Manager 中的数据库密码
Using a database password stored in Google Secrets Manager from within a pod running in a GKE cluster
我是 运行 Google Kubernetes 集群中的一个应用程序。其中的一个 pod 需要访问外部管理的数据库(Google 云 SQL),并且到目前为止已经有一个用于测试目的的硬编码密码。是时候转向更安全的解决方案了,因此生成的密码现在位于我的 Google Secrets Manager 中,并已替换我数据库中的用户密码。
允许 pod 访问数据库的最有效但最安全的方法是什么?
我的部署过程如下:
- 源更改推送到源代码库
- 更改触发 Cloud Build
- Cloud Build 构建、标记和推送图像。
- Cloud Build 将新映像版本提交到源代码库
- 对 Kubernetes 基本清单的更改触发 Cloud Build
- Cloud Build 使用 Kustomize 生成新的 Kubernetes 清单并将其推送到我的 GKE
可能有一些选项可以避免密码通过您提到的某些系统(特别是 Cloud Build 和 Kustomize)。
我认为最安全的方法是使用此处描述的配置:https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine 这样您就可以完全避免使用密码并依赖 IAM 控件。
如果此设置不适合您——使用 GKE 应用中的工作负载身份直接访问 Secret Manager API 是否是一种选择?这将允许您的工作负载直接通过 IAM 控件访问 Secret Manager。 https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity
如果您的应用无法修改为对 Secret Manager 进行 API 调用,还有一个 CSI 驱动程序,以便您可以使用文件系统或环境变量:https://github.com/GoogleCloudPlatform/secrets-store-csi-driver-provider-gcp
我是 运行 Google Kubernetes 集群中的一个应用程序。其中的一个 pod 需要访问外部管理的数据库(Google 云 SQL),并且到目前为止已经有一个用于测试目的的硬编码密码。是时候转向更安全的解决方案了,因此生成的密码现在位于我的 Google Secrets Manager 中,并已替换我数据库中的用户密码。
允许 pod 访问数据库的最有效但最安全的方法是什么?
我的部署过程如下:
- 源更改推送到源代码库
- 更改触发 Cloud Build
- Cloud Build 构建、标记和推送图像。
- Cloud Build 将新映像版本提交到源代码库
- 对 Kubernetes 基本清单的更改触发 Cloud Build
- Cloud Build 使用 Kustomize 生成新的 Kubernetes 清单并将其推送到我的 GKE
可能有一些选项可以避免密码通过您提到的某些系统(特别是 Cloud Build 和 Kustomize)。
我认为最安全的方法是使用此处描述的配置:https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine 这样您就可以完全避免使用密码并依赖 IAM 控件。
如果此设置不适合您——使用 GKE 应用中的工作负载身份直接访问 Secret Manager API 是否是一种选择?这将允许您的工作负载直接通过 IAM 控件访问 Secret Manager。 https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity
如果您的应用无法修改为对 Secret Manager 进行 API 调用,还有一个 CSI 驱动程序,以便您可以使用文件系统或环境变量:https://github.com/GoogleCloudPlatform/secrets-store-csi-driver-provider-gcp