注意
本文档适用于 Ceph 的开发版本。
OAuth2 Proxy
部署 oauth2-proxy
从 Tentacle 版本开始的 Ceph 版本中,oauth2-proxy 服务引入了一种管理 Ceph 应用程序身份验证和访问控制的高级方法。此服务与外部身份提供程序 (IDP) 集成,通过 OIDC (OpenID Connect) 协议提供安全、灵活的身份验证。oauth2-proxy 充当身份验证网关,确保对 Ceph 应用程序(包括 Ceph Dashboard 和监控堆栈)的访问受到严格控制。
要部署 oauth2-proxy 服务,请使用以下命令
ceph orch apply oauth2-proxy [--placement ...] ...
应用后,cephadm 将重新配置必要的组件以使用 oauth2-proxy 进行身份验证,从而保护对所有 Ceph 应用程序的访问。该服务将处理登录流程,将用户重定向到适当的 IDP 进行身份验证,并管理会话令牌以实现无缝用户访问。
oauth2-proxy 服务的优势
增强的安全性:通过使用 OIDC 协议与外部 IDP 集成,提供强大的身份验证。无缝SSO:在所有 Ceph 应用程序中启用无缝单点登录 (SSO),改善用户访问控制。集中式身份验证:集中管理身份验证,降低复杂性并改善对访问的控制。
安全增强功能
oauth2-proxy 服务确保对 Ceph 应用程序的所有访问都经过身份验证,防止未经授权的用户访问敏感信息。由于它使用了 oauth2-proxy 开源项目,因此该服务可以轻松地与各种 外部 IDP 集成,提供安全灵活的身份验证机制。
高可用性
通常,oauth2-proxy 与 mgmt-gateway 结合使用。oauth2-proxy 服务可以部署为多个无状态实例,由 mgmt-gateway (nginx 反向代理) 使用循环策略处理这些实例之间的负载平衡。由于 oauth2-proxy 与外部身份提供程序 (IDP) 集成,因此登录的高可用性是在外部管理的,不属于此服务的责任。
使用 oauth2-proxy 访问服务
部署 oauth2-proxy 后,访问 Ceph 应用程序将需要通过配置的 IDP 进行身份验证。用户将被重定向到 IDP 进行登录,然后返回到所请求的应用程序。此设置确保了安全访问,并与 Ceph 管理堆栈无缝集成。
服务规范
在部署 oauth2-proxy 服务之前,请记住通过开启 --enable_auth 标志来部署 mgmt-gateway 服务。即
ceph orch apply mgmt-gateway --enable_auth=true
可以使用规范应用 oauth2-proxy 服务。YAML 示例如下
service_type: oauth2-proxy
service_id: auth-proxy
placement:
label: mgmt
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/dex"
client_secret: "your-client-secret"
cookie_secret: "your-cookie-secret"
ssl_certificate: |
-----BEGIN CERTIFICATE-----
MIIDtTCCAp2gAwIBAgIYMC4xNzc1NDQxNjEzMzc2MjMyXzxvQ7EcMA0GCSqGSIb3
DQEBCwUAMG0xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARVdGFoMRcwFQYDVQQHDA5T
[...]
-----END CERTIFICATE-----
ssl_certificate_key: |
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5jdYbjtNTAKW4
/CwQr/7wOiLGzVxChn3mmCIF3DwbL/qvTFTX2d8bDf6LjGwLYloXHscRfxszX/4h
[...]
-----END PRIVATE KEY-----
下面描述了 oauth2-proxy 服务 spec 部分特有的字段。有关字段的更详细描述,请参阅 oauth2-proxy 项目文档。
- class ceph.deployment.service_spec.OAuth2ProxySpec(service_type='oauth2-proxy', service_id=None, config=None, networks=None, placement=None, https_address=None, provider_display_name=None, client_id=None, client_secret=None, oidc_issuer_url=None, redirect_url=None, cookie_secret=None, ssl_cert=None, ssl_key=None, ssl=True, certificate_source=None, custom_sans=None, allowlist_domains=None, unmanaged=False, extra_container_args=None, extra_entrypoint_args=None, custom_configs=None)
- client_id
用于向身份提供程序进行身份验证的客户端 ID。
- client_secret
用于向身份提供程序进行身份验证的客户端密钥。
- https_address
HTTPS 连接的地址,格式为“host:port”。
- oidc_issuer_url
OpenID Connect (OIDC) 发行者的 URL。
- placement: PlacementSpec
请参阅 守护进程放置。
- provider_display_name
UI 中身份提供程序 (IDP) 的显示名称。
然后可以通过运行以下命令应用该规范。一旦可用,cephadm 将自动重新部署 mgmt-gateway 服务,同时调整其配置以将身份验证重定向到新部署的 oauth2-service。
ceph orch apply -i oauth2-proxy.yaml
限制
下面列出了 oauth2-proxy 服务的一些重要限制(非详尽列表)
不支持 oauth2-proxy 本身的高可用性配置。
IDP 和 OAuth2 参数的正确配置对于避免身份验证失败至关重要。配置错误可能导致访问问题。
容器镜像
可以通过运行以下命令找到 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