一、序言
在部署拓扑和方案方面,HP Anyware Manager 非常灵活,可以部署在单个主机中,也可以部署在多个主机中,具体取决于组织的网络环境和运营要求。
二、单主机部署
2.1 描述
此部署配置是当 Anyware Manager 和 MongoDB 以及 Vault 服务器在单个主机上运行时,可将其部署在任何云或本地的虚拟机上。
可以使用与 Anyware Manager 进行初始原型设计或小规模生产部署。如果用于生产环境,则必须确保有备份和恢复过程。这对于最大限度地减少数据丢失和最大限度地减少停机时间是必要的。
2.2 虚拟机系统需求
- 操作系统:RHEL 8 和 Rocky Linux 8。
- 最低 8 GB RAM
- 4 CPU
- 60 GB 存储空间:如果您使用 LVM并/var安装在单独的卷上,则该卷必须具有 30GB 或更多空间才能成功安装并且 Anyware Manager 才能正常运行。
- Active Directory 权限设置为列出内容和读取所有属性。如果不设置这些权限,您将无法连接到特定的远程工作站。
- VM的主机名应符合RFC1123中定义的标准,并且必须:
-仅包含 253 个字符。
-仅包含小写字母数字字符、“-”或“。”。
-以字母数字字符开头。
-以字母数字字符结尾。
三、两/三台主机部署
3.1 描述
此部署配置适用于 Anyware Manager、MongoDB 和 Vault 服务器在单独的主机上运行的情况。
通过在单独的计算机上托管数据库和机密存储,可以降低 Anyware Manager 服务器发生故障时数据丢失的风险。
此配置通过部署多个 Anyware Manager 实例来实现 Anyware Manager 的高可用性和可扩展性。此配置具有以下限制:
- 如果仅部署一个 MongoDB 和 Vault 实例,数据持久层无法实现高可用性,并且必须为托管 MongoDB 和 Vault 的服务器制定备份和恢复过程,以最大限度地减少数据丢失。
- 可以在本地或任何云上托管的虚拟机上配置此部署。 此配置需要一定程度的 MongoDB 和 Vault 技术知识,才能正确部署和操作这些外部组件。
四、三主机安装 之 为外部DB和Vault创建自签名证书
这些命令的目的是生成一个自签名的根证书颁发机构 (CA) 证书和一个由该根CA签署的服务器证书,并包括特定的Subject Alternative Name (SAN) 条目。每个命令的详细功能如下:
-
生成根CA私钥:
openssl genrsa -out rootCA.key 4096
- 生成一个4096位的RSA私钥并将其保存在
rootCA.key
文件中。 - 这个私钥将用于签署根CA证书。
- 生成一个4096位的RSA私钥并将其保存在
-
生成自签名根CA证书:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt -subj "/C=CA/ST=BC/O=Team Voltron/CN=Voltron Test CA"
- 使用生成的私钥
rootCA.key
创建一个新的自签名根CA证书,并将其保存为rootCA.crt
。 -x509
表示生成一个自签名证书。-days 1024
指定证书的有效期为1024天。-subj
提供证书的主题信息(国家、州/省、组织和通用名称)。
- 使用生成的私钥
-
设置Subject Alternative Name (SAN) 环境变量:
export SAN="subjectAltName=DNS:DBVault-10-47,IP:192.168.10.47,IP:192.168.10.47,IP:127.0.0.1"
- 将特定的SAN值存储在
SAN
环境变量中。 - SAN包含DNS名称和多个IP地址,用于扩展证书的主机名验证。
- 将特定的SAN值存储在
-
生成服务器私钥:
openssl genrsa -out mycert.key 2048
- 生成一个2048位的RSA私钥并将其保存在
mycert.key
文件中。 - 这个私钥将用于生成服务器证书签名请求 (CSR)。
- 生成一个2048位的RSA私钥并将其保存在
-
生成证书签名请求 (CSR):
openssl req -new -sha256 \ -key mycert.key \ -subj "/C=CA/ST=BC/O=Team Voltron/CN=localhost" \ -reqexts SAN \ -config <(cat /etc/pki/tls/openssl.cnf <(printf "\n[SAN]\n${SAN}")) \ -out mycert.csr
- 使用
mycert.key
生成一个新的CSR,并将其保存为mycert.csr
。 -subj
提供CSR的主题信息。-reqexts SAN
和-config <(cat /etc/pki/tls/openssl.cnf <(printf "\n[SAN]\n${SAN}"))
用于将SAN信息添加到CSR中。-sha256
指定使用SHA-256哈希算法。
- 使用
-
使用根CA签署服务器证书:
openssl x509 -req -in mycert.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out mycert.crt -days 500 -sha256 -extfile <(printf "${SAN}")
- 使用根CA证书
rootCA.crt
和根CA私钥rootCA.key
签署CSRmycert.csr
,生成服务器证书mycert.crt
。 -CAcreateserial
生成一个序列号文件(默认为rootCA.srl
)。-days 500
指定证书的有效期为500天。-extfile <(printf "${SAN}")
包含SAN信息的扩展文件。
- 使用根CA证书
-
将服务器证书追加到 PEM 文件:
cat mycert.crt >> myserver.pem
- 将生成的服务器证书 (
mycert.crt
) 的内容追加到myserver.pem
文件中。 myserver.pem
文件将包含服务器证书的公钥。
- 将生成的服务器证书 (
-
将服务器私钥追加到 PEM 文件:
cat mycert.key >> myserver.pem
- 将生成的服务器私钥 (
mycert.key
) 的内容追加到myserver.pem
文件中。 myserver.pem
文件现在包含了服务器的公钥和私钥。
通过这两个步骤,你将服务器证书和私钥组合到一个 PEM 文件 (
myserver.pem
) 中,这个文件可以方便地用于配置支持 SSL/TLS 的服务。 - 将生成的服务器私钥 (
-
验证服务器证书:
openssl verify -CAfile rootCA.crt mycert.crt
- 使用根CA证书 (
rootCA.crt
) 验证服务器证书 (mycert.crt
) 的有效性。 -CAfile rootCA.crt
指定用于验证的根CA证书。- 如果证书有效且由指定的根CA签署,OpenSSL 会输出
mycert.crt: OK
。 - 如果证书无效或不匹配,OpenSSL 会输出相应的错误信息。
- 使用根CA证书 (
总结
这些命令的整体操作流程如下:
- 创建一个根CA证书及其私钥。
- 为服务器生成一个私钥和一个包含SAN的CSR。
- 使用根CA证书和私钥签署该CSR,生成一个包含SAN的服务器证书。
- 将服务器证书和私钥组合到一个 PEM 文件中 (
myserver.pem
)。 - 使用根CA证书验证服务器证书的有效性,确保服务器证书是由指定的根CA签署的,并且没有问题。
这些步骤通常用于准备证书和密钥,以便在配置支持SSL/TLS的服务(如MongoDB、HashiCorp Vault等)时使用。
五、三主机安装之 HashiCorp Vault 1.11 安装配置
安装和配置 Vault
-
安装
yum-utils
工具包:sudo yum install -y yum-utils
- 安装
yum-utils
,这是一个提供各种 YUM 命令的工具包,用于管理和维护 YUM 仓库及软件包。
- 安装
-
添加 HashiCorp 的 YUM 仓库:
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
- 将 HashiCorp 官方的 YUM 仓库添加到系统中,以便安装 HashiCorp 的软件包,包括 Vault。
-
安装 Vault:
sudo yum -y install vault-1.11.6-1.x86_64
- 从刚刚添加的 YUM 仓库安装 Vault 1.11.6 版本。
-
运行 Vault 命令以验证安装:
vault
- 运行 Vault 命令行工具以确认 Vault 已正确安装并能够启动。
配置 Vault
-
复制服务器证书到 Vault 目录:
sudo cp myserver.pem /opt/vault/tls/myserver.pem
- 将之前生成的服务器证书 (
myserver.pem
) 复制到 Vault 的 TLS 目录中。
- 将之前生成的服务器证书 (
-
备份现有的 Vault 配置文件:
sudo mv /etc/vault.d/vault.hcl /etc/vault.d/vault.hcl.old
- 将现有的 Vault 配置文件重命名为备份文件,以便后续创建新的配置文件。
-
编辑 Vault 配置文件:
vi /etc/vault.d/vault.hcl
- 打开 Vault 配置文件进行编辑。
Vault 配置文件 (/etc/vault.d/vault.hcl
)
# Full configuration options can be found at https://www.vaultproject.io/docs/configuration
ui = true
storage "raft" {
path = "/opt/vault/data"
node = "node1"
}
# HTTP listener
listener "tcp" {
address = "0.0.0.0:8200"
tls_cert_file = "/opt/vault/tls/myserver.pem"
tls_key_file = "/opt/vault/tls/myserver.pem"
}
api_addr = "https://127.0.0.1:8200"
cluster_addr = "https://127.0.0.1:8201"
ui = true
: 启用 Vault 的 Web 用户界面。storage "raft"
: 配置 Raft 存储后端,数据存储在/opt/vault/data
目录。listener "tcp"
: 配置 TCP 监听器,在 8200 端口上启用 TLS 加密,使用指定的证书和密钥文件。api_addr
和cluster_addr
: 配置 Vault 的 API 地址和集群地址,均使用 HTTPS。
配置 Vault 服务
-
编辑 Vault 服务文件:
sudo vi /etc/systemd/system/vault.service
Vault 服务文件内容 (
/etc/systemd/system/vault.service
):[Unit] Description="HashiCorp Vault - A tool for managing secrets" Documentation=https://www.vaultproject.io/docs/ Requires=network-online.target After=network-online.target ConditionFileNotEmpty=/etc/vault.d/vault.hcl StartLimitIntervalSec=60 StartLimitBurst=3 [Service] User=vault Group=vault ProtectSystem=full ProtectHome=read-only PrivateTmp=yes PrivateDevices=yes SecureBits=keep-caps AmbientCapabilities=CAP_IPC_LOCK Capabilities=CAP_IPC_LOCK+ep CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK NoNewPrivileges=yes ExecStart=/usr/bin/vault server -config=/etc/vault.d/vault.hcl ExecReload=/bin/kill --signal HUP $MAINPID KillMode=process KillSignal=SIGINT Restart=on-failure RestartSec=5 TimeoutStopSec=30 StartLimitInterval=60 StartLimitIntervalSec=60 StartLimitBurst=3 LimitNOFILE=65536 LimitMEMLOCK=infinity [Install] WantedBy=multi-user.target
- 定义了 Vault 的系统服务单元,配置了启动、重启、权限、安全设置等。
-
启用 Vault 服务:
sudo systemctl enable vault
- 设置 Vault 服务在系统启动时自动启动。
-
启动 Vault 服务:
sudo systemctl start vault
- 启动 Vault 服务。
-
检查 Vault 服务状态:
sudo systemctl status vault
- 检查 Vault 服务是否正在运行并且工作正常。
初始化和解封 Vault
以下命令需要重新开一个SSH执行
-
设置 Vault 地址:
export VAULT_ADDR='https://192.168.10.47:8200'
- 设置环境变量
VAULT_ADDR
指定 Vault 的 API 地址。
- 设置环境变量
-
设置 CA 证书路径:
export VAULT_CACERT=/opt/vault/tls/myserver.pem
- 设置环境变量
VAULT_CACERT
指定 Vault 的 CA 证书路径。
- 设置环境变量
-
初始化 Vault:
vault operator init
初始化输出示例:
Unseal Key 1: 6vcvTn+oLnFirU9f4Ehrc88RWphgavO5fgdhiH4/DYDg Unseal Key 2: r+ZFy2KipZxnJec5O6geU4DFTXxiVZbLfuD5YDvSbbvl Unseal Key 3: COGjZgfPBlKS0Ok+6vLtIlfui2WA7LHmS5BC9ipXx7vD Unseal Key 4: Vee++P6EkdnW7Hs85KtY3Zo8sWfMNqG8RAMLHpin9MHU Unseal Key 5: s7eu5VWbjqaSAZZKI+ejdEIa7bDKbIoIT6rc7+jQ5XtZ Initial Root Token: hvs.QIdivPRK0dUrycWFrh1gQe8Z
- 初始化 Vault 并生成解封密钥和 Root Token。
-
解封 Vault:
vault operator unseal
- 需要执行三次,输入不同的解封密钥。
-
登录 Vault:
vault login hvs.QIdivPRK0dUrycWFrh1gQe8Z
- 使用 Root Token 登录 Vault。
-
启用密钥值 (KV) 存储引擎:
vault secrets enable -path=secret/ kv
-
创建 Vault 策略:
vault policy write casm-policy - << EOF path "secret/data/*" { capabilities = ["create", "update", "read", "delete", "list"] } EOF
-
创建角色和 token:
vault write auth/token/roles/casm-role allowed_policies="casm-policy" period="768h" vault token create -role=casm-role -orphan
创建 token 输出示例:
Key Value --- ----- token hvs.CAESIDA0kcPwDitAjXPtrKjckEj1qJA8DQAl8fEyHo_z7g1WGh4KHGh2cy5lU2pLdU1tb1FWbFgyUE1nVUw0OVlYUzU
-
设置 Vault 跳过证书验证(仅用于测试环境):
export VAULT_SKIP_VERIFY=True
-
重新解封 Vault:
vault operator unseal
- 在 Vault 重启后,执行解封操作。
六、三主机安装之 MongoDB 4.2 安装配置
下面是这些系统命令的详细解释及其功能:
配置 MongoDB YUM 仓库
-
创建并编辑 MongoDB 仓库文件:
sudo vi /etc/yum.repos.d/mongodb-org-4.2.repo
MongoDB 仓库配置文件内容 (
/etc/yum.repos.d/mongodb-org-4.2.repo
):[mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
name
: 为仓库指定名称。baseurl
: 指定 MongoDB 软件包的下载地址。gpgcheck
: 启用 GPG 签名检查,以确保软件包的完整性和来源可靠性。enabled
: 启用这个仓库。gpgkey
: 指定用于验证软件包签名的 GPG 密钥的 URL。
-
安装 MongoDB 相关包:
yum install -y mongodb-org-4.2.14 mongodb-org-server-4.2.14 mongodb-org-shell-4.2.14 mongodb-org-mongos-4.2.14 mongodb-org-tools-4.2.14
- 安装 MongoDB 4.2.14 及其所有相关组件,包括服务器、Shell、Mongos 和工具。
配置 MongoDB
-
移动和设置证书权限:
mv myserver.pem /etc/myserver.pem chmod 755 /etc/myserver.pem
- 将证书文件
myserver.pem
移动到/etc
目录,并设置文件权限为 755(所有者可读写执行,其他用户可读)。
- 将证书文件
-
备份并编辑 MongoDB 配置文件:
sudo mv /etc/mongod.conf /etc/mongod.conf.orig sudo vi /etc/mongod.conf
MongoDB 配置文件内容 (
/etc/mongod.conf
):#mongod.conf #for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # Where and how to store data. storage: dbPath: /var/lib/mongo journal: enabled: true # engine: # wiredTiger: # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo # network interfaces net: port: 27017 bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. tls: # mode allowTLS allows connections to be either TLS or non-TLS, but requireTLS means all connections must be TLS mode: requireTLS # All connections MUST be TLS certificateKeyFile: /etc/myserver.pem security: authorization: "enabled"
systemLog
: 配置日志记录,包括日志文件位置和是否追加日志。storage
: 配置数据存储,包括数据文件位置和启用日志。processManagement
: 配置 MongoDB 进程管理,包括后台运行、PID 文件路径等。net
: 配置网络接口,包括端口号、绑定 IP 地址和 TLS 设置。security
: 启用 MongoDB 的认证授权。
-
重新加载系统服务管理器配置:
sudo systemctl daemon-reload
- 使系统服务管理器重新加载服务配置文件。
-
设置证书的 SELinux 上下文:
chcon system_u:object_r:mongod_var_lib_t:s0 /etc/myserver.pem
- 设置证书文件的 SELinux 上下文,以便 MongoDB 服务可以访问它。
-
启动 MongoDB 服务并检查状态:
sudo systemctl start mongod sudo systemctl status mongod
- 启动 MongoDB 服务,并检查其运行状态。
配置和使用 MongoDB
-
以 TLS 连接到 MongoDB:
mongo --tls --tlsAllowInvalidCertificates
- 使用 TLS 连接到 MongoDB 实例,即使证书无效也允许连接(用于测试)。
-
切换到
casm
数据库:use casm
-
创建用户并设置权限:
db.createUser( { user: "sunia", pwd: "Hc@2024", roles: [ {db: "casm", role: "readWrite"} ], // user only needs readWrite Access to cam DB, authenticationRestrictions: [ { serverAddress: ["192.168.10.47"] // IP for the MongoDB server } ] });
- 在
casm
数据库中创建一个用户sunia
,密码为Hc@2024
,并赋予readWrite
权限。用户只能从 IP 地址192.168.10.47
进行认证。
- 在
注意事项:
1, 完成MongoDB安装后登录第一次创建用户,会出现问题是: 无权限在casm总增加用户
2024-07-18T20:04:42.959+0800 E QUERY [js] uncaught exception: Error: couldn’t add user: not authorized on casm to execute command { createUser: “sunia”, pwd: “xxx”, roles: [ { db: “casm”, role: “readWrite” } ], authenticationRestrictions: [ { serverAddress: [ “192.168.10.47” ] } ], digestPassword: true, writeConcern: { w: “majority”, wtimeout: 600000.0 }, lsid: { id: UUID(“05fe2644-2cdd-4e33-9476-e4e29ba5cbdb”) }, $db: “casm” } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1413:11
@(shell):1:1
解决办法:
第一次安装mongodb后,需要增加一个账户,如果创建账户的时候报这个错误,是因为启动mongod的时候,指定的配置文件mongodb.conf中,需要先用noauth = true启动,注释掉auth = true
-------------------防火墙打开-----------------------------
sudo firewall-cmd --list-all
sudo firewall-cmd --add-port=27017/tcp --permanent #MongoDB
sudo firewall-cmd --add-port=8200/tcp --permanent #Vault
sudo firewall-cmd --reload
总结
这些命令完成了 MongoDB 的安装、配置和启动,包括:
- 配置 MongoDB YUM 仓库,并安装 MongoDB 4.2 版本。
- 配置 MongoDB 使其支持 TLS 和启用认证。
- 设置 MongoDB 服务并启动,确保服务正常运行。
- 创建 MongoDB 用户并设置权限,以便进行访问控制。
七、三主机安装之 Manager配置刷新
在虚机安装完成Manager之后,需要配置Manager使用外部安装的MongoDB和Vault服务上面。
如下是配置命令:
cat /opt/manager.conf
{
"vault-type": "vault",
"vault-url": "https://192.168.10.47:8200",
"vault-token": "hvs.CAESIEAIMGzQFyc3ts2WJsjvA-YcavVXizkdFdLFML0cw0bSGh4KHGh2cy5yeXFKTVFsekZDZlFwMUZ2UDJ5ejdjdmw",
"vault-secret-path": "secret/data",
"vault-skip-verify-cert": true,
"db-connection-string": "mongodb://sunia:Hc%402024@192.168.10.47/casm",
"db-enable-tls": true,
"db-skip-verify-cert": true
}
sudo /usr/local/bin/anyware-manager configure --config-file /opt/manager.conf