注意

本文档适用于 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-proxymgmt-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”。

networks: List[str]

网络标识列表,指示守护进程只绑定在该列表中的特定网络上。如果集群分布在多个网络中,您可以添加多个网络。请参阅 网络和端口指定网络指定网络

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

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入