OpenSearch 安全入门
演示配置是开始使用 OpenSearch 安全功能最直接的方式。OpenSearch 附带了一些实用的脚本,包括 install_demo_configuration.sh
(或 Windows 上的 install_demo_configuration.bat
)。
该脚本位于 plugins/opensearch-security/tools
中,并执行以下操作:
- 为传输层和 REST 层的 TLS 加密创建演示证书。
- 配置演示用户、角色和角色映射。
- 配置安全插件以使用内部数据库进行身份验证和授权。
- 使用启动集群所需的基本配置更新
opensearch.yml
文件。
您可以在设置演示配置中找到有关演示配置以及如何快速入门的更多信息。
此配置的某些方面,例如演示证书和默认密码,绝不应在生产环境中使用。在投入生产之前,应将演示配置的这些部分替换为您的自定义信息。
设置演示配置
在运行 install_demo_configuration.sh
脚本之前,您必须创建一个名为 OPENSEARCH_INITIAL_ADMIN_PASSWORD
的环境变量,并为其设置一个强密码。此密码将用作管理员用户对 OpenSearch 进行身份验证的密码。使用在线工具 Zxcvbn 来测试任何密码的强度。之后,您可以执行 install_demo_configuration.sh
并按照终端提示输入必要详细信息。
脚本执行后,您可以启动 OpenSearch 并通过运行以下命令来测试配置:
curl -k -XGET -u admin:<password> https://<opensearch-ip>:9200
您应该看到类似于以下的输出:
{
"name" : "smoketestnode",
"cluster_name" : "opensearch",
"cluster_uuid" : "0a5DYAk0Rbi14wqT3TqMiQ",
"version" : {
"distribution" : "opensearch",
"number" : "2.13.0",
"build_type" : "tar",
"build_hash" : "7ec678d1b7c87d6e779fdef94e33623e1f1e2647",
"build_date" : "2024-03-26T00:04:51.025238748Z",
"build_snapshot" : false,
"lucene_version" : "9.10.0",
"minimum_wire_compatibility_version" : "7.10.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "The OpenSearch Project: https://opensearch.org.cn/"
}
设置 OpenSearch Dashboards
为了快速开始使用 OpenSearch Dashboards,您可以将以下配置添加到 opensearch_dashboards.yml
:
opensearch.hosts: [https://:9200]
opensearch.ssl.verificationMode: none
opensearch.username: kibanaserver
opensearch.password: kibanaserver
opensearch.requestHeadersWhitelist: [authorization, securitytenant]
opensearch_security.multitenancy.enabled: true
opensearch_security.multitenancy.tenants.preferred: [Private, Global]
opensearch_security.readonly_mode.roles: [kibana_read_only]
# Use this setting if you are running opensearch-dashboards without https
opensearch_security.cookie.secure: false
您可以根据用于安装 OpenSearch 和 OpenSearch Dashboards 的方法,启动二进制文件或服务。
使用二进制文件时,您需要向 yarn start
命令提供 --no-base-path
以设置不带基本路径的 URL。如果未设置此选项,将添加一个随机的三字母基本路径。
启动 OpenSearch Dashboards 后,您应该会看到以下两行日志:
[info][listening] Server running at https://:5601
[info][server][OpenSearchDashboards][http] http server running at https://:5601
您现在可以在浏览器中使用 https://:5601 访问 OpenSearch Dashboards。使用用户名 admin
和在 OPENSEARCH_INITIAL_ADMIN_PASSWORD
环境变量中配置的密码。
添加用户
添加用户、角色和其他安全相关配置有三种方式:
- 更新相应的配置文件(
internal_users.yml
用于添加/更新/删除用户) - 使用 API
- 使用 OpenSearch Dashboards UI
安全配置文件位于 config/opensearch-security
目录中。
您可以通过使用以下设置更新 internal_users.yml
文件来添加 OpenSearch Dashboards 用户:
test-user:
hash: "$2y$12$CkxFoTAJKsZaWv/m8VoZ6ePG3DBeBTAvoo4xA2P21VCS9w2RYumsG"
backend_roles:
- "test-backend-role"
- "kibanauser"
description: "test user user"
hash
字符串是使用 plugins/opensearch-security/tools/
目录中的 hash.sh
脚本生成的。在此示例中,使用了字符串 secretpassword
的哈希值。
请注意使用内置后端角色 kibanauser
,它提供了导航 OpenSearch Dashboards 所需的用户权限。
创建角色
roles.yml
中包含的角色使用以下结构:
<rolename>:
cluster_permissions:
- <cluster permission>
index_permissions:
- index_patterns:
- <index pattern>
allowed_actions:
- <index permissions>
使用此结构,您可以配置一个新角色以提供对特定索引的访问权限,例如以下示例中配置的角色:
human_resources:
index_permissions:
- index_patterns:
- "humanresources"
allowed_actions:
- "READ"
请注意,此示例中未列出集群权限,因为这些权限由内置角色 kibana_user
提供,该角色已使用 kibanauser
后端角色进行映射。
将用户映射到角色
当用户登录 OpenSearch 时,他们需要映射到相应的角色才能获得正确的权限。此映射是使用 roles_mapping.yml
文件以以下结构执行的:
<role_name>:
users:
- <username>
- ...
backend_roles:
- <rolename>
为了将新创建的用户 test-user
映射到 human_resources
角色,您可以在 roles_mapping.yml
文件中使用以下配置:
human_resources:
backend_roles:
- test-backend-role
另外一个示例是,roles_mappings.yml
文件包含已映射到 kibana_user
角色的后端角色 kibanauser
:
kibana_user:
reserved: false
backend_roles:
- "kibanauser"
description: "Maps kibanauser to kibana_user"
将配置上传到安全索引
配置用户、角色或任何其他安全配置的最后一步是将其上传到 OpenSearch 安全索引。仅更新文件而不上传它们,不会更改已运行的 OpenSearch 集群的配置。
要上传配置,可以使用在 install_demo_configuration.sh
执行期间生成的管理员证书运行以下命令:
./plugins/opensearch-security/tools/securityadmin.sh -cd "config/opensearch-security" -icl -key "../kirk-key.pem" -cert "../kirk.pem" -cacert "../root-ca.pem" -nhnv
后续步骤
“OpenSearch 安全最佳实践”指南涵盖了开始使用 OpenSearch 安全功能时需要考虑的 10 个方面。
“安全配置”概述提供了在 OpenSearch 实现中设置安全功能的基本步骤,并包含有关如何根据您的业务需求自定义安全功能的信息链接。