第 4 章 保护对 Data Grid 服务器的访问
配置身份验证和加密机制,以保护对数据的访问并保护您的数据。
4.1. 定义 Data Grid Server Security Realms
安全域为 Data Grid 服务器端点提供身份、加密、身份验证和授权信息。
4.1.1. 属性 Realms
属性域使用属性文件来定义用户和组。
users.properties
以纯文本格式将用户名映射到密码。如果您使用 DIGEST-MD5
SASL 机制或 Digest
HTTP 机制,也可以预先提取密码。
myuser=a_password user2=another_password
groups.properties
将用户映射到角色。
myuser=supervisor,reader,writer user2=supervisor
属性域配置
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:11.0 https://infinispan.org/schemas/infinispan-server-11.0.xsd" xmlns="urn:infinispan:server:11.0"> <security-realms> <security-realm name="default"> <properties-realm groups-attribute="Roles"> 1 <user-properties path="users.properties" 2 relative-to="infinispan.server.config.path" 3 plain-text="true"/> 4 <group-properties path="groups.properties" 5 relative-to="infinispan.server.config.path"/> </properties-realm> </security-realm> </security-realms> </security>
支持的验证机制
属性域支持以下身份验证机制:
-
sasl:
PLAIN
,DIGEST114
, 和SCRAM114
-
HTTP (REST):
Basic
和Digest
4.1.1.1. 创建和修改用户
Data Grid Server 要求用户对默认属性域进行身份验证。在访问 Data Grid Server 之前,您必须至少创建一个用户和密码来添加凭证。您还可以添加和修改用户所属的安全授权组。
流程
-
在
$RHDG_HOME
中打开一个终端。 -
使用
user
命令创建和修改 Data Grid 用户。
使用 命令,运行 help user
的更多详细信息。
创建用户和密码
Linux
$ bin/cli.sh user create myuser -p "qwer1234!"
Microsoft Windows
$ bin\cli.bat user create myuser -p "qwer1234!"
创建具有组成员资格的用户
Linux
$ bin/cli.sh user create myuser -p "qwer1234!" -g supervisor,reader,writer
Microsoft Windows
$ bin\cli.bat user create myuser -p "qwer1234!" -g supervisor,reader,writer
4.1.2. LDAP 域
LDAP 域连接到 LDAP 服务器,如 OpenLDAP、红帽目录服务器、Apache 目录服务器或 Microsoft Active Directory,以验证用户并获取成员资格信息。
LDAP 服务器可以有不同的条目布局,具体取决于服务器和部署的类型。因此,LDAP 域配置比较复杂。本文档超出了本文档的范围,为所有可能的配置提供示例。
LDAP 域配置
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:11.0 https://infinispan.org/schemas/infinispan-server-11.0.xsd" xmlns="urn:infinispan:server:11.0"> <security-realms> <security-realm name="default"> <ldap-realm name="ldap" 1 url="ldap://my-ldap-server:10389" 2 principal="uid=admin,ou=People,dc=infinispan,dc=org" 3 credential="strongPassword" connection-timeout="3000" read-timeout="30000" 4 connection-pooling="true" referral-mode="ignore" page-size="30" direct-verification="true"> 5 <identity-mapping rdn-identifier="uid" 6 search-dn="ou=People,dc=infinispan,dc=org"> 7 <attribute-mapping> 8 <attribute from="cn" to="Roles" filter="(&(objectClass=groupOfNames)(member={1}))" filter-dn="ou=Roles,dc=infinispan,dc=org"/> </attribute-mapping> </identity-mapping> </ldap-realm> </security-realm> </security-realms> </security>
- 1
- 将 LDAP 域命名为。
- 2
- 指定 LDAP 服务器连接 URL。
- 3
- 指定要连接到 LDAP 服务器的主体和凭证。重要
LDAP 连接的主体必须具有执行 LDAP 查询和访问特定属性所需的权限。
- 4
- (可选)通过指定连接超时等来调优 LDAP 服务器连接。
- 5
- 验证用户凭据。Data Grid 会尝试使用配置的凭证连接到 LDAP 服务器。或者,您可以使用
user-password-mapper
元素来指定密码。 - 6
- 将 LDAP 条目映射到身份。
rdn-identifier
指定一个 LDAP 属性,它根据提供的标识符查找用户条目,通常是用户名;例如uid
或sAMAccountName
属性。 - 7
- 定义一个起始上下文,将搜索限制为包含用户条目的 LDAP 子树。
- 8
- 检索用户所属的所有组。通常可通过两种方式存储成员资格信息:
-
在组条目下,通常在
member
属性中具有 classgroupOfNames
。在这种情况下,您可以使用属性过滤器,如上例配置中所示。此过滤器搜索与提供的过滤器匹配的条目,该条目将找到与用户的 DN 相等的成员属性
的组。然后,过滤器提取组条目的 CN (由 指定),并将其添加到用户的Roles
中。 在
memberOf
属性的用户条目中。在这种情况下,您应该使用如下属性引用:<attribute-reference reference="memberOf" from="cn" to="Roles" />
此引用从用户条目中获取所有
memberOf
属性,提取由 指定的 CN,并将它们添加到用户的Roles
中。
-
在组条目下,通常在
支持的验证机制
LDAP 域直接支持以下身份验证机制:
-
sasl:
PLAIN
,DIGEST114
, 和SCRAM114
-
HTTP (REST):
Basic
和Digest
4.1.2.1. LDAP Realm Principal Rewriting
有些 SASL 身份验证机制,如 GSSAPI
、GS2-KRB5
和 Negotiate
,提供需要 清理 的用户名,然后才能使用它来搜索 LDAP 服务器。
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:server:11.0 https://infinispan.org/schemas/infinispan-server-11.0.xsd"
xmlns="urn:infinispan:server:11.0">
<security-realms>
<security-realm name="default">
<ldap-realm name="ldap"
url="ldap://${org.infinispan.test.host.address}:10389"
principal="uid=admin,ou=People,dc=infinispan,dc=org"
credential="strongPassword">
<name-rewriter> 1
<regex-principal-transformer name="domain-remover"
pattern="(.*)@INFINISPAN\.ORG"
replacement="$1"/>
</name-rewriter>
<identity-mapping rdn-identifier="uid"
search-dn="ou=People,dc=infinispan,dc=org">
<attribute-mapping>
<attribute from="cn" to="Roles"
filter="(&(objectClass=groupOfNames)(member={1}))"
filter-dn="ou=Roles,dc=infinispan,dc=org" />
</attribute-mapping>
<user-password-mapper from="userPassword" />
</identity-mapping>
</ldap-realm>
</security-realm>
</security-realms>
</security>
- 1
- 定义使用正则表达式从主体中提取用户名的重写器。
4.1.3. 信任存储域
信任存储域使用密钥存储,其中包含允许连接到 Data Grid 服务器的所有客户端的公共证书。
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:11.0 https://infinispan.org/schemas/infinispan-server-11.0.xsd" xmlns="urn:infinispan:server:11.0"> <security-realms> <security-realm name="default"> <server-identities> <ssl> <keystore path="server.p12" 1 relative-to="infinispan.server.config.path" 2 keystore-password="secret" 3 alias="server"/> 4 </ssl> </server-identities> <truststore-realm path="trust.p12" 5 relative-to="infinispan.server.config.path" keystore-password="secret"/> </security-realm> </security-realms> </security>
支持的验证机制
信任存储域使用 client-certificate 身份验证机制:
-
SASL:
EXTERNAL
-
HTTP (REST):
CLIENT_CERT
4.1.4. 令牌域
令牌域使用外部服务来验证令牌,并需要与 RFC-7662 (OAuth2 Token Introspection)兼容的提供程序,如 Red Hat SSO。
<security xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:server:11.0 https://infinispan.org/schemas/infinispan-server-11.0.xsd" xmlns="urn:infinispan:server:11.0"> <security-realms> <security-realm name="default"> <token-realm name="token" auth-server-url="https://oauth-server/auth/"> 1 <oauth2-introspection introspection-url="https://oauth-server/auth/realms/infinispan/protocol/openid-connect/token/introspect" 2 client-id="infinispan-server" 3 client-secret="1fdca4ec-c416-47e0-867a-3d471af7050f"/> 4 </token-realm> </security-realm> </security-realms> </security>
支持的验证机制
令牌域支持以下身份验证机制:
-
SASL: OAUTH
BEARER
-
HTTP (REST):
Bearer