将用户和组映射到角色编辑

除了 nativefile 以外,所有领域都支持角色映射。

native 和 file 领域将角色直接分配给用户。native 领域使用 用户管理 API。file 领域使用 基于文件的角色管理

您可以通过 角色映射 API(推荐)或 角色映射文件 来映射角色。

PKI、LDAP、AD、Kerberos、OpenID Connect、JWT 和 SAML 领域支持 角色映射 API。只有 PKI、LDAP 和 AD 领域支持 角色映射文件

PKI、LDAP、AD、Kerberos、OpenID Connect、JWT 和 SAML 领域还支持 委托授权。您可以为领域映射角色,也可以使用委托授权;您不能同时使用两者。

要使用角色映射,您需要创建角色和角色映射规则。角色映射规则可以基于领域名称、领域类型、用户名、组、其他用户元数据或这些值的组合。

启用匿名访问 时,匿名用户的角色也会分配给所有其他用户。

如果通过 API 创建了角色映射规则以及角色映射文件,则会将这些规则组合起来。单个用户可能拥有通过 API 映射的一些角色,以及根据角色映射文件分配的其他角色。您可以通过 API 定义角色映射,也可以通过 文件 管理角色映射。这两个角色映射来源在 Elasticsearch 安全功能中组合在一起,因此单个用户可能拥有通过 API 映射的一些角色,以及通过文件映射的其他角色。

没有分配角色的用户将无法执行任何操作。换句话说,他们可能能够进行身份验证,但他们将没有任何角色。没有角色意味着没有权限,没有权限意味着没有授权进行请求。

当您使用角色映射将角色分配给用户时,角色必须存在。角色有两个来源。可用的角色应使用 角色管理 API 添加,或在 角色文件 中定义。两种角色映射方法都可以使用任一角色管理方法。例如,当您使用角色映射 API 时,您可以将用户映射到 API 管理的角色和文件管理的角色(文件映射也一样)。

使用角色映射 API编辑

您可以通过 添加角色映射 API 定义角色映射。

使用角色映射文件编辑

要使用基于文件的角色映射,您必须在 YAML 文件中配置映射,并将其复制到集群中的每个节点。Puppet 或 Chef 等工具可以帮助您完成此操作。

默认情况下,角色映射存储在 ES_PATH_CONF/role_mapping.yml 中,其中 ES_PATH_CONFES_HOME/config(zip/tar 安装)或 /etc/elasticsearch(软件包安装)。要指定其他位置,请在 elasticsearch.yml 中的 Active DirectoryLDAPPKI 领域设置中配置 files.role_mapping 设置。

在角色映射文件中,安全角色是键,组和用户是值。映射可以具有多对多关系。当您将角色映射到组时,用户在该组中的角色是分配给该组的角色与分配给该用户的角色的组合。

默认情况下,Elasticsearch 每 5 秒检查一次角色映射文件是否有更改。您可以通过更改 elasticsearch.yml 文件中的 resource.reload.interval.high 设置来更改此默认行为。由于这是 Elasticsearch 中的常见设置,更改其值可能会影响系统中的其他计划。

虽然 *角色映射 API* 是管理角色映射的首选方式,但在以下几种情况下使用 role_mapping.yml 文件会很有用

  1. 如果您要定义固定角色映射,任何人都无法更改(除了具有 Elasticsearch 节点物理访问权限的管理员)。
  2. 如果集群管理依赖于来自外部领域的用户的,并且即使集群处于 RED 状态,也需要将角色映射到这些用户。例如,通过 LDAP 或 PKI 进行身份验证的管理员,并被分配管理员角色,以便他们可以执行纠正操作。

但是请注意,role_mapping.yml 文件仅作为最小管理功能提供,并非旨在涵盖所有用例并用于定义所有用例的角色。

您无法使用角色映射 API 查看、编辑或删除在角色映射文件中定义的任何角色。

领域特定详细信息编辑

Active Directory 和 LDAP 领域编辑

要指定角色映射中的用户和组,请使用它们的 *区分名称* (DN)。DN 是一个唯一标识用户或组的字符串,例如 "cn=John Doe,cn=contractors,dc=example,dc=com"

Elasticsearch 安全功能仅支持 Active Directory 安全组。您无法将分发组映射到角色。

例如,以下代码段使用基于文件的方法将 admins 组映射到 monitoring 角色,并将 John Doe 用户、users 组和 admins 组映射到 user 角色。

monitoring: 
  - "cn=admins,dc=example,dc=com" 
user:
  - "cn=John Doe,cn=contractors,dc=example,dc=com" 
  - "cn=users,dc=example,dc=com"
  - "cn=admins,dc=example,dc=com"

角色的名称。

LDAP 组或 Active Directory 安全组的区分名称。

LDAP 或 Active Directory 用户的区分名称。

您可以使用角色映射 API 定义等效映射,如下所示

PUT /_security/role_mapping/admins
{
  "roles" : [ "monitoring", "user" ],
  "rules" : { "field" : { "groups" : "cn=admins,dc=example,dc=com" } },
  "enabled": true
}
PUT /_security/role_mapping/basic_users
{
  "roles" : [ "user" ],
  "rules" : { "any" : [
      { "field" : { "dn" : "cn=John Doe,cn=contractors,dc=example,dc=com" } },
      { "field" : { "groups" : "cn=users,dc=example,dc=com" } }
  ] },
  "enabled": true
}
PKI 领域编辑

PKI 领域支持将用户映射到角色,但您无法映射组,因为 PKI 领域没有组的概念。

这是一个使用基于文件的映射的示例

monitoring:
  - "cn=Admin,ou=example,o=com"
user:
  - "cn=John Doe,ou=example,o=com"

以下示例使用 API 创建等效映射

PUT /_security/role_mapping/admin_user
{
  "roles" : [ "monitoring" ],
  "rules" : { "field" : { "dn" : "cn=Admin,ou=example,o=com" } },
  "enabled": true
}
PUT /_security/role_mapping/basic_user
{
  "roles" : [ "user" ],
  "rules" : { "field" : { "dn" : "cn=John Doe,ou=example,o=com" } },
  "enabled": true
}