4.5. 使用 OpenID Connect (OIDC)协议的 Ceph Dashboard SSO
Ceph 管理堆栈使用基于服务的模块化架构构建,该架构依赖于 nginx 和 oauth2-proxy 组件。
使用 OpenID Connect (OIDC)协议的 Ceph Dashboard SSO 是 Red Hat Ceph Storage 8.0 的一个技术预览功能
红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。如需了解更多详细信息,请参阅红帽技术预览功能的支持范围。
Ceph 管理网关(mgmt-gateway)为 Ceph 控制面板和监控提供统一访问、改进的用户体验和高可用性。
OAuth2 代理(oauth2-proxy)服务提供增强的安全性、无缝 SSO 和集中式身份验证管理。
自行启用 mgmt-gateway 服务,为集群提供单进入点、监控和仪表板的高可用性,以及提高安全性。启用服务与 oauth2-proxy 以使用 SSO。
使用 Ceph 管理网关(mgmt-gateway)和 OAuth2 代理(oauth2-proxy),在配置了单点登录(SSO)时,nginx 会自动通过 oauth2-proxy 将用户定向到配置的身份提供程序(IdP)。然后 IdP 运行身份验证并登录。
此配置提供以下优点:
- 统一访问。
- 改进的用户体验。
- Ceph 控制面板和监控的高可用性。
- 增强的安全性。
- 无缝 SSO。
- 集中式身份验证管理。
有关此模块 SSO 解决方案和使用 Ceph 控制面板实施的更多信息,请参阅启用 OAuth2 单点登录。
4.5.1. 使用 Ceph 管理网关(mgmt-gateway) 复制链接链接已复制到粘贴板!
Ceph 管理网关(mgmt-gateway)服务提供模块化、基于服务的架构设计。Cephadm 管理 'mgmt-gatewa'y 服务,该服务基于 nginx 构建。此网关充当 Ceph 集群的前端和单一入口点,为所有 Ceph 应用提供统一访问,包括 Ceph 控制面板和监控堆栈。
使用 Ceph 管理网关(mgmt-gateway)是 Red Hat Ceph Storage 8.0 的技术预览功能
红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。如需了解更多详细信息,请参阅红帽技术预览功能的支持范围。
使用 nginx 增强了安全性,并简化了访问管理,因为其强大的社区支持和高安全标准。mgmt-gateway 服务充当反向代理,将请求路由到适当的 Ceph 应用实例。自行使用 mgmt-gateway 或 OAuth2 Proxy 服务进行身份验证,以启用对 Ceph 控制面板的单点登录(SSO)访问。有关 OAuth2 代理服务的更多信息,请参阅使用 OAuth2 代理(oauth2-proxy)服务。
使用 Ceph 管理网关会带来多个优点。
- 统一访问
- 使用 Ceph 管理网关会带来多个优点。
- 改进了用户体验
- 用户不再需要跟踪每个应用程序的运行位置(IP 或 host)。
- Ceph 仪表板的高可用性
- Nginx 高可用性(HA)机制用于为 Ceph 控制面板提供高可用性。
- 监控的高可用性
- nginx 高可用性机制用于为监控提供高可用性。
部署 mgmt-gateway 提供增强的安全性。部署 mgmt-gateway 服务后,在没有通过 Ceph 控制面板进行身份验证的情况下无法访问监控服务。部署该服务后,可以通过 Ceph 仪表板上的链接访问 Prometheus、Grafana 和 Alertmanager 应用程序。要获取应用程序链接,请转至 Ceph 仪表板上的 Administration→Services。
使用 mgmt-gateway 模式时,Prometheus 和 Alertmanager 需要用户必须定义一个唯一的用户和密码。默认值为 admin:admin。
nginx HA 机制用于为所有 Ceph 管理应用提供高可用性,包括 Ceph 控制面板和监控堆栈。mgmt-gateway 服务透明处理管理器故障转移,并将用户重定向到活跃管理器。
通过监控,当有多个 Prometheus、Alertmanager 或 Grafana 实例可用时,Ceph Management 服务会处理 HA。反向代理会自动检测健康的实例,并使用它们来处理用户请求。
4.5.1.1. Ceph 管理网关限制 复制链接链接已复制到粘贴板!
使用 mgmt-gateway 服务有以下限制:
-
目前不支持
mgmt-gateway服务本身的高可用性配置和集群。 - 服务必须绑定到基于代理的应用程序的适当端口。确保没有端口冲突可能会破坏服务可用性。
mgmt-gateway服务内部利用 nginx 反向代理。使用以下命令查找默认容器镜像:DEFAULT_NGINX_IMAGE = 'quay.io/ceph/NGINX_IMAGE'存储管理员可以通过更改
container_image_nginxcephadm 模块选项来更改所使用的镜像。如果其他守护进程正在运行,您必须重新部署守护进程以使用新镜像。ceph config set mgr mgr/cephadm/container_image_nginx NEW_NGINX_IMAGE ceph orch redeploy mgmt-gateway
4.5.1.2. 使用命令行界面启用 Ceph 管理网关 复制链接链接已复制到粘贴板!
启用 Ceph 管理网关,以便访问控制面板和 Ceph 集群。使用此信息,通过 cephadm CLI 命令启用 mgmt-gateway 服务。
步骤
部署 mgmt-gateway 服务。
语法
ceph orch apply mgmt-gateway [--placement=DESTINATION_HOST] [--enable-auth=true]注意需要
--enable-auth=true参数启用带有oauth2-proxy的 SSO。示例
[ceph: root@host01 /]# ceph orch apply mgmt-gateway --placement=host01- 验证服务是否已正确部署。
4.5.1.3. 使用服务规格文件启用 Ceph 管理网关 复制链接链接已复制到粘贴板!
启用 Ceph 管理网关,以便访问控制面板和 Ceph 集群。使用此信息通过服务规格文件启用 mgmt-gateway 服务。
先决条件
在启用 Ceph 管理网关之前,请确保以下内容位于 mgmt-gateway 服务将在其中运行的每个 Ceph 节点上:
- 网关服务使用的端口。
- 一个正在运行的 Red Hat Ceph Storage 集群。
- (可选)正在使用的 SSL 协议。
- (可选)SSL 密码。
- (可选)SSL 证书和密钥密钥。
有关 SSL 协议、密码、证书和证书密钥的更多信息,请参阅 Red Hat Enterprise Linux 文档中的 部署 Web 服务器和反向代理。
步骤
为
mgmt-gateway服务创建一个 YAML 文件。示例
[root@host01 ~]# touch mgmt-gateway.yaml编辑 YAML 文件,使其包含以下详情:
重要以下字段是可选的:
ssl_protocols,ssl_ciphers, 和ssl_certificate。省略时,mgmt-gateway服务使用安全且安全的配置。允许更改这些字段,但应小心操作,因为这会破坏您系统的安全性。语法
service_type: mgmt-gateway placement: hosts: - ceph-node-1 spec: port: 9443 ssl_protocols: # Optional - TLSv1.3 ssl_ciphers: # Optional - AES128-SHA - AES256-SHA - RC4-SHA ssl_cert: | # Optional -----BEGIN CERTIFICATE----- < YOU CERT DATA HERE > -----END CERTIFICATE----- ssl_key: | -----BEGIN RSA PRIVATE KEY----- < YOU PRIV KEY DATA HERE > -----END RSA PRIVATE KEY-----重要使用 TLSv1.3 SSL 协议。TLSv1.3 默认包含一组安全密码。虽然支持 TLSv1.2,但在使用此协议时只使用安全密码的子集。使用弱或过时的密码可能会显著破坏您的系统的安全性。
示例
service_type: mgmt-gateway service_id: gateway placement: hosts: - ceph0 spec: port: 5000 ssl_protocols: - TLSv1.3 - ... ssl_ciphers: - AES128-SHA - AES256-SHA - ... ssl_cert: | -----BEGIN CERTIFICATE----- MIIDtTCCAp2gAwIBAgIYMC4xNzc1NDQxNjEzMzc2MjMyXzxvQ7EcMA0GCSqGSIb3 DQEBCwUAMG0xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARVdGFoMRcwFQYDVQQHDA5T [...] -----END CERTIFICATE----- ssl_key: | -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5jdYbjtNTAKW4 /CwQr/7wOiLGzVxChn3mmCIF3DwbL/qvTFTX2d8bDf6LjGwLYloXHscRfxszX/4h [...] -----END PRIVATE KEY-----下表列出了特定于 spec 文件的
mgmt-gateway服务部分的字段(ceph.deployment.service_spec.MgmtGatewaySpec)。Expand 表 4.1. spec 文件中的 mgmt-gateway 特定字段 字段 描述 disable_https是禁用 HTTPS 的标记。如果为 True,服务器将使用不安全的 HTTP。
enable_auth是启用 SSO 身份验证的标志。要求 oauth2-proxy 处于活动状态,以进行 SSO 身份验证。
networks网络身份列表,指示守护进程仅在该列表中的特定网络上绑定。如果集群在多个网络间分布,您可以添加多个网络。
placement若要让编配器部署服务,需要知道部署守护进程的位置以及要部署的数量。这是放置规格的角色。放置规格可以作为命令行参数或 YAML 文件传递。有关更多信息,请参阅使用 Ceph 编排器管理服务。
port服务器将侦听的端口号。
server_tokens标记响应中的服务器令牌:在
上、关闭、构建、字符串。ssl_cert包含 SSL 证书的多行字符串。
ssl_key包含 SSL 密钥的多行字符串。
ssl_ciphers支持的安全 SSL 密码列表。更改此列表可能会降低系统安全性。
ssl_prefer_server_ciphers首选使用客户端密码的服务器密码:
在 上,关闭。ssl_protocols支持的 SSL 协议列表(如 nginx 支持的)。
ssl_session_cacheSSL/TLS 会话缓存持续时间:
off,none,[builtin[:size] ,[shared:name:size].ssl_session_tickets控制会话票据的多选项标志:
在 上,关闭。ssl_session_timeoutSSL 会话超时的持续时间。语法:时间(例如
5m)。ssl_stapling用于启用或禁用 SSL stapling:
on的标志,关闭。ssl_stapling_verify用于控制 SSL stapling 的验证的标志:
在 上,关闭。应用规格文件。
语法
[root@host01 ~]# ceph orch apply -i mgmt-gateway.yaml
4.5.2. 使用 OAuth2 代理(oauth2-proxy)服务 复制链接链接已复制到粘贴板!
OAuth2 代理服务提供了一种高级方法,用于管理 Ceph 应用的身份验证和访问控制。oauth2-proxy 服务与外部身份提供程序(IdP)集成,以提供带有 OpenID Connect (OIDC)协议的安全、灵活的身份验证。oauth2-proxy 充当身份验证网关,确保对 Ceph 应用程序的访问被严格控制。
使用 OAuth2 代理(oauth2-proxy)服务是 Red Hat Ceph Storage 8.0 的技术预览功能
红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。如需了解更多详细信息,请参阅红帽技术预览功能的支持范围。
将 OAuth2 代理服务与身份验证一起使用需要使用 Ceph 管理网关(mgmt-gateway)。有关更多信息,请参阅使用 Ceph 管理网关(mgmt-gateway)。
使用 oauth2-proxy 服务会提供多个优点。
- 增强的安全性
- 使用 OIDC 协议通过与外部 IdP 集成提供可靠的身份验证。
- 无缝单点登录(SSO)
- 在所有 Ceph 监控应用程序中启用无缝 SSO,改进了用户访问控制。有关为 Ceph 控制面板启用 OAuth2 SSO 的更多信息,请参阅启用 OAuth2 单点登录。
- 集中身份验证
- 集中身份验证管理,降低复杂性并改进了对访问的控制。
部署 oauth2-proxy 服务提供增强的安全性。部署 oauth2-proxy 服务后,所有对 Ceph 应用程序的访问必须通过使用 OIDC 的外部 IdP 进行身份验证。身份验证可防止未授权用户访问敏感信息。用户将重定向到 IdP 以登录,然后返回到请求的应用程序。这个设置可确保安全访问,并与 Ceph 管理堆栈无缝集成。Prometheus、Alertmanager 和 Grafana Ceph 应用程序都需要通过所需的 IdP 进行身份验证。
oauth2-proxy 服务使用 OAuth 提供程序开源项目,使服务与各种外部 IdP 集成,提供安全且灵活的身份验证机制。有关有效 OAuth 提供程序的完整列表,请参阅 OAuth2 Proxy Docs 上的 OAuth Provider 配置。
4.5.2.1. OAuth2 代理限制 复制链接链接已复制到粘贴板!
oauth2-proxy 服务不支持高可用性配置。
正确配置 IdP 和 OAuth2 代理参数对于避免身份验证失败至关重要。错误配置可能会导致访问问题。
4.5.2.2. 使用红帽单点登录 7.6.0 创建管理员帐户 复制链接链接已复制到粘贴板!
创建 admin 帐户,将 OAuth2 服务同步到 Ceph 控制面板。
使用 Red Hat Single Sign-on (SSO)将用户同步到 Ceph 仪表板。请参阅 使用红帽单点登录将用户同步到 Ceph 仪表板。
如需更多信息,请参阅以下:
先决条件
在开始前,请确保您有以下先决条件:
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 已安装仪表板。
- 控制面板的管理员级别访问权限。
- 用户添加到仪表板中。
- 所有主机上的 root 级别访问权限。
- 安装了 Java OpenJDK。如需更多信息,请参阅 Red Hat 文档 中的 Installing and using OpenJDK 8 for RHEL 指南中的 Installing a JRE on RHEL by using yum 部分。
- 从 ZIP 文件安装的 Red Hat Single Sign-On。如需更多信息,请参阅 Red Hat Single Sign -On 7.6 Server installation and Configuration Guide 中的 ZIP 文件安装 RH-SSO。https://docs.redhat.com/en/documentation/
步骤
- 将 Red Hat Single Sign-On 7.6.0 Server 下载到安装 IBM Storage Ceph 的系统上。有关下载软件包和信息,请参阅红帽客户门户网站中的 Red Hat Single Sign-On 7.6.0 Server 的软件 详情。 https://access.redhat.com/jbossnetwork/restricted/softwareDetail.html?softwareId=104539&product=core.service.rhsso&version=7.6&downloadType=distributions
提取文件夹:
语法
[root@host01 ~]# unzip rhsso-7.6.0.zip进入新创建的
rhsso-7.6.0目录下的独立/配置目录,并打开standalone.xml文件进行编辑语法
[root@host01 ~]# cd standalone/configuration [root@host01 configuration]# vi standalone.xml-
将
localhost和127.0.0.1替换为安装 Red Hat Single-Sign On 的服务器的 IP 地址。 在新创建的
rhsso-7.6.0文件夹的bin目录中,运行add-user-keycloak脚本来添加初始管理员用户:语法
[root@host01 bin]# ./add-user-keycloak.sh -u admin可选: Red Hat Enterprise Linux 8 或更高版本的用户可能会获得证书颁发机构(CA)问题。从 CA 导入自定义证书,并将它们移到带有确切的 Java 版本的密钥存储中。
语法
keytool -import -noprompt -trustcacerts -alias ca -file ../ca.cer -keystore /etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.272.b10-3.el8_3.x86_64/lib/security/cacert启动服务器。在
rh-sso-7.6文件夹的bin目录中,运行独立引导脚本:[root@host01 bin]# ./standalone.sh使用创建的新用户名和密码,登录
https:IP_ADDRESS:8080/auth中的 admin 帐户。注意只有在第一次登录到控制台时,才需要创建一个 admin 帐户。
4.5.2.2.1. 使用带有 OAuth2 协议的红帽 SSO 为 OAuth2-proxy 设置 IdP 复制链接链接已复制到粘贴板!
从 Red Hat Single Sign-On 控制台完成这些步骤。
步骤
- 创建 realm。realm 必须是 Enabled。
进入 Realm Settings adn 完成所需的设置。
- 将 Enabled 切换到 ON。
- 将 用户管理的访问切换为 ON。
- 单击 OpenID Endpoint Configuration 的链接地址,以检索 OAuth2 配置所需的端点。签发者端点在 OAuth2 服务配置过程中使用。
- 创建客户端。将客户端 协议 设置为 openid-connect。
更新客户端设置。
- 将 Access Type 设置为 confidential。
输入 Valid Redirect URI。例如:
https://<ip|hostname>/oauth2/callback和https://<ip|hostname>/oauth2/sign_out
-
验证客户端凭据。检查 Client Authenticator 是否已设置为 Client Id 和 Secret。在配置
oauth2-proxy服务时,secret 用作 client_secret 参数。 -
创建新管理员角色。输入
administrator作为角色名称。 更新管理员信息。
- 前往 Manage→Users→Add User。填写 用户名、电子邮件、名字、姓氏,并将 电子邮件验证 切换为 ON。
- 从 Credentials,为管理员用户设置新密码凭据。
- 从 角色映射 中,将 Client Roles 设置为在第 3 步中创建的客户端,然后点第 6 步中创建的 管理员角色 的 Add selected。
4.5.2.3. 启用 OAuth2 代理服务 复制链接链接已复制到粘贴板!
启用 OAuth2 代理服务,以便 SSO 访问控制面板和 Ceph 集群。使用 cephadm CLI 命令或使用服务规格文件启用 oauth2-proxy 服务。
运行 ceph config get 命令查找 oauth2-proxy 容器镜像。
ceph config get mgr mgr/cephadm/container_image_oauth2_proxy
存储管理员可以通过更改 container_image_oauth2_proxy cephadm 模块选项来指定自定义镜像。如果其他守护进程正在运行,您必须重新部署守护进程以使用新镜像。
ceph config set mgr mgr/cephadm/container_image_oauth2_proxy NEW_OAUTH2_PROXY_IMAGE
ceph orch redeploy oauth2_proxy
先决条件
在开始前,请确保您有以下先决条件:
-
Ceph 管理网关(
mgmt-gateway)服务被启用,---enable-auth被设置为 true。有关更多信息,请参阅使用 Ceph 管理网关(mgmt-gateway)。 - 您应该拥有运行 Red Hat Single-Sign-On 7.6.0 的 admin 帐户,运行 OAuth2 协议,或 IBM Security Verify with OAuth2 协议正在运行。如需更多信息,请参阅使用 OAuth2 协议将 IBM 安全验证配置为身份提供程序。
4.5.2.3.1. 使用命令行界面启用 OAuth2 代理服务 复制链接链接已复制到粘贴板!
步骤
部署
oauth2-proxy服务。语法
ceph orch apply oauth2-proxy [--placement=DESTINATION_HOST]示例
[ceph: root@host01 /]# ceph orch apply oauth2-proxy [--placement=host01]- 验证服务是否已正确部署。
4.5.2.3.2. 使用服务规格文件启用 OAuth2 代理服务 复制链接链接已复制到粘贴板!
启用 OAuth2 代理服务,以便 SSO 访问控制面板和 Ceph 集群。使用此信息通过服务规格文件启用 oauth2-proxy 服务。
先决条件
在启用 OAuth2 代理服务前,请确保以下位于 oauth2-proxy 服务将在其中运行的每个 Ceph 节点上:
- 您的客户端 ID。
- OIDC 签发者 URL。
- 客户端机密.
允许的相关域地址。
注意域可以是与
oidc_issuer_url相同或不同。- 一个正在运行的 Red Hat Ceph Storage 集群。
- (可选)主机 HTTPS 地址和主机端口。
- (可选) Cookie secret。
- (可选)SSL 证书和密钥密钥。
有关 SSL 协议、密码、证书和证书密钥的更多信息,请参阅 Red Hat Enterprise Linux 文档中的 部署 Web 服务器和反向代理。
步骤
为
oauth2-proxy服务创建一个 YAML 文件。示例
[root@host01 ~]# touch oauth2-proxy.yaml编辑 YAML 文件,使其包含以下详情:
语法
service_type: oauth2-proxy service_id: auth-proxy placement: hosts: - ceph-node-1 spec: https_address: HTTPS_ADDRESS:PORT provider_display_name: MY OIDC PROVIDER client_id: CLIENT_ID oidc_issuer_url: OIDC ISSUER URL allowlist_domains: - HTTPS_ADDRESS:PORT client_secret: CLIENT_SECRET cookie_secret: COOKIE_SECRET ssl_cert: | -----BEGIN CERTIFICATE----- < YOU CERT DATA HERE > -----END CERTIFICATE----- ssl_key: | -----BEGIN RSA PRIVATE KEY----- < YOU PRIV KEY DATA HERE > -----END RSA PRIVATE KEY-----示例
service_type: oauth2-proxy service_id: auth-proxy placement: hosts: - ceph0 spec: https_address: "0.0.0.0:4180" provider_display_name: "My OIDC Provider" client_id: "your-client-id" oidc_issuer_url: "http://192.168.100.1:5556/realms/ceph" allowlist_domains: - 192.168.100.1:8080 - 192.168.200.1:5000 client_secret: "your-client-secret" cookie_secret: "your-cookie-secret" ssl_cert: | -----BEGIN CERTIFICATE----- MIIDtTCCAp2gAwIBAgIYMC4xNzc1NDQxNjEzMzc2MjMyXzxvQ7EcMA0GCSqGSIb3 DQEBCwUAMG0xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARVdGFoMRcwFQYDVQQHDA5T [...] -----END CERTIFICATE----- ssl_key: | -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5jdYbjtNTAKW4 /CwQr/7wOiLGzVxChn3mmCIF3DwbL/qvTFTX2d8bDf6LjGwLYloXHscRfxszX/4h [...] -----END PRIVATE KEY-----下表列出了特定于 spec 文件的
oauth2-proxy服务部分的字段(ceph.deployment.service_spec.OAuth2ProxySpec)。Expand 表 4.2. spec 文件中的 oauth2-proxy 特定字段 字段 描述 allowlist_domains登录或注销后允许进行安全重定向的域列表,防止未经授权的重定向。这可以与
oidc_issuer_url相同或不同。client_id用于与身份提供程序进行身份验证的客户端 ID。
client_secret用于与身份提供程序进行身份验证的客户端 secret。
cookie_secretsecret 密钥用于签名 Cookie。其长度必须为 16 字节、24 字节或 32 字节才能创建 AES 密码。
https_addressHTTPS 连接的地址,其格式为
host:port。networks网络身份列表,指示守护进程仅在该列表中的特定网络上绑定。如果集群在多个网络间分布,您可以添加多个网络。
oidc_issuer_urlOpenID Connect (OIDC)签发者的 URL。
placement若要让编配器部署服务,需要知道部署守护进程的位置以及要部署的数量。这是放置规格的角色。放置规格可以作为命令行参数或 YAML 文件传递。有关更多信息,请参阅使用 Ceph 编排器管理服务。
provider_display_nameUI 中的身份提供程序(IDP)的显示名称。
redirect_url可选。URL oauth2-proxy 将在成功登录后重定向到。如果没有提供,cephadm 会自动计算此 URL 的值。
ssl_cert包含 SSL 证书的多行字符串。
ssl_key包含 SSL 密钥的多行字符串。
应用规格文件。
语法
[root@host01 ~]# ceph orch apply -i oauth2-proxy.yaml