在身份管理中使用 vault
在 IdM 中存储和管理敏感数据
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 单击顶部导航栏中的 Create。
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您的建议以改进。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 IdM 中的 vault 复制链接链接已复制到粘贴板!
了解更多身份管理(IdM)中有关 vault 的信息。
1.1. vaults 及其优势 复制链接链接已复制到粘贴板!
您可以使用身份管理(IdM)密码库来保持安全存储的所有敏感数据,但方便在一个位置。
vault 是 IdM 中的安全位置,用于存储、检索、共享和恢复 secret。机密是安全性敏感数据,通常是身份验证凭据,只有一组有限的人或实体才能访问。例如,secret 包括:
- 密码
- pins
- 私有 SSH 密钥
库与密码管理器比较。正如密码管理器一样,库通常需要用户生成并记住一个主密码,以解锁和访问存储在密码库中的任何信息。但是,用户也可以决定使用标准的密码库。标准 vault 不需要用户输入任何密码来访问密码库中存储的 secret。
IdM 中的 vaults 的目的是存储身份验证凭证,可让您向外部的非 IdM 相关的服务进行身份验证。
IdM 密码库的特征如下:
- vault 只能由 vault owner 以及 vault owner 选择为 vault 成员访问的 IdM 用户访问。另外,IdM 管理员还可以访问所有密码库。
- 如果用户没有足够的权限来创建密码库,IdM 管理员可以创建密码库,并将用户设置为其所有者。
- 用户和服务可从 IdM 域中注册的任何机器访问存储在密码库中的 secret。
- 一个 vault 只能包含一个 secret,例如一个文件。但是,该文件本身可以包含多个 secret,如密码、keytab 或证书。
Vault 只能通过 IdM 命令行(CLI)提供,不能从 IdM Web UI 中提供。
1.2. Vault 所有者、成员和管理员 复制链接链接已复制到粘贴板!
身份管理(IdM)可区分以下 vault 用户类型:
- Vault 所有者
vault 所有者是具有密码库上基本管理特权的用户或服务。例如,库所有者可以修改 vault 的属性或添加新的 vault 成员。
每个 vault 必须至少有一个所有者。库也可以有多个所有者。
- Vault 成员
- vault 成员是一种用户或服务,可访问由其他用户或服务创建的密码库。
- Vault 管理员
Vault 管理员对所有库具有不受限制的访问权限,允许执行所有 vault 操作。在 IdM 基于角色的访问控制(RBAC)的上下文中,vault 管理员是任何具有
Vault Administrators
特权的 IdM 用户。注意对称和非对称密码库 通过密码或密钥进行保护。特殊访问控制规则适用于管理员:
- 访问对称和非对称的密码库。
- 更改或重置 vault 密码或密钥。
- Vault 用户
vault 用户代表其 vault 所在的用户。
Vault 用户
信息显示在特定命令的输出中,如ipa vault-show
:ipa vault-show my_vault
$ ipa vault-show my_vault Vault name: my_vault Type: standard Owner users: user Vault user: user
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如需有关 vault 容器和用户 vaults 的详细信息,请参阅 Vault 容器。
1.3. 标准、对称和非对称库 复制链接链接已复制到粘贴板!
根据安全性和访问控制的级别,IdM 将 vault 分类到以下类型:
- 标准库
- Vault 所有者和密码库成员可以归档和检索密码库内的机密,而无需使用密码或密钥。
- 对称库
- 库中的机密通过对称密钥进行保护。Vault 所有者和成员可以归档和检索机密,但它们必须提供 vault 密码。
- 非对称库
- 库中的机密通过非对称密钥进行保护。用户使用公钥存档机密,并使用私钥检索该机密。Vault 所有者可以同时存档和检索机密。Vault 成员只能归档机密。
1.5. Vault 容器 复制链接链接已复制到粘贴板!
vault 容器是密码库的集合。下表列出了 Identity Management (IdM) 提供的默认 vault 容器。
Type | 描述 | 目的 |
---|---|---|
用户容器 | 用户的私有容器 | 为特定用户存储用户密码库 |
服务容器 | 服务的私有容器 | 为特定服务存储服务库 |
共享容器 | 用于多个用户和服务的容器 | 存储可由多个用户或服务共享的 vault |
当为用户或服务创建第一个私有密码库时,IdM 会自动为每个用户或服务创建用户和服务容器。删除用户或服务后,IdM 会删除容器及其内容。
1.6. 基本 IdM vault 命令 复制链接链接已复制到粘贴板!
您可以使用以下介绍的基本命令来管理身份管理(IdM)vault。下表 包含 ipa vault-*
命令的列表,并解释了它们的用途。
在运行任何 ipa vault-*
命令前,请将密钥恢复授权 (KRA) 证书系统组件安装到 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
命令 | 目的 |
---|---|
| 显示有关 IdM 库和示例密码库命令的概念信息。 |
|
在特定的 |
| 将用户 vault 作为 vault 成员访问时,您必须指定 vault 所有者。如果您没有指定 vault 所有者,IdM 会通知您没有找到密码库: ipa vault-show user_vault
|
| 在访问共享密码库时,您必须指定您要访问的 vault 是共享密码库。否则,IdM 会通知您没有找到密码库: ipa vault-show shared_vault
|
1.7. 在 IdM 中安装密钥恢复授权 复制链接链接已复制到粘贴板!
按照以下流程,通过在特定的 IdM 服务器上安装密钥恢复授权(KRA)证书系统(CS)组件来在身份管理(IdM)中启用 vault。
先决条件
-
您已以
root
身份登录到 IdM 服务器。 - IdM 证书颁发机构已安装在 IdM 服务器上。
-
您有
目录管理器
凭证。
步骤
安装 KRA:
ipa-kra-install
# ipa-kra-install
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要使密码库服务高可用且具有弹性,请在两个或多个 IdM 服务器上安装 KRA。维护多个 KRA 服务器可防止数据丢失。
您可以在隐藏的副本上安装 IdM 集群的第一个 KRA。但是,在在非隐藏的副本上安装 KRA 克隆前,安装额外的 KRA 克隆需要临时激活隐藏的副本。然后您可以再次隐藏原始隐藏的副本。
第 2 章 使用 IdM 用户库:存储和检索 secret 复制链接链接已复制到粘贴板!
本章论述了如何在身份管理中使用用户库。具体来说,它描述了如何在 IdM 库中存储 secret,以及用户如何检索它。用户可以通过两个不同的 IdM 客户端进行存储和检索。
先决条件
- 密钥恢复授权中心 (KRA) 证书系统组件已安装在您的 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
2.1. 在用户密码库中存储 secret 复制链接链接已复制到粘贴板!
按照以下流程创建带有一个或多个私有 vault 的 vault 容器,以安全地存储具有敏感信息的文件。在下面的流程中使用的示例中,idm_user 用户创建标准类型的密码库。标准 vault 类型可确保在访问文件时不需要 idm_user 验证。idm_user 用户可以从用户登录的任何 IdM 客户端中检索该文件。
在此过程中:
- idm_user 是想要创建密码库的用户。
- my_vault 是用于存储用户证书的 vault。
-
vault 类型
是标准的
,因此访问存档证书不需要用户提供 vault 密码。 - secret.txt 是包含用户在密码库中存储的证书的文件。
先决条件
- 您知道 idm_user 的密码。
- 已登陆到一个 IdM 客户端的主机。
步骤
为
idm_user
获取授予 ticket(TGT)的 Kerberos ticket:kinit idm_user
$ kinit idm_user
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa vault-add
命令和--type standard
选项创建标准 vault:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要确保为用户创建第一个用户 vault。为用户创建第一个库也会创建用户的 vault 容器。创建代理将成为 vault 容器的所有者。
例如,如果其他用户(如
admin
)为user1
创建第一个用户 vault,则用户的 vault 容器的拥有者也将是admin
,user1
无法访问用户 vault 或创建新用户 vault。使用
ipa vault-archive
命令和--in
选项将secret.txt
文件归档到密码库中:ipa vault-archive my_vault --in secret.txt
$ ipa vault-archive my_vault --in secret.txt ----------------------------------- Archived data into vault "my_vault" -----------------------------------
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2. 从用户 vault 检索 secret 复制链接链接已复制到粘贴板!
作为 Identity Management(IdM),您可以从用户私有 vault 中检索到您登录的任何 IdM 客户端的 secret。
按照以下流程,以名为 idm_user 的 IdM 用户身份,将名为 my_vault 的用户私有 vault 中的 secret 检索到 idm_client.idm.example.com。
先决条件
- idm_user 是 my_vault 的所有者。
- idm_user 在 vault 中已归档了一个 secret。
- my_vault 是一个标准的 vault,这意味着 idm_user 不需要输入任何密码来访问密码库的内容。
步骤
以 idm_user 身份通过 SSH 连接到 idm_client :
ssh idm_user@idm_client.idm.example.com
$ ssh idm_user@idm_client.idm.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以
idm_user
身份登录:kinit user
$ kinit user
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用带有-
out
选项的ipa vault-retrieve
命令来检索密码库的内容并将其保存到secret_exported.txt
文件中。ipa vault-retrieve my_vault --out secret_exported.txt
$ ipa vault-retrieve my_vault --out secret_exported.txt -------------------------------------- Retrieved data from vault "my_vault" --------------------------------------
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 3 章 使用 Ansible 管理 IdM 用户库:存储和检索 secret 复制链接链接已复制到粘贴板!
本章论述了如何使用 Ansible vault
模块在身份管理中管理用户密码库。具体来说,它描述了用户可以如何使用 Ansible playbook 执行以下三个连续操作:
用户可以通过两个不同的 IdM 客户端进行存储和检索。
先决条件
- 密钥恢复授权中心 (KRA) 证书系统组件已安装在您的 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
3.1. 使用 Ansible 在 IdM 中存在标准用户库 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 创建带有一个或多个私有 vault 的 vault 容器,来安全地存储敏感信息。在以下步骤中使用的示例中,idm_user 用户创建名为 my_vault 的标准类型库。标准 vault 类型可确保在访问文件时不需要 idm_user 验证。idm_user 用户可以从用户登录的任何 IdM 客户端中检索该文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您知道 idm_user 的密码。
步骤
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-standard-vault-is-present.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-standard-vault-is-present.yml ensure-standard-vault-is-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-standard-vault-is-present.yml ensure-standard-vault-is-present-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 ensure-standard-vault-is-present-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来调整文件:-
将
ipaadmin_principal
变量设置为 idm_user。 -
将
ipaadmin_password
变量设置为 idm_user 密码。 -
将
user
变量设置为 idm_user。 -
将
name
变量设置为 my_vault。 将
vault_type
变量设置为 standard。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook -v -i inventory.file ensure-standard-vault-is-present-copy.yml
$ ansible-playbook -v -i inventory.file ensure-standard-vault-is-present-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2. 使用 Ansible 将 secret 归档到 IdM 中的标准用户库中 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 将敏感信息存储在个人 vault 中。在使用的示例中,idm_user 用户在名为 my_vault 的库中归档含有名为 password.txt 的敏感信息的文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您知道 idm_user 的密码。
- idm_user 是所有者,或者至少是 my_vault 的成员用户。
- 您可以访问 password.txt,这是要在 my_vault 中存档的机密。
步骤
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-symmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-symmetric-vault.yml data-archive-in-symmetric-vault-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-symmetric-vault.yml data-archive-in-symmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 data-archive-in-standard-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来调整文件:-
将
ipaadmin_principal
变量设置为 idm_user。 -
将
ipaadmin_password
变量设置为 idm_user 密码。 -
将
user
变量设置为 idm_user。 -
将
name
变量设置为 my_vault。 -
将
in
变量设置为包含敏感信息的文件的完整路径。 将
action
变量设置为 member。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook -v -i inventory.file data-archive-in-standard-vault-copy.yml
$ ansible-playbook -v -i inventory.file data-archive-in-standard-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 使用 Ansible 从 IdM 中的标准用户库检索 secret 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 从用户个人 vault 中检索 secret。在下面的流程中使用的示例中,idm_user 用户从名为 my_vault 的标准类型的密码库中检索包含敏感数据的文件到名为 host01 的 IdM 客户端。idm_user 在访问文件时不需要进行身份验证。idm_user 可以使用 Ansible 从安装 Ansible 的任何 IdM 客户端中检索该文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您知道 idm_user 的密码。
- idm_user 是 my_vault 的所有者。
- idm_user 已将 secret 存储在 my_vault 中。
- Ansible 可以写入要检索该 secret 的 IdM 主机上的 目录。
- idm_user 可以从要检索 secret 的 IdM 主机上的 目录读取。
步骤
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-symmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/retrive-data-symmetric-vault.yml retrieve-data-symmetric-vault-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/retrive-data-symmetric-vault.yml retrieve-data-symmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并在一个明确定义的部分中提到您要检索该 secret 的 IdM 客户端。例如,要指示 Ansible 在 host01.idm.example.com 上检索 secret,请输入:
[ipahost] host01.idm.example.com
[ipahost] host01.idm.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 retrieve-data-standard-vault.yml-copy.yml 文件进行编辑。
-
通过将
hosts
变量设置为 ipahost 来调整 文件。 通过在
ipavault
任务部分设置以下变量来调整文件:-
将
ipaadmin_principal
变量设置为 idm_user。 -
将
ipaadmin_password
变量设置为 idm_user 密码。 -
将
user
变量设置为 idm_user。 -
将
name
变量设置为 my_vault。 -
将
out
变量设置为您要将 secret 导出到的文件的完整路径。 将
state
变量设置为 retrieve。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook -v -i inventory.file retrieve-data-standard-vault.yml-copy.yml
$ ansible-playbook -v -i inventory.file retrieve-data-standard-vault.yml-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 user01 身份通过
SSH
连接到 host01:ssh user01@host01.idm.example.com
$ ssh user01@host01.idm.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 Ansible playbook 文件中
out
变量指定的文件:vim /tmp/password_exported.txt
$ vim /tmp/password_exported.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可以看到导出的 secret。
其他资源
-
有关使用 Ansible 管理 IdM vaults 和用户 secret 以及 playbook 变量的更多信息,请参阅
/usr/share/doc/ansible-freeipa/
目录中的 README-vault.md Markdown 文件,和/usr/share/doc/ansible-freeipa/playbooks/vault/
目录中的示例 playbook。
第 4 章 管理 IdM 服务 secret:存储和检索 secret 复制链接链接已复制到粘贴板!
本节论述了如何在身份管理(IdM)中使用服务库安全地将服务 secret 存储在集中式位置。示例中使用的 vault 是非对称的,这意味着要使用它,管理员需要执行以下步骤:
-
使用
openssl
实用程序生成私钥。 - 根据私钥生成公钥。
当管理员将服务 secret 归档到密码库时,会用公钥对其进行加密。之后,托管在域中特定计算机上的服务实例使用私钥检索该 secret。只有服务和管理员可以访问该 secret。
如果该机密泄露,管理员可以在服务 vault 中替换它,然后将它重新分发到尚未遭入侵的服务实例。
先决条件
- 密钥恢复授权中心 (KRA) 证书系统组件已安装在您的 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
在以下步骤中:
- IdM admin 用户是管理服务密码的管理员。
- private-key-to-an-externally-certificate.pem 是包含服务 secret 的文件,本例中为外部签名证书的私钥。请勿将此私钥与用于从密码库检索机密的私钥混淆。
- secret_vault 是为该服务创建的密码库。
- HTTP/webserver.idm.example.com 是存档 secret 的服务。
- service-public.pem 是用于加密 password_vault 中存储的密码的服务公钥。
- service-private.pem 是用于解密 secret_vault 中存储的密码的服务私钥。
4.1. 将 IdM 服务 secret 存储在非对称的密码库中 复制链接链接已复制到粘贴板!
按照以下流程创建非对称 vault,并使用它来归档服务 secret。
先决条件
- 您知道 IdM 管理员密码。
步骤
以管理员身份登录:
kinit admin
$ kinit admin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取服务实例的公钥。例如,使用
openssl
工具:生成
service-private.pem
私钥。openssl genrsa -out service-private.pem 2048
$ openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据私钥生成
service-public.pem
公钥。openssl rsa -in service-private.pem -out service-public.pem -pubout
$ openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建非对称库作为服务实例 vault,并提供公钥:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 存储在密码库中的密码将通过密钥进行保护。
将服务 secret 归档到服务 vault 中:
ipa vault-archive secret_vault --service HTTP/webserver.idm.example.com --in private-key-to-an-externally-signed-certificate.pem
$ ipa vault-archive secret_vault --service HTTP/webserver.idm.example.com --in private-key-to-an-externally-signed-certificate.pem ----------------------------------- Archived data into vault "secret_vault" -----------------------------------
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会使用服务实例公钥加密机密。
为每个需要 secret 的服务实例重复这些步骤。为每个服务实例创建一个新的非对称库。
4.2. 为 IdM 服务实例检索服务 secret 复制链接链接已复制到粘贴板!
按照以下流程,使用服务实例检索使用本地存储的服务私钥的服务 vault secret。
先决条件
- 您可以访问拥有服务 vault 的服务主体的 keytab,如 HTTP/webserver.idm.example.com。
- 您已创建了非对称库,并在密码库中存档一个机密。
- 您可以访问用于检索服务 vault secret 的私钥。
步骤
以管理员身份登录:
kinit admin
$ kinit admin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为该服务获取 Kerberos ticket:
kinit HTTP/webserver.idm.example.com -k -t /etc/httpd/conf/ipa.keytab
# kinit HTTP/webserver.idm.example.com -k -t /etc/httpd/conf/ipa.keytab
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索服务 vault 密码:
ipa vault-retrieve secret_vault --service HTTP/webserver.idm.example.com --private-key-file service-private.pem --out secret.txt
$ ipa vault-retrieve secret_vault --service HTTP/webserver.idm.example.com --private-key-file service-private.pem --out secret.txt ------------------------------------ Retrieved data from vault "secret_vault" ------------------------------------
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. 在被破坏时更改 IdM 服务 vault secret 复制链接链接已复制到粘贴板!
按照以下流程,通过更改服务 vault secret 来隔离有危险的服务实例。
先决条件
- 您知道 IdM 管理员密码。
- 您已创建了非对称密码库用于存储服务机密。
- 您已生成了新 secret 并有权访问该 secret,例如在 new-private-key-to-an-externally-signed-certificate.pem 文件中。
步骤
将新 secret 存档到服务实例 vault 中:
ipa vault-archive secret_vault --service HTTP/webserver.idm.example.com --in new-private-key-to-an-externally-signed-certificate.pem
$ ipa vault-archive secret_vault --service HTTP/webserver.idm.example.com --in new-private-key-to-an-externally-signed-certificate.pem ----------------------------------- Archived data into vault "secret_vault" -----------------------------------
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会覆盖存储在密码库中的当前 secret。
- 仅检索非共享服务实例上的新机密。详情请参阅 为 IdM 服务实例检索服务 secret。
第 5 章 使用 Ansible 管理 IdM 服务库:存储和检索 secret 复制链接链接已复制到粘贴板!
本节描述了管理员如何使用 ansible-freeipa
vault
模块将服务 secret 安全地存储在集中式位置。示例中使用的 vault 是非对称的,这意味着要使用它,管理员需要执行以下步骤:
-
使用
openssl
实用程序生成私钥。 - 根据私钥生成公钥。
当管理员将服务 secret 归档到密码库时,会用公钥对其进行加密。之后,托管在域中特定计算机上的服务实例使用私钥检索该 secret。只有服务和管理员可以访问该 secret。
如果该机密泄露,管理员可以在服务 vault 中替换它,然后将它重新分发到尚未遭入侵的服务实例。
先决条件
- 以下 playbook 中定义的 ipaserver 主机类别中的所有 IdM 服务器都安装了密钥恢复授权(KRA)证书系统组件。详情请参阅在 IdM 中安装密钥恢复授权。
在流程中:
- IdM admin 用户是管理服务密码的管理员。
- private-key-to-an-externally-certificate.pem 是包含服务 secret 的文件,本例中为外部签名证书的私钥。请勿将此私钥与用于从密码库检索机密的私钥混淆。
- secret_vault 是为存储服务 secret 而创建的库。
- HTTP/webserver1.idm.example.com 是密码库的所有者服务。
- HTTP/webserver2.idm.example.com 和 HTTP/webserver3.idm.example.com 是 vault 成员服务。
- service-public.pem 是用于加密 password_vault 中存储的密码的服务公钥。
- service-private.pem 是用于解密 secret_vault 中存储的密码的服务私钥。
5.1. 使用 Ansible 在 IdM 中存在非对称服务库 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 创建一个具有一个或多个私有 vault 的服务 vault 容器,以安全地存储敏感信息。在以下流程中使用的示例中,管理员创建名为 secret_vault 的非对称库。这样可确保 vault 成员必须使用私钥进行身份验证,以检索密码库中的 secret。vault 成员能够从任何 IdM 客户端检索 文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
步骤
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-asymmetric-vault-is-present.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-asymmetric-vault-is-present.yml ensure-asymmetric-vault-is-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-asymmetric-vault-is-present.yml ensure-asymmetric-vault-is-present-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取服务实例的公钥。例如,使用
openssl
工具:生成
service-private.pem
私钥。openssl genrsa -out service-private.pem 2048
$ openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据私钥生成
service-public.pem
公钥。openssl rsa -in service-private.pem -out service-public.pem -pubout
$ openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 打开 ensure-asymmetric-vault-is-present-copy.yml 文件进行编辑。
- 添加一个任务,该任务将 service-public.pem 公钥从 Ansible 控制器复制到 server.idm.example.com 服务器。
通过在
ipavault
任务部分设置以下变量来修改文件的其余部分:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
使用
name
变量定义 vault 的名称,如 secret_vault。 -
将
vault_type
变量设置为非 对称。 -
将
service
变量设置为拥有密码库的服务主体,如 HTTP/webserver1.idm.example.com。 将
public_key_file
设置为您的公钥的位置。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2. 使用 Ansible 将成员服务添加到非对称库 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 向服务 vault 中添加成员服务,以便它们都可以检索 vault 中存储的 secret。在以下流程中使用的示例中,IdM 管理员将 HTTP/webserver2.idm.example.com 和 HTTP/webserver3.idm.example.com 服务主体添加到由 HTTP/webserver1.idm.example.com 所有的 secret_vault vault 中。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您已创建了非对称密码库用于存储服务机密。
步骤
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来修改该文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
定义您要使用
services
变量访问 vault 机密的服务。 将
action
变量设置为member
。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file add-services-to-an-asymmetric-vault.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file add-services-to-an-asymmetric-vault.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 使用 Ansible 将 IdM 服务 secret 存储在非对称库中 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 将 secret 存储在服务 vault 中,以便稍后由服务检索。在以下流程中使用的示例中,管理员将带有 secret 的 PEM
文件存储在名为 secret_vault 的非对称库中。这样可确保服务必须使用私钥进行身份验证,以便从 vault 中检索 secret。该服务能够从任何 IdM 客户端检索 文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您已创建了非对称密码库用于存储服务机密。
- secret 存储在 Ansible 控制器上,例如 /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-certificate.pem 文件中。
步骤
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来修改该文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
将
in
变量设置为 "{{ lookup('file', 'private-key-to-an-externally-certificate.pem')| b64encode }}"。这可确保 Ansible 使用私钥从 Ansible 控制器上的工作目录检索文件,而不是从 IdM 服务器检索。 将
action
变量设置为member
。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4. 使用 Ansible 为 IdM 服务检索服务 secret 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 代表服务从服务 secret 中检索 secret。在以下流程中使用的示例中,运行 playbook 从名为 secret_vault 的非对称库检索带有 secret 的 PEM
文件,并将它存储在 Ansible 清单文件中列出的所有主机上的指定位置,存为 ipaservers
。
服务使用 keytabs 验证 IdM,并使用私钥与密码库进行身份验证。您可以代表服务从安装 ansible-freeipa
的任何 IdM 客户端检索 文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您已创建了非对称密码库用于存储服务机密。
- 您已在密码库中存档了机密。
-
您已将用于检索服务 vault secret 的私钥存储在 Ansible 控制器上的
private_key_file
变量指定的位置。
步骤
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/retrieve-data-asymmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件并定义以下主机:
-
在
[ipaserver]
部分中定义您的 IdM 服务器。 -
在
[webservers]
部分中定义要检索机密的主机。例如,要指示 Ansible 获取到 webserver1.idm.example.com、webserver2.idm.example.com 和 webserver3.idm.example.com 的 secret,请输入:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在
- 打开 retrieve-data-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来修改该文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
将
private_key_file
变量设置为用于检索服务 vault secret 的私钥的位置。 -
将
out
变量设置为 IdM 服务器上您要检索 private-key-to-an-externally-certificate.pem 机密的位置,如当前工作目录。 将
action
变量设置为member
。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
在 playbook 中添加一个部分,它将从 IdM 服务器检索数据文件到 Ansible 控制器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 playbook 中添加 部分,将检索到的 private-key-to-an-externally-certificate.pem 文件从 Ansible 控制器传输到清单文件的
webservers
部分中列出的 webservers 部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. 在使用 Ansible 泄露时更改 IdM 服务 vault secret 复制链接链接已复制到粘贴板!
当服务实例有危险时,按照此流程重新使用 Ansible playbook 来更改存储在服务 vault 中的 secret。以下示例中的情景假定 webserver3.idm.example.com 上的,检索的机密已被入侵,而不是将密钥存储该 secret。在示例中,管理员重复利用在非对称库中存储一个 secret 时,以及从非对称库中获取一个 secret 导入到 IdM 主机 时使用的 Ansible playbook。在流程开始时,IdM 管理员将具有新机密的新 PEM
文件存储在非对称密码库中,对清单文件进行相应的调整,因此不会将新 secret 检索到受破坏的 Web 服务器(web 服务器 webserver3.idm.example.com ),然后重新运行这两个程序。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您知道 IdM 管理员密码。
- 您已创建了非对称密码库用于存储服务机密。
-
您已为在 IdM 主机中运行的 Web 服务生成了一个新的
httpd
密钥,以取代损坏的旧密钥。 -
新的
httpd
密钥保存在 Ansible 控制器上,例如在 /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-signed-certificate.pem 文件中。
步骤
导航到
/usr/share/doc/ansible-freeipa/playbooks/vault
目录:cd /usr/share/doc/ansible-freeipa/playbooks/vault
$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保正确定义以下主机:
-
[ipaserver]
部分中的 IdM 服务器。 要在
[webservers]
部分中检索 secret 的主机。例如,要指示 Ansible 检索到 webserver1.idm.example.com 和 webserver2.idm.example.com 的 secret,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
重要确保该列表在当前示例 webserver3.idm.example.com 中不包含已破坏的 webserver。
-
制作 data-archive-in-asymmetric-vault.yml Ansible playbook 文件的一个副本,例如:
cp data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
$ cp data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来修改该文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为 vault 的服务所有者,如 HTTP/webserver.idm.example.com。 -
将
in
变量设置为 "{{ lookup('file', 'new-private-key-to-an-externally-signed.pem')| b64encode }}".这可确保 Ansible 使用私钥从 Ansible 控制器上的工作目录检索文件,而不是从 IdM 服务器检索。 将
action
变量设置为member
。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 retrieve-data-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来修改该文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
将
private_key_file
变量设置为用于检索服务 vault secret 的私钥的位置。 -
将
out
变量设置为您要检索 new-private-key-to-an-externally-signed-certificate.pem secret 中的位置,如当前工作目录。 将
action
变量设置为member
。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
在 playbook 中添加一个部分,它将从 IdM 服务器检索数据文件到 Ansible 控制器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 playbook 中添加一个部分,将检索到的 new-private-key-to-an-externally-signed-certificate.pem 文件从 Ansible 控制器传输到清单文件的
webservers
部分中列出的 webservers:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow