本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

开放ID连接 (OIDC)

概述

SUSE Observability 可以使用 OIDC 认证提供者进行身份验证。要启用此功能,您需要配置 SUSE Observability 和 OIDC 提供者以便它们能够相互通信。以下部分描述了各自的设置。

配置 OIDC 提供者

在您可以配置 SUSE Observability 使用 OIDC 进行身份验证之前,您需要在 OIDC 提供者上为 SUSE Observability 创建一个客户端。

Rancher

这仅适用于 Rancher 2.12 或更高版本。 您需要https://documentation.suse.com/cloudnative/rancher-manager/latest/en/rancher-admin/users/authn-and-authz/configure-oidc-provider.html[将 Rancher 配置为 OIDC 提供者]。

在 Rancher 本地群集中创建一个 OIDCClient 资源:

apiVersion: management.cattle.io/v3
kind: OIDCClient
metadata:
  name: oidc-observability
spec:
  tokenExpirationSeconds: 600
  refreshTokenExpirationSeconds: 3600
  redirectURIs:
    - "https://<observability-base-url>/loginCallback?client_name=StsOidcClient"

Rancher 会在其状态字段中提供客户端 ID 和密钥:

apiVersion: management.cattle.io/v3
kind: OIDCClient
metadata:
  name: oidc-observability
spec:
  tokenExpirationSeconds: 600
  refreshTokenExpirationSeconds: 3600
  redirectURIs:
    - "https://<observability-base-url>/loginCallback?client_name=StsOidcClient"
status:
  clientID: <oidc-client-id>
  clientSecrets:
    client-secret-1:
      createdAt: "xxx"
      lastFiveCharacters: xxx

您可以通过以下方式获取密钥值

kubectl get secret <oidc-client-id> -n cattle-oidc-client-secrets -o jsonpath="{.data.client-secret-1}" | base64 -d

其他 OIDC 提供者

使用以下设置为客户端(如果 OIDC 提供者需要):

  • 使用 OIDC 授权流,它通常也被称为授权码流。SUSE Observability 不支持隐式授权和混合流,因此无需启用对它们的支持。

  • 将*重定向 URI* 设置为 SUSE Observability 的基本 URL,后面加上 /loginCallback?client_name=StsOidcClient。例如 https://stackstate.acme.com/loginCallback?client_name=StsOidcClient。对于某些 OIDC 提供者,如 Google 和 Azure Entra ID,重定向 URI 必须完全匹配,包括任何查询参数。在这种情况下,您应该将 URI 配置为 https://stackstate.acme.com/loginCallback?client_name=StsOidcClient

  • 为 SUSE Observability 授予至少 openidemail 的作用域,或使用您 OIDC 提供者中相应的等效配置。根据提供者的不同,可能需要更多的权限,如果存在单独的 profile,也请将其包含在内。

  • SUSE Observability 需要 OIDC 离线访问。对于某些身份提供者,这需要额外的范围,通常称为 offline_access

此配置的结果应生成一个 clientId 和一个 secret。复制这些并保留以配置 SUSE Observability。还要写下提供者的 discoveryUri。通常这在同一屏幕中,或者可以在文档中找到。

为 OIDC 配置 SUSE Observability

Rancher

这仅适用于 Rancher 2.12 或更高版本。 您需要https://documentation.suse.com/cloudnative/rancher-manager/latest/en/rancher-admin/users/authn-and-authz/configure-oidc-provider.html[将 Rancher 配置为 OIDC 提供者]。

要将 Rancher 配置为 SUSE Observability 的 OIDC 提供者,您需要将 OIDC 详细信息添加到身份验证值中:

stackstate:
  authentication:
    rancher:
      clientId: "<oidc-client-id>"
      secret: "<oidc-secret>"
      baseUrl: "<rancher-url>"

您可以使用以下字段覆盖和扩展 Rancher 的 OIDC 配置:

  • discoveryUri - 可用于发现 OIDC 提供程序的 URI。通常在 OIDC 提供程序中创建客户端时也会记录或返回。

  • redirectUri - 可选(示例中未包含):SUSE Observability 的登录回调端点可访问的 URI。默认使用 stackstate.baseUrl 填充,但可以被覆盖。这必须是指向 /loginCallback 路径的完全合格 URL。

  • customParameters - 可选的键/值对映射,您将其作为自定义请求参数发送给 OIDC 提供程序。某些 OIDC 提供程序需要额外的请求参数,而这些参数默认未发送。

如果由于未使用可验证的 SSL 证书的设置而需要禁用 TLS 验证,您可以通过应用程序配置禁用 SSL 检查(请勿在生产环境中使用):

对于 Non-HA 设置:

stackstate:
  components:
    server:
      extraEnv:
        open:
          CONFIG_FORCE_stackstate_misc_sslCertificateChecking: false

对于 HA (高可用性) 设置:

stackstate:
  components:
    api:
      extraEnv:
        open:
          CONFIG_FORCE_stackstate_misc_sslCertificateChecking: false

在 HA 部署中,api 组件以不同的方式处理配置。使用以下内容:
=== Kubernetes

要在 Kubernetes 上配置 SUSE Observability 使用 OIDC 身份验证提供程序,您需要将 OIDC 详细信息和用户角色映射添加到文件 authentication.yaml 中。例如:

stackstate:
  authentication:
    oidc:
      clientId: "<client-id-from-oidc-provider>"
      secret: "<secret-from-oidc-provider>"
      discoveryUri: "https://oidc.acme.com/.well-known/openid-configuration"
      jwsAlgorithm: RS256
      scope: ["openid", "email"]
      jwtClaims:
        usernameField: email
        displayNameField: name
        groupsField: groups
      customParameters:
        access_type: offline

    # map the groups from OIDC provider
    # to the 4 standard roles in SUSE Observability (guest, powerUser, k8sTroubleshooter and admin)
    roles:
      guest: ["guest-group-in-oidc-provider"]
      powerUser: ["powerUser-group-in-oidc-provider"]
      admin: ["admin-group-in-oidc-provider"]
      k8sTroubleshooter: ["troubleshooter-group-in-oidc-provider"]

按照以下步骤配置 SUSE Observability 以使用 OIDC 进行身份验证:

  1. authentication.yaml 中 - 添加 OIDC 身份验证提供程序的详细信息(请参见上面的示例):

    • clientId - 您为 SUSE Observability 创建的 OIDC 客户端的 ID

    • secret - 您为 SUSE Observability 创建的 OIDC 客户端的密钥

    • discoveryUri - 可用于发现 OIDC 提供程序的 URI。通常在 OIDC 提供程序中创建客户端时也会记录或返回。

    • jwsAlgorithm - OIDC 的默认值是 RS256。如果您的 OIDC 提供程序使用不同的算法,可以在此处设置。

    • scope - 应与 OIDC 提供程序配置中提供的范围匹配,或是其子集。SUSE Observability 使用此信息请求访问 OIDC 提供程序中用户配置文件的这些部分。

    • redirectUri - 可选(示例中未包含):SUSE Observability 的登录回调端点可访问的 URI。默认使用 stackstate.baseUrl 填充,但可以被覆盖。这必须是指向 /loginCallback 路径的完全合格 URL。

    • customParameters - 可选的键/值对映射,作为自定义请求参数发送到 OIDC 提供程序。某些 OIDC 提供程序需要额外的请求参数,而这些参数默认情况下不会发送。

    • jwtClaims -

      • usernameField - OIDC 用户资料中应作为用户名使用的字段。默认情况下,这将是 preferred_username,但是许多提供程序省略此字段。一个好的替代方案是 email

      • displayNameField - OIDC 用户资料中应作为显示名称使用的字段。默认情况下,这将是 name

      • groupsField - SUSE Observability 将从中读取用户角色/组的字段。

  2. authentication.yaml 中 - 使用 roles.guestroles.powerUserroles.adminroles.platformAdmin 设置将 OIDC 的用户角色映射到正确的 SUSE Observability 主体(请参见上面的示例)。有关详细信息,请参见 默认的 SUSE Observability 角色。还可以创建更多 SUSE Observability 角色,请参见 RBAC 文档

  3. 将文件 authentication.yaml 与 SUSE Observability 安装说明中的 values.yaml 文件一起存储。

  4. 运行 Helm 升级以应用更改:

     helm upgrade \
       --install \
       --namespace suse-observability \
       --values values.yaml \
       --values authentication.yaml \
     suse-observability \
     suse-observability/suse-observability

注意:

  • 第一次运行 helm upgrade 命令将导致 pods 重启,这可能会导致短暂的可用性中断。

  • 在每次`helm upgrade`运行中包含`authentication.yaml`。

  • 身份验证配置存储为 Kubernetes 密钥。

设置指南

使用外部 Secret

当 oidc 密钥应来自外部密文时,请遵循 这些步骤,但填写以下数据:

kind: Secret
metadata:
   name: "<custom-secret-name>"
type: Opaque
data:
  oidc_client_id: <base64 of client id>
  oidc_secret: <base64 of secret>