25.5. 在 Vault 中存储服务 secret
本节介绍管理员如何使用 vault 将服务机密安全地存储在中央位置。服务机密使用服务公钥加密。然后,服务使用其在域中的任何计算机上的私钥来检索机密。只有服务和管理员可以访问该 secret。
本节包括以下步骤:
在流程中:
admin
是管理服务密码的管理员http_password
是管理员创建的私有用户库的名称password.txt
是包含服务密码的文件password_vault
是为服务创建的库http/server.example.com
是正在归档密码的服务service-public.pem
是用于加密password_vault
中存储的密码的服务公钥
25.5.1. 创建用户 Vault 以存储服务密码
创建管理员拥有的用户 vault,并使用它来存储服务密码。vault 类型是标准的,它可确保管理员在访问密码库的内容时无需进行身份验证。
- 以管理员身份登录:
$ kinit admin
- 创建标准用户库:
$ ipa vault-add http_password --type standard --------------------------- Added vault "http_password" --------------------------- Vault name: http_password Type: standard Owner users: admin Vault user: admin
- 将服务密码归档到密码库中:
$ ipa vault-archive http_password --in password.txt ---------------------------------------- Archived data into vault "http_password" ----------------------------------------
警告将密码归档到密码库后,从系统中删除password.txt
。
25.5.2. 从用户 Vault 置备服务密码到服务实例
使用为服务创建的非对称密码库,将服务密码调配到服务实例。
- 以管理员身份登录:
$ kinit admin
- 获取服务实例的公钥。例如,使用
openssl
工具:- 生成
service-private.pem
私钥。$ openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)
- 根据私钥生成
service-public.pem
公钥。$ openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA key
- 创建非对称 vault 作为服务实例库,并提供公钥:
$ ipa vault-add password_vault --service HTTP/server.example.com --type asymmetric --public-key-file service-public.pem ---------------------------- Added vault "password_vault" ---------------------------- Vault name: password_vault Type: asymmetric Public key: LS0tLS1C...S0tLS0tCg== Owner users: admin Vault service: HTTP/server.example.com@EXAMPLE.COM
归档到密码库的密码将通过 密钥进行保护。 - 从管理员的专用密码库中检索服务密码,然后将其归档到新服务库中:
$ ipa vault-retrieve http_password --out password.txt ----------------------------------------- Retrieved data from vault "http_password" -----------------------------------------
$ ipa vault-archive password_vault --service HTTP/server.example.com --in password.txt ----------------------------------- Archived data into vault "password_vault" -----------------------------------
这将使用服务实例公钥加密密码。警告将密码归档到密码库后,从系统中删除password.txt
。
对需要密码的每个服务实例重复这些步骤。为每个服务实例创建新的非对称密码库。
25.5.3. 为服务实例检索服务密码
服务实例可以使用本地存储的服务私钥检索服务 vault 密码。
- 以管理员身份登录:
$ kinit admin
- 获取该服务的 Kerberos ticket:
# kinit HTTP/server.example.com -k -t /etc/httpd/conf/ipa.keytab
- 检索服务 vault 密码:
$ ipa vault-retrieve password_vault --service HTTP/server.example.com --private-key-file service-private.pem --out password.txt ------------------------------------ Retrieved data from vault "password_vault" ------------------------------------
25.5.4. 更改服务 Vault 密码
如果服务实例遭到破坏,请通过更改服务 vault 密码将它隔离,然后仅将新密码重新调配到非编译服务实例。
- 在管理员的用户库中归档新密码:
$ ipa vault-archive http_password --in new_password.txt ---------------------------------------- Archived data into vault "http_password" ----------------------------------------
这会覆盖存储在密码库中的当前密码。 - 将新密码重新调配到除被破坏的实例外的每个服务实例。
- 从管理员的 vault 中检索新密码:
$ ipa vault-retrieve http_password --out password.txt ----------------------------------------- Retrieved data from vault "http_password" -----------------------------------------
- 将新密码归档到服务实例库中:
$ ipa vault-archive password_vault --service HTTP/server.example.com --in password.txt ----------------------------------- Archived data into vault "password_vault" -----------------------------------
警告将密码归档到密码库后,从系统中删除password.txt
。