暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译文] 在 Kubernetes 和 Hashicorp Cloud Platform Vault 上使用 MySQL 动态创建用户

原创 Sergey Pronin 2021-09-23
1639

您可能已经看过这篇文档,它描述了HashiCorp VaultPercona Distribution for MySQL Operator之间的集成,以便为自我管理的 Vault 部署启用静态数据加密。2021 年 4 月,HashiCorp 宣布了一项完全托管的产品HashiCorp Cloud Platform Vault (HCP Vault),可简化 Vault 的部署和管理。

考虑到这一点,我将讨论 Percona 和 HCP Vault 之间的集成,以便为 MySQL 提供动态用户创建。

如果没有动态凭证,组织很容易因为机密在不同系统、文件和存储库中蔓延而受到破坏。动态凭据通过为每个登录名或服务帐户使用唯一的密码提供了一种连接到数据库的安全方式。借助 Vault,这些即时凭据可以安全存储,并且还可以为其设置生命周期。

目标

我的目标是通过 Hashicorp Vault 为部署在 Kubernetes 中的 MySQL 集群上的用户提供动态凭证。

image.png

  1. Percona Operator 部署 Percona XtraDB Cluster 和 HAProxy
  2. HashiCorp Vault 通过 HAProxy 连接到 MySQL 并创建具有特定授权的用户
  3. 应用程序或用户可以使用 Vault 创建的动态凭据连接到 myapp 数据库

在你开始之前

先决条件

  • HCP 保险柜帐户
  • Kubernetes集群

联网

现在,HCP 在私有虚拟专用网络中的 Hashicorp 亚马逊帐户中部署 Vault。现在要在 Vault 和您的应用程序之间建立私有连接,您需要有一个 AWS 账户、VPC 以及对等或 Transit Gateway 连接:

image.png

为了在这篇博文中简单起见,我将公开 Vault,不推荐用于生产,但允许我从任何地方配置 Vault。

更多的云和网络配置正在进行中。敬请关注HashiCorp 新闻。

全部设置

MySQL

要在 Kubernetes 上部署 Percona Distribution for MySQL,请遵循我们的文档。唯一的要求是通过公共负载均衡器公开 HAProxy。以下字段应在自定义资源 - deploy / cr .yaml 中正确设置:

为简单起见,我在此GitHub 存储库共享了两个必需的 YAML 。部署它们将在公开的 Kubernetes 上配置 Percona XtraDB 集群:

kubectl apply -f bundle.yaml kubectl apply -f cr.yaml

集群准备好后,获取公共地址:

$ kubectl get pxc NAME       ENDPOINT       STATUS   PXC   PROXYSQL   HAPROXY   AGE cluster1   35.223.41.79   ready    3                3         4m43s

记住 ENDPOINT 地址,我们需要在下面使用它来配置 HCP Vault。

创建用户和数据库

我将创建一个 MySQL 用户,HCP Vault 将使用它来动态创建用户。此外,还有一个名为“myapp”的空数据库,这些用户将有权访问该数据库。

从 Secret 对象中获取当前的 root 密码:

$ kubectl get secrets my-cluster-secrets -o yaml | awk '$1~/root/ {print $2}' | base64 --decode && echo Jw6OYIsUJeAQQapk

直接连接到 MySQL 或通过在容器中执行:

kubectl exec -ti cluster1-pxc-0 -c pxc bash mysql -u root -p -h 35.223.41.79

创建数据库用户和数据库:

mysql> create user hcp identified by 'superduper'; Query OK, 0 rows affected (0.04 sec) mysql> grant select, insert, update, delete, drop, create, alter, create user on *.* to hcp with grant option; Query OK, 0 rows affected (0.04 sec) mysql> flush privileges; Query OK, 0 rows affected (0.02 sec) mysql> create database myapp; Query OK, 1 row affected (0.02 sec)

Hashicorp 云平台保险库

在 HCP 上设置 Vault 只需单击几下即可,此处介绍了该过程。

正如我之前提到的,为了简单起见,HCP Vault 将可以公开访问。为此,请转到 HCP UI 中的 Vault 集群,单击“管理和编辑配置”:

image.png
启用旋钮以公开显示集群:
image.png

现在让我们获取 Vault 的管理员令牌。导航到 Vault 集群的概览仪表板,然后单击Generate token:

image.png

保险库 CLI

Vault 可公开访问,您拥有管理员令牌。让我们使用 vault CLI 工具对其进行配置。按照此处的手册进行安装。

尝试登录:

export VAULT_ADDR=”https://vault-cluster.SOMEURL.hashicorp.cloud:8200” export VAULT_NAMESPACE="admin" vault login Token (will be hidden): Success! You are now authenticated. The token information displayed below is already stored in the token helper. You do NOT need to run "vault login" again. Future Vault requests will automatically use this token. ...

连接点

是时候将 Vault 与 Kubernetes 中的 MySQL 数据库连接起来并开始配置用户了。我们将依赖Vault 的 Databases Secrets 引擎

1. 启用数据库机密引擎:

vault secrets enable database

2. 将 Vault 指向 MySQL 并存储配置:

vault write database/config/myapp plugin_name=mysql-database-plugin \ connection_url=”{{username}}:{{password}}@tcp(35.223.41.79:3306)/” \ allowed_roles=”mysqlrole” \ username=”hcp” \ password=”superduper” Success! Data written to: database/config/myapp

3. 创建角色:

vault write database/roles/mysqlrole db_name=myapp \ creation_statements=”CREATE USER ‘{{name}}’@’%’ IDENTIFIED BY ‘{{password}}’; GRANT select, insert, update, delete, drop, create, alter ON myapp.* TO ‘{{name}}’@’%’;” \ default_ttl=”1h” \ max_ttl=”24h” Success! Data written to: database/roles/mysqlrole

此角色执行以下操作:

  • 使用随机名称和密码创建用户
  • 用户已授予 myapp 数据库
  • 默认情况下,用户存在一小时,但生存时间可以延长到 24 小时。

现在创建临时用户只需执行以下操作:

vault read database/creds/mysqlrole Key                Value ---                ----- lease_id           database/creds/mysqlrole/MpO5oMsd1A0uyXT8d7R6sxVe.slbaC                                                                                   lease_duration     1h lease_renewable    true password           Gmx6fv89BL4qHbFokG-p username           v-token-hcp--mysqlrole-EMt7xeECd

结论

动态凭证可以成为贵公司安全框架的重要组成部分,以避免因机密蔓延、数据泄露和维护数据完整性和一致性而造成的破坏。您可以类似地将 HashiCorp Vault 与任何 Percona Kubernetes Operator 集成 - 适用于 MongoDB、MySQL 和 PostgreSQL。

我们鼓励您尝试一下,以确保您的数据安全。如果您遇到任何问题,请将该主题提交给我们的社区论坛,让我们知道。

MySQL Operator 的 Percona 发行版

该Percona的分布为MySQL运营商简化运行于Kubernetes Percona的XtraDB集群和天-1和第2天的操作提供了自动化。它基于 Kubernetes API 并支持高可用性环境。无论在何处使用,Operator 都会创建一个成员,该成员与使用相同 Operator 创建的其他成员相同。这为轻松构建测试环境或部署符合 Percona 专家推荐最佳实践的可重复、一致的数据库环境提供了有保证的稳定性水平。

Hashicorp 金库
Hashicorp Vault是一种基于身份的安全解决方案,它通过开源和企业产品来保护、存储和严格控制对令牌、密码和其他机密的访问,以实现自我管理的安全自动化。2021 年 4 月,HashiCorp 宣布了一项完全托管的产品HashiCorp Cloud Platform Vault (HCP Vault),可简化 Vault 的部署和管理。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论