前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Vault 管理数据库凭据和实现 AppRole 身份验证

使用 Vault 管理数据库凭据和实现 AppRole 身份验证

作者头像
崔哥
发布2024-01-19 14:35:09
2310
发布2024-01-19 14:35:09
举报
文章被收录于专栏:崔哥的专栏崔哥的专栏

Vault 是一个开源工具,可以安全地存储和管理敏感数据,例如密码、API 密钥和证书。它使用强加密来保护数据,并提供多种身份验证方法来控制对数据的访问。Vault 可以部署在本地或云中,并可以通过 CLI、API 或 UI 进行管理。

本文将介绍 Vault 的初始化、数据库密钥引擎和身份验证方法。我们将首先介绍如何使用 UI、CLI 或 REST API 初始化 Vault。然后,我们将介绍如何使用 Vault 的数据库密钥引擎来管理数据库凭据。最后,我们将介绍如何使用 AppRole 身份验证方法来保护 Vault 中的数据。

初始化

代码语言:javascript
复制
{
  "keys": [
    "cf145f5edb6f2dfff30d30ddc0f29f44eec2dee436b8850223df36345660bfe5"
  ],
  "keys_base64": [
    "zxRfXttvLf/zDTDdwPKfRO7C3uQ2uIUCI982NFZgv+U="
  ],
  "root_token": "hvs.PGd4sn4vh80aQIMA9R6CvOwe"
}

共有以下3种方式

UI界面的方式

访问https://vault.uqiantu.com按照提示操作,最后保存json文件即可

CLI的方式

代码语言:javascript
复制
/ # export VAULT_ADDR='http://127.0.0.1:8200'
/ # vault operator init -key-shares=1 -key-threshold=1
Unseal Key 1: A15zzLWHW18dXEGp3fEW9qUcoOmcjjInXESlS4RAB4w=

Initial Root Token: hvs.F98rg41VGnQFrqIggEjRxXfF

解封
/ # vault operator unseal A15zzLWHW18dXEGp3fEW9qUcoOmcjjInXESlS4RAB4w=

环境变量VAULT_TOKEN和vault login二选一
/ # export VAULT_TOKEN="hvs.F98rg41VGnQFrqIggEjRxXfF"
/ # vault login <initial-root-token>

/ # vault secrets enable -path=kv2 kv
/ # vault kv put -mount=kv2 hello foo=world

REST API 的方式

https://developer.hashicorp.com/vault/tutorials/getting-started/getting-started-apis

初始化

代码语言:javascript
复制
curl \
    --request POST \
    --data '{"secret_shares": 1, "secret_threshold": 1}' \
    http://127.0.0.1:8200/v1/sys/init | jq

解封

代码语言:javascript
复制
curl \
    --request POST \
    --data '{"key": "{{keys_base64}}"}' \
    http://127.0.0.1:8200/v1/sys/unseal | jq

启用kv引擎

代码语言:javascript
复制
curl -X POST -H "X-Vault-Token: <root-token>" -d '{"type": "kv", "options": {"path": "kv2"}}' http://127.0.0.1:8200/v1/sys/mounts/kv2

写一条数据

代码语言:javascript
复制
curl -X POST -H "X-Vault-Token: <root-token>" -d '{"data": {"foo": "world"}}' http://127.0.0.1:8200/v1/kv2/hello

验证初始化状态

代码语言:javascript
复制
curl https://vault.uqiantu.com/v1/sys/init

数据库密钥引擎 - Mysql

https://developer.hashicorp.com/vault/docs/secrets/databases/mysql-maria#authenticating-to-cloud-dbs-via-iam

支持的插件

  • mysql-database-plugin
  • mysql-aurora-database-plugin
  • mysql-rds-database-plugin
  • mysql-legacy-database-plugin

启用数据库密钥引擎

代码语言:javascript
复制
/ # export VAULT_ADDR='http://127.0.0.1:8200'
/ # export VAULT_TOKEN="hvs.4LhxBdPNxOfgrmL7kFHUBBrx"
/ # vault secrets enable database

创建连接

代码语言:javascript
复制
vault write database/config/nextcloud \
    plugin_name=mysql-database-plugin \
    connection_url="{{username}}:{{password}}@tcp(docker-mysql:3306)/nextcloud?charset=utf8mb4&parseTime=True&loc=Local&timeout=10ms" \
    root_rotation_statements="SET PASSWORD = PASSWORD('{{password}}')" \
    allowed_roles="role1,role2" \
    username="nextcloud" \
    password="nextcloud123"

创建静态角色

代码语言:javascript
复制
vault write database/static-roles/role1 \
    db_name=nextcloud \
    username="nextcloud" \
    rotation_period=86400

创建动态角色

代码语言:javascript
复制
vault write database/roles/role2 \
   db_name=nextcloud \
   creation_statements="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}';GRANT SELECT ON *.* TO '{{name}}'@'%';" \
   revocation_statements="DROP USER '{{name}}'@'%';" \
   default_ttl="1h" \
   max_ttl="24h"

动态角色查看密码(每次都会生成一对新的)

代码语言:javascript
复制
/ # vault read database/creds/role2
Key                Value
---                -----
lease_id           database/creds/role2/eOpeXLZy6aOqUehZgVKBQjsT
lease_duration     1h
lease_renewable    true
password           XcCWxTi-Vs9NM-uxkh33
username           v-root-role2-dv19zfatqakhQ8NaPJD

静态角色的密码只能通过UI界面查看了

身份验证方法 - AppRole

https://developer.hashicorp.com/vault/docs/auth/approle

登录(获取token)

代码语言:javascript
复制
vault write auth/approle/login \
  role_id=bb871d16-adcb-257b-9599-513f8610eb62 \
  secret_id=37f8814f-8863-0139-48e5-01a9bd57ca0a

启用身份验证方法 - AppRole

代码语言:javascript
复制
/ # export VAULT_ADDR='http://127.0.0.1:8200'
/ # export VAULT_TOKEN="hvs.4LhxBdPNxOfgrmL7kFHUBBrx"
/ # vault auth enable approle

创建角色

代码语言:javascript
复制
vault write auth/approle/role/my-role \
    policies=my-role \
    secret_id_ttl=10m \
    token_num_uses=0 \
    token_ttl=20m \
    token_max_ttl=30m \
    secret_id_num_uses=0

创建策略

代码语言:javascript
复制
vault policy write my-role - <<EOF
path "secret/config" {
    capabilities = ["read"]
}

path "auth/*" {
    capabilities = ["create", "list", "read", "update"]
}
path "identity/*" {
    capabilities = ["create", "list", "read", "update"]
}

path "sys/mounts/*" {
    capabilities = ["create", "list", "read", "update"]
}

path "kv/*" {
    capabilities = ["create", "list", "read", "update"]
}
EOF

获取role-id

代码语言:javascript
复制
vault read auth/approle/role/my-role/role-id

获取secret-id

代码语言:javascript
复制
vault write -f auth/approle/role/my-role/secret-id

注意:Secret ID是一个需要被保护的值

代码语言:javascript
复制
(https://learn.hashicorp.com/tutorials/vault/secure-introduction?in=vault/app-integration#trusted-orchestrator)
// give the app access to a short-lived response-wrapping token (https://developer.hashicorp.com/vault/docs/concepts/response-wrapping).
// Read more at: https://learn.hashicorp.com/tutorials/vault/approle-best-practices?in=vault/auth-methods#secretid-delivery-best-practices
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初始化
    • UI界面的方式
      • CLI的方式
        • REST API 的方式
        • 数据库密钥引擎 - Mysql
        • 身份验证方法 - AppRole
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档