Link Search Menu Expand Document Documentation Menu

OpenSearch 安全最佳实践

在 OpenSearch 中设置安全对于保护您的数据至关重要。以下是 10 条最佳实践,提供了确保系统安全的明确步骤。

1. 使用您自己的 PKI 设置 SSL/TLS

尽管使用您自己的公钥基础设施 (PKI),例如 AWS Certificate Manager,需要更多的初始投入,但自定义 PKI 提供了以最安全和高性能的方式设置 SSL/TLS 所需的灵活性。

为节点层和 REST 层流量启用 SSL/TLS

SSL/TLS 默认在传输层启用,用于节点到节点通信。SSL/TLS 默认在 REST 层禁用。

为了在 REST 层启用加密,需要以下设置

plugins.security.ssl.http.enabled: true

有关其他配置选项,例如指定证书路径、密钥和证书颁发机构文件,请参阅配置 TLS 证书

用您自己的 PKI 替换所有演示证书

使用 install_demo_configuration.sh 初始化 OpenSearch 集群时生成的证书不适用于生产环境。这些证书应替换为您自己的证书。

您可以通过几种不同的方式生成自定义证书。一种方法是使用 OpenSSL,详细描述请参阅生成自签名证书。此外,还有一些在线工具可以简化证书创建过程,例如以下工具

2. 优先使用客户端证书认证进行 API 认证

客户端证书认证提供了一种安全的密码认证替代方案,更适用于机器到机器的交互。它还能确保低性能开销,因为认证发生在 TLS 层。几乎所有客户端软件,如 curl 和客户端库,都支持此认证方法。

有关客户端证书认证的详细配置说明和其他信息,请参阅启用客户端证书认证

3. 优先使用 SAML 或 OpenID 进行 SSO 作为 OpenSearch Dashboards 认证方式

为 OpenSearch Dashboards 认证实施基于 SAML 或 OpenID 等协议的单点登录 (SSO) 可以通过将凭证管理委托给专用系统来增强安全性。

这种方法最大限度地减少了 OpenSearch 中与密码的直接交互,简化了认证过程,并防止了内部用户数据库中的混乱。欲了解更多信息,请访问 OpenSearch 文档的 SAML 部分

4. 限制分配给用户的角色数量

优先选择数量较少但更复杂的角色,而不是大量简单的角色,可以增强安全性并简化管理。

角色管理的其他最佳实践包括

  1. 角色粒度:根据特定的工作职能或访问要求定义角色,最大限度地减少不必要的权限。
  2. 定期角色审查:定期审查和审计分配的角色,以确保与组织策略和访问需求保持一致。

有关角色的更多信息,请参阅OpenSearch 中定义用户和角色的文档。

5. 验证 DLS、FLS 和字段屏蔽

如果您配置了文档级安全 (DLS)、字段级安全 (FLS) 或字段屏蔽,请务必仔细检查您的角色定义,尤其是当用户映射到多个角色时。强烈建议您通过向 _plugins/_security/authinfo 发送 GET 请求来测试此功能。

以下资源提供了详细示例和其他配置

6. 审计日志配置仅使用必要部分

过多的审计日志记录会由于以下原因降低系统性能

  • 每个日志事件都会增加处理负载。
  • 审计日志会迅速增长,占用大量磁盘空间。

为确保最佳性能,请禁用不必要的日志记录并有选择地使用日志。如果合规性法规没有严格要求,请考虑关闭审计日志记录。如果审计日志记录对您的集群至关重要,请根据您的合规性要求进行配置。

在可能的情况下,请遵循以下建议

  • audit.log_request_body 设置为 false
  • audit.resolve_bulk_requests 设置为 false
  • 启用 compliance.write_log_diffs
  • 最小化 compliance.read_watched_fields 的条目。
  • 最小化 compliance.write_watched_indices 的条目。

7. 考虑禁用私有租户

在许多情况下,私有租户的使用是不必要的,尽管此功能默认启用。因此,每个 OpenSearch Dashboards 用户都将获得自己的私有租户以及一个用于保存对象的相应新索引。这可能导致大量不必要的索引。请评估您的集群是否需要私有租户。如果不需要私有租户,请通过将以下配置添加到 config.yml 文件来禁用此功能

config:
  dynamic:
    kibana:
      multitenancy_enabled: true
      private_tenant_enabled: false

8. 使用 securityadmin.sh 管理配置

使用 securityadmin.sh 来管理您的集群配置。securityadmin.sh 是 OpenSearch 提供的用于管理安全配置的命令行工具。它允许管理员高效地管理 OpenSearch 集群中的安全设置,包括角色、角色映射和其他与安全相关的配置。

使用 securityadmin.sh 具有以下优势

  1. 一致性:通过使用 securityadmin.sh,管理员可以确保集群内安全配置的一致性。这有助于维护标准化和安全的环境。
  2. 自动化:securityadmin.sh 支持安全配置任务的自动化,从而更轻松地在多个节点或集群中部署和管理安全设置。
  3. 版本控制:通过 securityadmin.sh 管理的安全配置可以使用 Git 等标准版本控制系统进行版本控制。这有助于跟踪更改、审计和回滚到以前的配置。

您可以通过首先使用 -backup 选项运行 securityadmin.sh 工具,创建使用 OpenSearch Dashboards UI 或 OpenSearch API 创建的当前配置的备份来防止配置覆盖。这确保了在通过 securityadmin.sh 上传修改后的配置之前捕获所有配置。

有关使用 securityadmin.sh 和管理 OpenSearch 安全配置的更多详细信息,请参阅以下资源

9. 替换所有默认密码

使用演示配置初始化 OpenSearch 时,internal_users.yml 中为内部用户提供了许多默认密码,例如 adminkibanaserverlogstash

您应该在启动时或集群运行后尽快将这些用户的密码更改为强度高、复杂的密码。创建密码配置是一个简单的过程,尤其是当使用 OpenSearch 附带的脚本时,例如位于 plugin/OpenSearch security/tools 目录中的 hash.shhash.bat

kibanaserver 用户是一个关键组件,允许 OpenSearch Dashboards 与 OpenSearch 集群通信。默认情况下,此用户在演示配置中预设了默认密码。应在 OpenSearch 配置中将其替换为强度高、唯一的密码,并且应更新 opensearch_dashboards.yml 文件以反映此更改。

10. 获取帮助

如果您需要其他帮助,可以执行以下操作