应用配置文件的更改
在 Windows 上,请使用 securityadmin.bat 代替 securityadmin.sh。有关更多信息,请参阅 Windows 用法。
安全插件将其配置(包括用户、角色、权限和后端设置)存储在 OpenSearch 集群上的系统索引中。将这些设置存储在索引中,您无需重启集群即可更改设置,也无需在每个独立节点上编辑配置文件。这通过运行 securityadmin.sh
脚本实现。
脚本的首要任务是初始化 .opendistro_security
索引。这会使用 /config/opensearch-security
中的配置文件将您的初始配置加载到索引中。.opendistro_security
索引初始化后,您可以使用 OpenSearch Dashboards 或 REST API 来管理您的用户、角色和权限。
该脚本位于 /plugins/opensearch-security/tools/securityadmin.sh
。这是一个相对路径,显示了 securityadmin.sh
脚本的位置。绝对路径取决于您安装 OpenSearch 的目录。例如,如果您使用 Docker 安装 OpenSearch,路径将类似于:/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh
。
securityadmin.sh
脚本要求您的 OpenSearch 集群启用 SSL/TLS HTTP。在继续操作之前,请在 opensearch.yml
文件中设置 plugins.security.ssl.http.enabled: true
。如果您的集群未在 HTTP 层使用 SSL/TLS 但需要 securityadmin.sh
,请在单个节点(例如 ingest
节点)上启用 SSL/TLS,然后在该节点上运行 securityadmin.sh
。仅在一个节点上配置 REST 层 TLS 设置即可启用此设置。更改 opensearch.yml
文件后,必须重启该节点上的 OpenSearch。
警示
如果您更改 config/opensearch-security
中的配置文件,OpenSearch 不会自动应用这些更改。相反,您必须运行 securityadmin.sh
将更新的文件加载到索引中。securityadmin.sh
文件位于 <OPENSEARCH_HOME>/plugins/opensearch-security/tools/securityadmin.[sh|bat]
。
运行 securityadmin.sh
将覆盖 .opendistro_security
索引的一个或多个部分。请务必谨慎运行,以避免丢失现有资源。请考虑以下示例:
- 您初始化
.opendistro_security
索引。 - 您使用 REST API 创建了十个用户。
- 您决定使用
internal_users.yml
创建一个新的保留用户,该文件位于<OPENSEARCH_HOME>/config/opensearch-security/
目录中。 - 您再次运行
securityadmin.sh
将新保留用户加载到索引中。 - 您将丢失使用 REST API 创建的所有十个用户。
为避免这种情况,请在更改和重新运行脚本之前备份当前配置:
./securityadmin.sh -backup my-backup-directory \
-icl \
-nhnv \
-cacert ../../../config/root-ca.pem \
-cert ../../../config/kirk.pem \
-key ../../../config/kirk-key.pem
如果您使用 -f
参数而不是 -cd
,则可以将单个 YAML 文件加载到索引中,而不是整个 YAML 文件目录。例如,如果您创建了十个新角色,您可以安全地将 internal_users.yml
加载到索引中而不会丢失您的角色;只有内部用户会被覆盖。
./securityadmin.sh -f ../../../config/opensearch-security/internal_users.yml \
-t internalusers \
-icl \
-nhnv \
-cacert ../../../config/root-ca.pem \
-cert ../../../config/kirk.pem \
-key ../../../config/kirk-key.pem
在应用安全配置之前解析所有环境变量,请使用 -rev
参数。
./securityadmin.sh -cd ../../../config/opensearch-security/ \
-rev \
-cacert ../../../root-ca.pem \
-cert ../../../kirk.pem \
-key ../../../kirk.key.pem
以下示例显示了 config.yml
文件中的环境变量:
password: ${env.LDAP_PASSWORD}
配置管理员证书
为了使用 securityadmin.sh
,您必须将所有管理员证书的专有名称 (DN) 添加到 opensearch.yml
中。例如,如果您使用演示证书,opensearch.yml
可能包含 kirk
证书的以下行:
plugins.security.authcz.admin_dn:
- CN=kirk,OU=client,O=client,L=test,C=DE
您不能将节点证书用作管理员证书。两者必须分开。此外,不要在 DN 的各部分之间添加空格。
基本用法
securityadmin.sh
工具可以在任何可以访问 OpenSearch 集群 HTTP 端口(默认端口为 9200)的机器上运行。您无需通过 SSH 访问节点即可更改安全插件配置。
每个节点都包含位于 plugins/opensearch-security/tools/securityadmin.sh
的工具。在运行之前,您可能需要使脚本可执行:
chmod +x plugins/opensearch-security/tools/securityadmin.sh
要打印所有可用的命令行选项,请不带任何参数运行脚本:
./plugins/opensearch-security/tools/securityadmin.sh
将 securityadmin
与 PEM 文件一起使用
要加载您的初始配置(所有 YAML 文件),您可以使用以下命令:
./securityadmin.sh -cd ../../../config/opensearch-security/ -icl -nhnv \
-cacert ../../../config/root-ca.pem \
-cert ../../../config/kirk.pem \
-key ../../../config/kirk-key.pem
-cd
选项指定安全插件配置文件的位置。-icl
(--ignore-clustername
) 选项告诉安全插件上传配置,无论集群名称是什么。作为替代,您还可以使用-cn
(--clustername
) 选项指定集群名称。- 由于演示证书是自签名的,此命令使用
-nhnv
(--disable-host-name-verification
) 选项禁用主机名验证。 -cacert
、-cert
和-key
选项定义了您的根 CA 证书、管理员证书以及管理员证书私钥的位置。如果私钥有密码,请使用-keypass
选项指定。
下表显示了 PEM 选项。
名称 | 描述 |
---|---|
-cert | 包含管理员证书和所有中间证书(如果有)的 PEM 文件位置。您可以使用绝对路径或相对路径。相对路径将相对于 securityadmin.sh 的执行目录解析。 |
-key | 包含管理员证书私钥的 PEM 文件位置。您可以使用绝对路径或相对路径。相对路径将相对于 securityadmin.sh 的执行目录解析。密钥必须是 PKCS#8 格式。 |
-keypass | 管理员证书私钥的密码(如果有)。 |
-cacert | 包含根证书的 PEM 文件位置。您可以使用绝对路径或相对路径。相对路径将相对于 securityadmin.sh 的执行目录解析。 |
将 securityadmin
与密钥库和信任库文件一起使用
JKS 格式的密钥库文件与 securityadmin.sh
兼容,如下面的示例设置所示:
./securityadmin.sh -cd ../../../config/opensearch-security -icl -nhnv
-ts <path/to/truststore> -tspass <truststore password>
-ks <path/to/keystore> -kspass <keystore password>
使用以下选项控制密钥库和信任库设置。
名称 | 描述 |
---|---|
-ks | 包含管理员证书和所有中间证书(如果有)的密钥库位置。您可以使用绝对路径或相对路径。相对路径将相对于 securityadmin.sh 的执行目录解析。 |
-kspass | 密钥库密码。 |
-kst | 密钥库类型,可以是 JKS 或 PKCS#12/PFX。如果未指定,安全插件会尝试根据文件扩展名确定类型。 |
-ksalias | 管理员证书的别名(如果有)。 |
-ts | 包含根证书的信任库位置。您可以使用绝对路径或相对路径。相对路径将相对于 securityadmin.sh 的执行目录解析。 |
-tspass | 信任库密码。 |
-tst | 信任库类型,可以是 JKS 或 PKCS#12/PFX。如果未指定,安全插件会尝试根据文件扩展名确定类型。 |
-tsalias | 根证书的别名(如果有)。 |
签署 admin
证书的证书颁发机构 (CA) 可以与用于签署传输或 HTTP 证书的 CA 不同。但是,为了验证证书,需要将 CA 添加到信任库中。有关更多信息,请参阅生成节点和客户端证书。
示例命令
使用 PEM 证书应用 config/opensearch-security/
中的所有 YAML 文件:
/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \
-cacert /etc/opensearch/root-ca.pem \
-cert /etc/opensearch/kirk.pem \
-key /etc/opensearch/kirk-key.pem \
-cd /usr/share/opensearch/config/opensearch-security/
使用 PEM 证书应用单个 YAML 文件 (config.yml
):
./securityadmin.sh \
-f ../../../config/opensearch-security/config.yml \
-icl -nhnv -cert /etc/opensearch/kirk.pem \
-cacert /etc/opensearch/root-ca.pem \
-key /etc/opensearch/kirk-key.pem \
-t config
使用密钥库和信任库文件应用 config/opensearch-security/
中的所有 YAML 文件:
./securityadmin.sh \
-cd /usr/share/opensearch/config/opensearch-security/ \
-ks /path/to/keystore.jks \
-kspass changeit \
-ts /path/to/truststore.jks \
-tspass changeit
-nhnv
-icl
OpenSearch 设置
如果您运行的是默认的 OpenSearch 安装,该安装监听端口 9200 并使用 opensearch
作为集群名称,则可以完全省略以下设置。否则,请使用以下开关指定您的 OpenSearch 设置。
名称 | 描述 |
---|---|
-h | OpenSearch 主机名。默认为 localhost 。 |
-p | OpenSearch 端口。默认为 9200。 |
-cn | 集群名称。默认为 opensearch 。 |
-icl | 忽略集群名称。 |
-sniff | 嗅探集群节点。嗅探使用 OpenSearch _cluster/state API 检测可用节点。 |
-arc,--accept-red-cluster | 即使集群状态为红色,也执行 securityadmin.sh 。默认为 false ,这意味着脚本不会在红色集群上执行。 |
证书验证设置
使用以下选项控制证书验证。
名称 | 描述 |
---|---|
-nhnv | 不验证主机名。默认为 false 。 |
-nrhn | 不解析主机名。仅在未设置 -nhnv 时相关。 |
配置文件设置
以下开关定义了您要推送到安全插件的配置文件。您可以推送单个文件,也可以指定包含一个或多个配置文件的目录。
名称 | 描述 |
---|---|
-cd | 包含多个安全插件配置文件的目录。 |
-f | 单个配置文件。不能与 -cd 一起使用。 |
-t | 文件类型。 |
-rl | 重新加载当前配置并刷新内部缓存。 |
要上传目录中的所有配置文件,请使用此项:
./securityadmin.sh -cd ../../../config/opensearch-security -ts ... -tspass ... -ks ... -kspass ...
如果要推送单个配置文件,请使用此项:
./securityadmin.sh -f ../../../config/opensearch-security/internal_users.yml -t internalusers \
-ts ... -tspass ... -ks ... -kspass ...
文件类型必须是以下之一:
- config
- roles
- rolesmapping
- internalusers
- actiongroups
密码设置
您可能不需要更改密码设置。如果需要,请使用以下选项。
名称 | 描述 |
---|---|
-ec | 启用的 TLS 密码的逗号分隔列表。 |
-ep | 启用的 TLS 协议的逗号分隔列表。 |
备份、恢复和迁移
您可以使用以下命令从集群下载所有当前配置文件:
./securityadmin.sh -backup my-backup-directory -ts ... -tspass ... -ks ... -kspass ...
此命令将当前安全插件配置从集群转储到您指定目录中的单独文件。然后,您可以将这些文件用作备份,或将配置加载到不同的集群中。此命令在将概念验证移至生产环境,或者需要添加额外的保留或隐藏资源时非常有用。
./securityadmin.sh \
-backup my-backup-directory \
-icl \
-nhnv \
-cacert ../../../config/root-ca.pem \
-cert ../../../config/kirk.pem \
-key ../../../config/kirk-key.pem
要将转储的文件上传到另一个集群:
./securityadmin.sh -h production.example.com -p 9301 -cd /etc/backup/ -ts ... -tspass ... -ks ... -kspass ...
要将配置 YAML 文件从 Open Distro for Elasticsearch 0.x.x 格式迁移到 OpenSearch 1.x.x 格式:
./securityadmin.sh -migrate ../../../config/opensearch-security -ts ... -tspass ... -ks ... -kspass ...
名称 | 描述 |
---|---|
-backup | 从正在运行的集群中检索当前安全插件配置并将其转储到工作目录。 |
-migrate | 将配置 YAML 文件从 Open Distro for Elasticsearch 0.x.x 迁移到 OpenSearch 1.x.x。 |
其他选项
名称 | 描述 |
---|---|
-dci | 删除安全插件配置索引并退出。如果集群状态因安全插件索引损坏而变为红色,此选项很有用。 |
-esa | 启用分片分配并退出。如果您在执行完整集群重启时禁用了分片分配,并且需要重新创建安全插件索引,此选项很有用。 |
-w | 显示有关所用管理员证书的信息。 |
-rl | 默认情况下,安全插件会缓存经过身份验证的用户及其角色和权限一小时。此选项重新加载集群中存储的当前安全插件配置,从而使任何缓存的用户、角色和权限失效。 |
-i | 安全插件索引名称。默认为 .opendistro_security 。 |
-er | 为 opensearch_security 索引设置显式副本数或自动扩展表达式。 |
-era | 启用副本自动扩展。 |
-dra | 禁用副本自动扩展。 |
-us | 更新副本设置。 |
Windows 用法
在 Windows 上,securityadmin.sh
的等效文件是位于 \path\to\opensearch-3.1.0\plugins\opensearch-security\tools\
目录中的 securityadmin.bat
脚本。
在前面章节中运行示例命令时,请使用命令提示符或 PowerShell。通过在任务栏上开始旁边的搜索框中输入 cmd
来打开命令提示符,或输入 powershell
来打开 PowerShell。
例如,要打印所有可用的命令行选项,请在不带任何参数的情况下运行脚本
.\plugins\opensearch-security\tools\securityadmin.bat
输入多行命令时,请使用脱字号(^
)字符来转义命令行中的下一个字符。
例如,要加载您的初始配置(所有 YAML 文件),请使用以下命令
.\securityadmin.bat -cd ..\..\..\config\opensearch-security\ -icl -nhnv ^
-cacert ..\..\..\config\root-ca.pem ^
-cert ..\..\..\config\kirk.pem ^
-key ..\..\..\config\kirk-key.pem