Link Search Menu Expand Document Documentation Menu

应用配置文件的更改

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 索引的一个或多个部分。请务必谨慎运行,以避免丢失现有资源。请考虑以下示例:

  1. 您初始化 .opendistro_security 索引。
  2. 您使用 REST API 创建了十个用户。
  3. 您决定使用 internal_users.yml 创建一个新的保留用户,该文件位于 <OPENSEARCH_HOME>/config/opensearch-security/ 目录中。
  4. 您再次运行 securityadmin.sh 将新保留用户加载到索引中。
  5. 您将丢失使用 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