注意

本文档适用于 Ceph 开发版本。

OAuth2 代理

部署oauth2-proxy

从Squid开始的Ceph版本中,oauth2-proxy服务引入了一种高级方法来管理Ceph应用的认证和访问控制。该服务与外部身份提供者(IDP)集成,通过OIDC(OpenID Connect)协议提供安全、灵活的认证。oauth2-proxy作为认证网关,确保对Ceph应用的访问(包括Ceph仪表板和监控堆栈)受到严格控制。

要部署oauth2-proxy服务,请使用以下命令:

ceph orch apply oauth2-proxy [--placement ...] ...

应用后,cephadm将重新配置必要的组件以使用oauth2-proxy进行认证,

oauth2-proxy服务的优势

  • Enhanced Security: 通过使用OIDC协议与外部IDP集成,提供强大的认证。

  • Seamless SSO: 在所有Ceph应用中启用无缝单点登录(SSO),改进用户访问控制。

  • Centralized Authentication: 集中管理认证,减少复杂性并提高对访问的控制。

安全增强功能

The oauth2-proxy服务确保对Ceph应用的所有访问都经过认证,防止未经授权的用户访问敏感信息。由于它使用了oauth2-proxy开源项目,该服务可以轻松地与各种外部IDPs集成,以提供安全且灵活的认证机制。

高可用性

通常,oauth2-proxymgmt-gateway一起使用。该oauth2-proxy服务可以部署为多个无状态的实例,而mgmt-gateway(nginx反向代理)使用轮询策略在这些实例之间处理负载均衡。由于oauth2-proxy与外部身份提供者(IDP)集成,因此登录的高可用性由外部管理,而不是该服务的责任。

使用oauth2-proxy访问服务

部署oauth2-proxy后,访问Ceph应用将需要通过配置的IDP进行认证。用户将被重定向到IDP进行登录,然后返回到请求的应用。这种设置确保了安全的访问,并与Ceph管理堆栈无缝集成。

服务规范

在部署oauth2-proxy服务之前,请记住通过打开mgmt-gateway服务来部署--enable_auth标志。即:

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-----

特定于spec部分的oauth2-proxy服务的字段如下所述。字段的更详细描述可以在oauth2-proxy项目文档中找到。

class ceph.deployment.service_spec.OAuth2ProxySpec(service_type='oauth2-proxy', service_id=, config=, 网络=, placement=, https_address=, provider_display_name=, client_id=, client_secret=, oidc_issuer_url=, redirect_url=, cookie_secret=, ssl_cert=, ssl_key=, allowlist_domains=, unmanaged=False, extra_container_args=, extra_entrypoint_args=, custom_configs=)
client_id

用于向身份提供者进行身份验证的客户ID。

client_secret

用于向身份提供者进行身份验证的客户密钥。

https_address

HTTPS连接的地址,格式为“主机:端口”。

网络: 列表[字符串]

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

oidc_issuer_url

OpenID Connect(OIDC)发行者的URL。

placement: PlacementSpec

请参阅守护进程放置.

provider_display_name

身份提供者(IDP)在UI中的显示名称。

ssl_cert

用于加密通信的多行SSL证书。

ssl_key

用于解密通信的多行SSL证书私钥。

然后可以通过运行以下命令应用规范。一旦可用,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_proxycephadm模块选项。如果已经运行了守护进程,则必须重新部署它们以使用新镜像。

例如:

ceph config set mgr mgr/cephadm/container_image_oauth2_proxy <new-oauth2-proxy-image>
ceph orch redeploy oauth2-proxy

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.