修改 YAML 文件

Security 安装提供了一些 YAML 配置文件,用于存储必要的设置,这些设置定义了 Security 插件在集群内管理用户、角色和活动的方式。这些设置范围从身份验证后端配置到允许的端点和 HTTP 请求列表。

在运行 securityadmin.sh 将设置加载到 .opendistro_security 索引之前,请对 YAML 文件进行初始配置。这些文件位于 config/udbsx-security 目录中。

action_groups.yml

此文件包含安全配置所需的任何角色映射。您可以在 udbsx/udbsx-25.0.0/config/udbsx-security/roles_mapping.yml 找到 role_mapping.yml 文件。

除了一些元数据外,默认文件是空的,因为 Security 插件有许多静态操作组会自动添加。这些静态操作组涵盖了广泛的用例,是开始使用该插件的好方法。

---
my-action-group:
  reserved: false
  hidden: false
  allowed_actions:
  - "indices:data/write/index*"
  - "indices:data/write/update*"
  - "indices:admin/mapping/put"
  - "indices:data/write/bulk*"
  - "read"
  - "write"
  static: false
_meta:
  type: "actiongroups"
  config_version: 2

allowlist.yml

您可以使用 allowlist.yml 将任何端点和 HTTP 请求添加到允许的端点和请求列表中。如果启用,除超级管理员外的所有用户都只允许访问指定的端点和 HTTP 请求,并且与该端点关联的所有其他 HTTP 请求都将被拒绝。例如,如果将 GET _cluster/settings 添加到允许列表中,用户就无法提交 PUT 请求到 _cluster/settings 来更新集群设置。

您可以在 udbsx/udbsx-25.0.0/config/udbsx-security/allowlist.yml 找到 allowlist.yml 文件。

虽然可以通过这种方式配置对端点的访问,但在大多数情况下,最好还是使用 Security 插件的用户和角色来配置权限,这些权限具有更精细的设置。

---
_meta:
  type: "allowlist"
  config_version: 2

# 描述:
# enabled - 功能标志。
# 如果 enabled 为 false,所有端点都可访问。
# 如果 enabled 为 true,除 SuperAdmin 外的所有用户只能向指定端点提交允许的请求。
# SuperAdmin 可以访问所有 API。
# SuperAdmin 由 SuperAdmin 证书定义,该证书通过 udbsx.yml 设置 plugins.security.authcz.admin_dn: 配置。
# 参考 udbsx.yml 中的示例设置以了解更多关于配置 SuperAdmin 的信息。
#
# requests - 允许列表的端点和 HTTP 请求的映射

# 此名称必须是 config
config:
  enabled: true
  requests:
    /_cluster/settings:
      - GET
    /_cat/nodes:
      - GET

要启用对集群设置的 PUT 请求,请将 PUT 添加到 /_cluster/settings 下的允许操作列表中。

requests:
  /_cluster/settings:
    - GET
    - PUT

还可以将自定义索引添加到允许列表中。allowlist.yml 不支持通配符,因此必须手动指定要添加的所有索引。

requests: # 仅允许对 /sample-index1/_doc/1 和 /sample-index2/_doc/1 的 GET 请求
  /sample-index1/_doc/1:
    - GET
  /sample-index2/_doc/1:
    - GET

internal_users.yml

此文件包含您要添加到 Security 插件内部用户数据库中的任何初始用户。您可以在 udbsx/udbsx-25.0.0/config/udbsx-security/internal_users.yml 找到此文件。

文件格式需要哈希密码。要生成一个,请运行 plugins/udbsx-security/tools/hash.sh -p <new-password>。如果您决定保留任何演示用户,请更改他们的密码并重新运行 securityadmin.sh 以应用新密码。

---
# 这是内部用户数据库
# hash 值是一个 bcrypt 哈希,可以使用 plugin/tools/hash.sh 生成

_meta:
  type: "internalusers"
  config_version: 2

# 在此处定义您的内部用户
new-user:
  hash: "$2y$12$88IFVl6IfIwCFh5aQYfOmuXVL9j2hz/GusQb35o.4sdTDAEMTOD.K"
  reserved: false
  hidden: false
  opendistro_security_roles:
  - "specify-some-security-role-here"
  backend_roles:
  - "specify-some-backend-role-here"
  attributes:
    attribute1: "value1"
  static: false

## 演示用户

admin:
  hash: "$2a$12$VcCDgh2NDk07JGN0rjGbM.Ad41qVR/YFJcgHp0UGns5JDymv..TOG"
  reserved: true
  backend_roles:
  - "admin"
  description: "Demo admin user"

kibanaserver:
  hash: "$2a$12$4AcgAt3xwOWadA5s5blL6ev39OXDNhmOesEoo33eZtrq2N0YrU3H."
  reserved: true
  description: "UDB-SX Dashboards 服务器的用户"

kibanaro:
  hash: "$2a$12$JJSXNfTowz7Uu5ttXfeYpeYE0arACvcwlPBStB1F.MI7f0U9Z4DGC"
  reserved: false
  backend_roles:
  - "kibanauser"
  - "readall"
  attributes:
    attribute1: "value1"
    attribute2: "value2"
    attribute3: "value3"
  description: "UDB-SX 仪表板的只读用户"

logstash:
  hash: "$2a$12$u1ShR4l4uBS3Uv59Pa2y5.1uQuZBrZtmNfqB3iM/.jL0XoV9sghS2"
  reserved: false
  backend_roles:
  - "logstash"
  description: " logstash 用户"

readall:
  hash: "$2a$12$ae4ycwzwvLtZxwZ82RmiEunBbIPiAmGZduBAjKN0TXdwQFtCwARz2"
  reserved: false
  backend_roles:
  - "readall"
  description: " readall 用户"

snapshotrestore:
  hash: "$2y$12$DpwmetHKwgYnorbgdvORCenv4NAK8cPUg8AI6pxLCuWf/ALc0.v7W"
  reserved: false
  backend_roles:
  - "snapshotrestore"
  description: " snapshotrestore 用户"

nodes_dn.yml

nodes_dn.yml 允许您将证书的可分辨名称 (DN) 添加到允许列表,以启用任意数量的节点或集群之间的通信。例如,在其允许列表中具有 DN CN=node1.example.com 的节点接受来自使用该 DN 的任何其他节点或证书的通信,nodes_dn.yml可在/udbsx/udbsx-25.0.0/config/udbsx-security/ 目录下获取。

DN 会被索引到系统索引中,只有超级管理员或具有传输层安全性 (TLS) 证书的管理员才能访问。如果您想以编程方式将 DN 添加到您的允许列表,请使用 REST API

---
_meta:
  type: "nodesdn"
  config_version: 2

# 定义 nodesdn 映射名称和相应的值
# cluster1:
#   nodes_dn:
#       - CN=*.example.com

roles_mapping.yml

---
manage_snapshots:
  reserved: true
  hidden: false
  backend_roles:
  - "snapshotrestore"
  hosts: []
  users: []
  and_backend_roles: []
logstash:
  reserved: false
  hidden: false
  backend_roles:
  - "logstash"
  hosts: []
  users: []
  and_backend_roles: []
own_index:
  reserved: false
  hidden: false
  backend_roles: []
  hosts: []
  users:
  - "*"
  and_backend_roles: []
  description: "允许对以用户名命名的索引进行完全访问"
kibana_user:
  reserved: false
  hidden: false
  backend_roles:
  - "kibanauser"
  hosts: []
  users: []
  and_backend_roles: []
  description: "将 kibanauser 映射到 kibana_user"
complex-role:
  reserved: false
  hidden: false
  backend_roles:
  - "ldap-analyst"
  hosts: []
  users:
  - "new-user"
  and_backend_roles: []
_meta:
  type: "rolesmapping"
  config_version: 2
all_access:
  reserved: true
  hidden: false
  backend_roles:
  - "admin"
  hosts: []
  users: []
  and_backend_roles: []
  description: "将 admin 映射到 all_access"
readall:
  reserved: true
  hidden: false
  backend_roles:
  - "readall"
  hosts: []
  users: []
  and_backend_roles: []
kibana_server:
  reserved: true
  hidden: false
  backend_roles: []
  hosts: []
  users:
  - "kibanaserver"
  and_backend_roles: []

roles.yml

roles.yml 可以在/udbsx/udbsx-25.0.0/config/udbsx-security/目录下查看,此文件包含您要添加到 Security 插件的任何初始角色。默认情况下,此文件包含预定义角色,这些角色授予对 UDB-SX 默认发行版中插件的使用权限。Security 插件还会自动添加许多静态角色。

---
complex-role:
  reserved: false
  hidden: false
  cluster_permissions:
  - "read"
  - "cluster:monitor/nodes/stats"
  - "cluster:monitor/task/get"
  index_permissions:
  - index_patterns:
    - "udbsx_dashboards_sample_data_*"
    dls: "{\"match\": {\"FlightDelay\": true}}"
    fls:
    - "~FlightNum"
    masked_fields:
    - "Carrier"
    allowed_actions:
    - "read"
  tenant_permissions:
  - tenant_patterns:
    - "analyst_*"
    allowed_actions:
    - "kibana_all_write"
  static: false
_meta:
  type: "roles"
  config_version: 2

tenants.yml

tenants.yml 可以在/udbsx/udbsx-25.0.0/config/udbsx-security/目录下查看。您可以使用此文件指定并向 UDB-SX 集群添加任意数量的 UDB-SX Dashboards 租户。

---
_meta:
  type: "tenants"
  config_version: 2
admin_tenant:
  reserved: false
  description: "管理员用户的演示租户"

udbsx.yml

udbsx.yml 位于 /udbsx/udbsx-25.0.0/config/ 目录下,除了许多 UDB-SX 设置外,udbsx.yml 文件还包含 TLS 证书及其属性(例如可分辨名称和受信任的证书颁发机构)的路径。

plugins.security.ssl.transport.pemcert_filepath: esnode.pem
plugins.security.ssl.transport.pemkey_filepath: esnode-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: root-ca.pem
plugins.security.ssl.transport.enforce_hostname_verification: false
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: esnode.pem
plugins.security.ssl.http.pemkey_filepath: esnode-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: root-ca.pem
plugins.security.allow_unsafe_democertificates: true
plugins.security.allow_default_init_securityindex: true
plugins.security.authcz.admin_dn:
  - CN=kirk,OU=client,O=client,L=test, C=de

plugins.security.audit.type: internal_udbsx
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.cache.ttl_minutes: 60
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
plugins.security.system_indices.enabled: true
plugins.security.system_indices.indices: [".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-anomaly-detection-state", ".opendistro-reports-*", ".opendistro-notifications-*", ".opendistro-notebooks", ".opendistro-asynchronous-search-response*"]
node.max_local_storage_nodes: 3

优化配置

plugins.security.allow_default_init_securityindex 设置为 true 时,如果 UDB-SX 启动时创建安全索引的尝试失败,则将 Security 插件设置为其默认安全设置。默认安全设置存储在 udbsx-project/security/config 目录中包含的 YAML 文件中。默认情况下,此设置为 false

plugins.security.allow_default_init_securityindex: true

Security 插件的身份验证缓存有助于通过临时存储从后端返回的用户对象来加速身份验证,这样 Security 插件就不需要重复请求它们。要确定缓存超时所需的时间,您可以使用 plugins.security.cache.ttl_minutes 属性设置一个以分钟为单位的值。默认值为 60。您可以通过将值设置为 0 来禁用缓存。

plugins.security.cache.ttl_minutes: 60

启用用户对系统索引的访问

将系统索引权限映射到用户允许该用户修改权限名称中指定的系统索引。plugins.security.system_indices.permission.enabled 设置提供了一种方式,让管理员可以将此权限设为可用于角色映射或对角色映射隐藏。

当设置为 true 时,功能启用,具有修改角色权限的用户可以创建包含授予对系统索引访问权限的权限的角色:

plugins.security.system_indices.permission.enabled: true

当设置为 false 时,权限被禁用,只有具有管理员证书的管理员才能更改系统索引。默认情况下,新集群中此权限设置为 false

密码设置

如果您想对用户密码进行一些验证,请在udbsx.yml中指定一个正则表达式 (regex)。您还可以包含当密码未通过验证时加载的错误消息。以下示例演示了如何指定一个正则表达式,规定UDB-SX 新密码至少为八个字符,并且至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符。

UDB-SX 仅验证通过 UDB-SX Dashboards 或 REST API 创建的用户和密码。

plugins.security.restapi.password_validation_regex: '(?=.*[A-Z])(?=.*[^a-zA-Z\d])(?=.*[0-9])(?=.*[a-z]).{8,}'
plugins.security.restapi.password_validation_error_message: "A password must be at least 8 characters long and contain at least one uppercase letter, one lowercase letter, one digit, and one special character."

基于分数的密码强度需要两个设置来配置该功能。下表描述了这两个设置。

设置 描述
plugins.security.restapi.password_min_length 设置密码长度的最小字符数。默认值为 8。这也是最小值。
plugins.security.restapi.password_score_based_validation_strength 设置一个阈值来确定密码是强还是弱。有四个值代表阈值递增的复杂度。
fair--一个非常“可猜测”的密码:提供针对受限制在线攻击的保护。
good--一个有点“可猜测”的密码:提供针对不受限制在线攻击的保护。
strong--一个安全"不可猜测"的密码:针对离线、慢速哈希场景提供适度保护。
very_strong--一个非常“不可猜测”的密码:针对离线、慢速哈希场景提供强有力的保护。

以下示例显示了为 udbsx.yml 文件配置的设置,并启用了至少 10 个字符且要求最高强度的密码:

plugins.security.restapi.password_min_length: 10
plugins.security.restapi.password_score_based_validation_strength: very_strong

当您尝试使用未达到指定阈值的密码创建用户时,系统会生成”弱密码”警告,指示您需要修改密码才能保存用户。

以下示例显示了当密码弱时创建用户 API 的响应:

{
  "status": "error",
  "reason": "Weak password"
}