31.2. 使用 microsoft.sql.server Ansible 系统角色,使用 IdM 发布的 TLS 证书安装和配置 SQL Server
如果应用程序需要 Microsoft SQL Server 数据库,您可以使用 TLS 加密配置 SQL Server,以在应用程序和数据库之间启用安全通信。如果 SQL Server 主机是 Red Hat Enterprise Linux Identity Management (IdM)域中的成员,则 certmonger
服务可以管理证书请求和将来的续订。
通过使用 microsoft.sql.server
Ansible 系统角色,您可以自动化此过程。您可以使用 TLS 加密远程安装和配置 SQL Server,microsoft.sql.server
角色使用 certificate
Ansible 系统角色来配置 certmonger
,并从 IdM 请求证书。
根据受管主机上的 RHEL 版本,您可以安装的 SQL Server 版本会有所不同:
- RHEL 7.9: SQL Server 2017 和 2019
- RHEL 8: SQL Server 2017, 2019 和 2022
- RHEL 9.4 及更新版本:SQL Server 2022
先决条件
- 您已准备好控制节点和受管节点。
- 您以可在受管主机上运行 playbook 的用户身份登录到控制节点。
-
您用于连接到受管节点的帐户对它们具有
sudo
权限。 -
您已在控制节点上安装了
ansible-collection-microsoft-sql
软件包或microsoft.sql
集合。 - 受管节点安装了 2 GB 或更多 RAM。
- 受管节点使用以下版本之一: RHEL 7.9、RHEL 8、RHEL 9.4 或更高版本。
- 您在 Red Hat Enterprise Linux Identity Management (IdM)域中注册了受管节点。
流程
将敏感变量存储在加密的文件中:
创建 vault :
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ansible-vault create
命令打开编辑器后,以<key>: <value>
格式输入敏感数据:sa_pwd: <sa_password>
sa_pwd: <sa_password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
mssql_tls_enable: true
-
启用 TLS 加密。如果启用此设置,您还必须定义
mssql_tls_certificates
。 mssql_tls_certificates
-
包含
certificate
角色设置的 YAML 字典的列表。 name: <file_name>
-
定义证书的基本名称和私钥。
certificate
角色将证书存储在/etc/pki/tls/certs/<file_name>.crt
中,将私钥存储在/etc/pki/tls/private/<file_name>.key
文件中。 dns: <hostname_or_list_of_hostnames>
-
设置发布的证书中的 Subject Alternative Names (SAN)字段包含的主机名。您可以使用通配符(
*
)或以 YAML 列表格式指定多个名称。 ca: <ca_type>
-
定义
certificate
角色如何请求证书。如果主机在 IdM 域或self-sign
中注册了,请将变量设置为ipa
,以请求一个自签名证书。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/microsoft.sql-server/README.md
文件。验证 playbook 语法:
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在 SQL Server 主机上,使用带有
-N
参数的sqlcmd
工具来建立到 SQL server 的加密连接,并运行查询,例如:/opt/mssql-tools/bin/sqlcmd -N -S server.example.com -U "sa" -P <sa_password> -Q 'SELECT SYSTEM_USER'
$ /opt/mssql-tools/bin/sqlcmd -N -S server.example.com -U "sa" -P <sa_password> -Q 'SELECT SYSTEM_USER'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令成功,则到服务器的连接是 TLS 加密的。