4.3. 配置身份验证和授权
默认情况下,AMQ Broker 使用 Java 身份验证和授权服务(JAAS)属性登录模块来身份验证和授权用户。默认 JAAS 登录模块的配置存储在每个代理 Pod 上的 /home/jboss/amq-broker/etc/login.config
文件中,并从同一目录中的 artemis-users.properties
和 artemis-roles.properties
文件中读取用户和角色信息。您可以通过更新 ActiveMQArtemisSecurity
自定义资源(CR),将用户和角色信息添加到默认登录模块中的属性文件中。
更新 ActiveMQArtemisSecurity
CR 以向默认属性文件添加用户和角色信息的替代方法是在默认属性文件中配置一个或多个 JAAS 登录模块。此 secret 作为每个代理 Pod 上的文件挂载。与使用 ActiveMQArtemisSecurity
CR 来添加用户和角色信息相比,在机密中配置 JAAS 登录模块具有以下优点:
- 如果您在 secret 中配置属性登录模块,则代理不需要在每次更新属性文件时重启。例如,当您将新用户添加到属性文件并更新 secret 时,更改会在不需要重启代理的情况下生效。
-
您可以配置
ActiveMQArtemisSecurity
CRD 中未定义的 JAAS 登录模块,以对用户进行身份验证。例如,您可以配置 LDAP 登录模块或任何其他 JAAS 登录模块。
以下部分介绍了为 AMQ Broker 配置身份验证和授权的方法。
4.3.1. 在 secret 中配置 JAAS 登录模块 复制链接链接已复制到粘贴板!
您可以在 secret 中配置 JAAS 登录模块,以使用 AMQ Broker 验证用户身份。创建 secret 后,您必须在主代理自定义资源(CR)中添加对 secret 的引用,并在 CR 中配置权限以授予用户对 AMQ Broker 的访问权限。
流程
创建一个带有新 JAAS 登录模块配置的文本文件,并将文件保存为
login.config
。将文件保存为login.config
,正确的密钥会插入到您从文本文件创建的 secret 中。注意您必须在
login.config
文件中包括 Operator 使用代理进行身份验证所需的凭证。您可以通过添加默认属性登录模块,该模块使用artemis-users.properties
和artemis.roles 属性文件
,如下例所示。或者,您可以将artemis-users.properties
和artemis.roles.properties
的内容添加到login.config
文件中配置的其他用户和角色属性文件。login.config
文件示例以下示例有一个属性登录模块,用于验证用户以及 Operator 使用代理进行身份验证所需的默认属性登录模块:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例有一个 LDAP 登录模块,用于验证用户以及 Operator 使用代理进行身份验证所需的默认属性登录模块:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将包含 Operator 用来与代理进行身份验证的凭证的属性文件放在
login.config
文件的末尾。这样可确保在代理验证 Operator 时载入所有登录模块中的属性文件。否则,自定义资源可能会具有状态消息,显示代理上一些属性文件不可见,直到使用所有登录模块为止。如果您创建的
login.config
文件包含属性登录模块,请确保模块中指定的用户和角色文件包含用户和角色信息。例如:- new-users.properties
ruben=ruben01! anne=anne01! rick=rick01! bob=bob01!
ruben=ruben01! anne=anne01! rick=rick01! bob=bob01!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - new-roles.properties
admin=ruben, rick group1=bob group2=anne
admin=ruben, rick group1=bob group2=anne
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用
oc create secret
命令从使用新登录模块配置创建的文本文件中创建 secret。如果登录模块配置包含属性登录模块,还要在机密中包含关联的用户和角色文件。例如:oc create secret generic custom-jaas-config --from-file=login.config --from-file=new-users.properties --from-file=new-roles.properties
oc create secret generic custom-jaas-config --from-file=login.config --from-file=new-users.properties --from-file=new-roles.properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意secret 名称必须具有后缀
-jaas-config
,以便 Operator 可以识别 secret 包含登录模块配置,并将任何更新传播到每个代理 pod。有关如何创建 secret 的更多信息,请参阅 Kubernetes 文档中的 Secret。
将您创建的 secret 添加到代理部署的自定义资源(CR)实例中。
创建
extraMounts
元素和一个secrets
元素,并添加 secret 的名称。以下示例将名为custom-jaas-config
的 secret 添加到 CR 中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 CR 中,向代理中配置的角色授予权限。
在 CR 的
spec
部分,添加一个brokerProperties
元素并添加权限。您可以为单个地址授予角色权限。或者,您可以使用#
符号指定通配符匹配,为所有地址授予角色权限。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在示例中,将 group2 角色分配给所有地址,并且分配 group1 角色使用 ,
createAddress
,createNonDurableQueue
和 浏览所有地址的权限。注意在 Java 属性文件中,冒号(:)是一个保留字符,用于分隔键/值对中的键和值。如果要向完全限定队列名称(FQQN)授予权限,它由地址名称和以冒号(::)分隔的队列名称组成,则必须使用反斜杠(\)字符来转义 FQQN 中的冒号字符。例如:
spec: ... brokerProperties: - 'securityRoles."my-address\:\:my-queue".group2.send=true'
spec: ... brokerProperties: - 'securityRoles."my-address\:\:my-queue".group2.send=true'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
保存 CR。
Operator 将
login.config
文件挂载到每个 pod 上的/amq/extra/secrets/secret 名称
目录中,并将 broker JVM 配置为读取挂载的login.config
文件,而不是默认的login.config
文件。如果login.config
文件包含属性登录模块,则引用的用户和角色属性文件也会挂载到每个 pod 上。查看 CR 中的状态信息,以验证部署中的代理是否使用 secret 中的 JAAS 登录模块进行身份验证。
-
在 CR 中,导航到
status
部分。 验证存在
JaasPropertiesApplied
类型,这表示代理正在使用机密中配置的 JAAS 登录模块。例如:- lastTransitionTime: "2023-02-06T20:50:01Z" message: "" reason: Applied status: "True" type: JaasPropertiesApplied
- lastTransitionTime: "2023-02-06T20:50:01Z" message: "" reason: Applied status: "True" type: JaasPropertiesApplied
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您更新 secret 中的任何文件时,
reason
字段的值会显示OutofSync
,直到 OpenShift Container Platform 将 secret 中的最新文件传播到每个代理 pod。例如,如果您向new-users-properties
文件中添加新用户并更新 secret,您会看到以下状态信息,直到更新的文件传播到每个 pod:- lastTransitionTime: "2023-02-06T20:55:20Z" message: 'new-users.properties status out of sync, expected: 287641156, current: 2177044732' reason: OutOfSync status: "False" type: JaasPropertiesApplied
- lastTransitionTime: "2023-02-06T20:55:20Z" message: 'new-users.properties status out of sync, expected: 287641156, current: 2177044732' reason: OutOfSync status: "False" type: JaasPropertiesApplied
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
在 CR 中,导航到
当您在 secret 中引用的属性文件中更新用户或角色信息时,请使用
oc set data
命令更新 secret。您必须再次将所有文件添加到 secret 中,包括login.config
文件。例如,如果您向此流程前面创建的new-users.properties
文件中添加新用户,请使用以下命令更新custom-jaas-config
secret:oc set data secret/custom-jaas-config --from-file=login.config=login.config --from-file=new-users.properties=new-users.properties --from-file=new-roles.properties=new-roles.properties
oc set data secret/custom-jaas-config --from-file=login.config=login.config --from-file=new-users.properties=new-users.properties --from-file=new-roles.properties=new-roles.properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
代理 JVM 仅在 login.config
文件中读取配置。如果您更改了 login.config
文件中的配置,例如,要添加新的登录模块并更新 secret,则代理不会在代理重启前使用新配置。
第 8.3 节 “示例:将 AMQ Broker 配置为使用 Red Hat Single Sign-On”
有关 JAAS 登录模块格式的详情,请参考 JAAS 登录配置文件。
4.3.2. 使用安全自定义资源(CR)配置默认的 JAAS 登录模块 复制链接链接已复制到粘贴板!
您可以使用 ActiveMQArtemisSecurity
自定义资源(CR)在默认的 JAAS 属性登录模块中配置用户和角色信息,以使用 AMQ Broker 验证用户身份。有关使用 secret 在 AMQ Broker 上配置身份验证和授权的替代方法,请参考 第 4.3.1 节 “在 secret 中配置 JAAS 登录模块”。
从 AMQ Broker 7.12 开始,ActiveMQArtemis Security
CR 已被弃用。
4.3.2.1. 使用安全自定义资源(CR)配置默认的 JAAS 登录模块 复制链接链接已复制到粘贴板!
先决条件
您必须已安装了 AMQ Broker Operator。有关安装 Operator 的两个替代方法的信息,请参考:
- 您应该熟悉代理安全性,如 保护代理中所述
您可以在创建代理部署前或之后部署安全 CR。但是,如果您在创建代理部署后部署安全 CR,则会重启代理 Pod 以接受新配置。
开始配置自定义资源(CR)实例,为代理部署定义用户和相关安全配置。
使用 OpenShift 命令行界面:
以有权在代理部署的项目中部署 CR 的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
oc login -u <user> -p <password> --server=<host:port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑部署的 CR。
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Container Platform Web 控制台:
- 以有权在代理部署的项目中部署 CR 的用户身份登录控制台。
-
在左侧窗格中,点
。 - 点 Red Hat Integration - AMQ Broker for RHEL 9 (Multiarch) operator。
- 点 AMQ Broker 选项卡。
- 单击 ActiveMQArtemis 实例名称
点 YAML 标签。
在控制台中,会打开 YAML 编辑器,允许您配置 CR 实例。
在 CR 的
spec
部分中,添加一行以定义用户和角色。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意始终为上例中的元素指定值。例如,如果您没有为
securityDomains.brokerDomain
或角色值指定值,则生成的配置可能会导致意外的结果。前面的配置定义了两个用户:
-
名为
prop-module
的属性LoginModule
,它定义一个名为sam
的用户,其角色为sender
。 -
名为
prop-module
的属性LoginModule
,它使用名为receiver
的角色定义一个名为rob
的用户。
这些角色的属性在
securityDomains
的brokerDomain
和broker
部分中定义。例如,定义了send
角色,以允许具有该角色的用户在任何地址上创建持久队列。默认情况下,配置适用于当前命名空间中 CR 定义的所有部署代理。要将配置限制到特定的代理部署,请使用 第 8.1.3 节 “安全自定义资源配置参考” 中描述的applyToCrNames
选项。注意在
metadata
部分中,需要包含namespace
属性,只有在使用 OpenShift Container Platform Web 控制台创建 CR 实例时,才指定值。您应该指定的值是代理部署的 OpenShift 项目的名称。-
名为
部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到代理部署的项目。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CR 实例。
oc create -f <path/to/security_custom_resource_instance>.yaml
$ oc create -f <path/to/security_custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
4.3.2.2. 将用户密码存储在 secret 中 复制链接链接已复制到粘贴板!
在 第 4.3.2.1 节 “使用安全自定义资源(CR)配置默认的 JAAS 登录模块” 过程中,用户密码以明文形式存储在 ActiveMQArtemisSecurity
CR 中。如果您不想将密码以明文形式存储在 CR 中,您可以从 CR 中排除密码,并将其存储在 secret 中。应用 CR 时,Operator 从 secret 检索每个用户的密码,并将其插入到代理 pod 上的 artemis-users.properties
文件中。
流程
使用
oc create secret
命令创建 secret 并添加每个用户的密码。secret 名称必须遵循security-properties-module name
的命名约定,其中 module name 是 CR 中配置的登录模块的名称。例如:oc create secret generic security-properties-prop-module \ --from-literal=sam=samspassword \ --from-literal=rob=robspassword
oc create secret generic security-properties-prop-module \ --from-literal=sam=samspassword \ --from-literal=rob=robspassword
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 CR 的
spec
部分,添加您在 secret 中指定的用户名以及角色信息,但不包含每个用户的密码。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到代理部署的项目。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CR 实例。
oc create -f <path/to/address_custom_resource_instance>.yaml
$ oc create -f <path/to/address_custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Web 控制台:
- 完成配置 CR 后,点 Create。
其他资源
如需有关 OpenShift Container Platform 中 secret 的更多信息,请参阅 OpenShift Container Platform 文档中的 向 pod 提供敏感数据。