配置安全后端
设置 Security 插件的首批步骤之一是决定使用哪个认证后端。后端在认证中扮演的角色在认证流程的第 2 步和第 3 步中有所介绍。该插件有一个内部用户数据库,但许多人更喜欢使用现有的认证后端,例如 LDAP 服务器,或者两者的某种组合。
用于配置认证和授权后端的主要文件是 /usr/share/opensearch/config/opensearch-security/config.yml。此文件定义了 Security 插件如何检索用户凭据、如何验证凭据以及当为认证和授权选择的后端支持此功能时,插件如何获取附加角色。本主题提供了配置文件及其安全设置要求的概览。有关配置特定后端的信息,请参阅认证后端。
config.yml 文件包含三个主要部分
config:
dynamic:
http:
...
authc:
...
authz:
...
以下部分描述了 config.yml 文件每个主要部分的元素,并提供了其配置的基本示例。有关更详细的示例,请参阅 GitHub 上的示例文件。
HTTP
http 部分包含以下格式
http:
anonymous_auth_enabled: <true|false>
xff: # optional section
enabled: <true|false>
internalProxies: <string> # Regex pattern
remoteIpHeader: <string> # Name of the header in which to look. Typically: x-forwarded-for
proxiesHeader: <string>
trustedProxies: <string> # Regex pattern
此配置中使用的设置在下表中描述。
| 设置 | 描述 |
|---|---|
anonymous_auth_enabled | 启用或禁用匿名认证。当设置为 true 时,HTTP 认证器会尝试在 HTTP 请求中查找用户凭据。如果找到凭据,用户将获得认证。如果未找到,用户将被认证为匿名用户。该用户将拥有用户名 anonymous 和一个名为 anonymous_backendrole 的角色。启用匿名认证时,所有定义的 HTTP 认证器都是非挑战性的。有关更多信息,请参阅挑战设置。 |
xff | 用于配置基于代理的认证。有关此后端更多信息,请参阅基于代理的认证。 |
有关如何配置匿名认证的说明,请参阅匿名认证。
身份验证
authc 部分具有以下格式
authc:
<domain_name>:
http_enabled: <true|false>
transport_enabled: <true|false>
order: <integer>
http_authenticator:
...
authentication_backend:
...
authc 部分中的一个条目称为认证域。它指定了从何处获取用户凭据以及应针对哪个后端进行认证。
您可以使用多个认证域。每个认证域都有一个名称(例如,basic_auth_internal)、用于在 REST 和传输层启用域的设置以及一个 order(顺序)。顺序使得将认证域链接在一起成为可能。Security 插件按照您提供的顺序使用它们。如果用户成功通过一个域进行认证,Security 插件会跳过剩余的域。
通常在此配置部分中找到的设置包含在下表中。
| 设置 | 描述 |
|---|---|
http_enabled | 启用或禁用 REST 层的认证。默认值为 true(启用)。 |
transport_enabled | 启用或禁用传输层的认证。默认值为 true(启用)。 |
顺序 | 当多个后端组合配置时,此设置决定了认证请求查询认证域的顺序。一旦认证成功,就不需要查询剩余的域。其值为整数。 |
http_authenticator 定义指定了 HTTP 层的认证方法。以下示例显示了定义 HTTP 认证器所使用的语法
http_authenticator:
type: <type>
challenge: <true|false>
config:
...
http_authenticator 的 type 设置接受以下值。有关每个认证选项的更多信息,请参阅后续步骤中的认证后端链接。
| 值 | 描述 |
|---|---|
basic | HTTP 基本认证。有关使用基本认证的更多信息,请参阅 HTTP 基本认证文档。 |
kerberos | Kerberos 认证。有关附加配置信息,请参阅 Kerberos 文档。 |
jwt | JSON Web Token (JWT) 认证。有关附加配置信息,请参阅 JSON Web Token 文档。 |
openid | OpenID Connect 认证。有关附加配置信息,请参阅 OpenID Connect 文档。 |
saml | SAML 认证。有关附加配置信息,请参阅 SAML 文档。 |
proxy, extended-proxy | 基于代理的认证。extended-proxy 类型认证器允许您传递额外的用户属性,用于文档级安全。有关附加配置信息,请参阅基于代理的认证文档。 |
clientcert | 通过客户端 TLS 证书进行认证。此证书必须受节点信任存储中某个根证书颁发机构 (CA) 的信任。有关附加配置信息,请参阅客户端证书认证文档。 |
设置 HTTP 认证器后,您必须指定要对用户进行认证的后端系统
authentication_backend:
type: <type>
config:
...
下表显示了 authentication_backend 下 type 设置的可能值。
| 值 | 描述 |
|---|---|
noop | 不会对任何后端系统执行进一步认证。如果 HTTP 认证器已经完全认证了用户,例如在 JWT 或客户端证书认证的情况下,请使用 noop。 |
internal | 使用 internal_users.yml 中定义的用户和角色进行认证。 |
ldap | 针对 LDAP 服务器对用户进行身份验证。此设置需要额外的 LDAP 特定配置设置。 |
授权
authz 配置用于从 LDAP 实现中提取后端角色。用户通过身份验证后,Security 插件可以选择性地从后端系统收集其他角色。授权配置具有以下格式
authz:
<name>:
http_enabled: <true|false>
transport_enabled: <true|false>
authorization_backend:
type: <type>
config:
...
您可以在此部分中定义多个条目,就像身份验证条目一样。但是,在这种情况下,执行顺序不相关,并且不使用 order 设置。
下表显示了 authorization_backend 下 type 设置的可能值。
| 值 | 描述 |
|---|---|
noop | 完全跳过授权配置步骤。 |
ldap | 从 LDAP 服务器获取其他角色。此设置需要额外的 LDAP 特定配置设置。 |
后端配置示例
OpenSearch 发行版中包含的默认 config/opensearch-security/config.yml 文件包含许多配置示例。请使用这些示例作为起点,并根据您的需要进行自定义。
后续步骤
要了解如何配置身份验证后端,请参阅身份验证后端文档。或者,您可以通过使用以下主题列表中的链接来查看特定后端的文档
- HTTP 基本认证
- JSON Web Token
- OpenID Connect
- SAML
- Active Directory 和 LDAP
- 基于代理的身份验证
- 客户端证书身份验证
- Kerberos 身份验证