第 8 章 在 RHOSO 中配置联邦身份验证
红帽支持红帽的单点登录(SSO)技术作为 OpenShift (RHOSO)上 Red Hat OpenStack Services 的身份提供程序。如果您使用其他厂商,请联系红帽支持例外。
8.1. 使用单点登录联邦 IDP 部署 RHOSO 复制链接链接已复制到粘贴板!
联邦允许用户使用红帽单点登录(SSO)技术登录 OpenStack Dashboard (horizon)。
默认情况下,注销 OpenStack 控制面板的用户不会从 SSO 注销。
使用单点登录联邦解决方案需要修改 Identity 服务(keystone)。您可以使用一个 secret 在 OpenShift (RHOSO) Identity 服务上配置 Red Hat OpenStack Services,以集成到您的联邦身份验证解决方案中。
您的联邦客户端必须启用隐式流。
先决条件
- 已安装 RHOSO。
- 在您的环境中有一个 SSO 联合解决方案。
流程
检索 Identity 服务(keystone)端点:
oc get keystoneapis.keystone.openstack.org -o json | jq '.items[0].status.apiEndpoints.public'为 SSO 管理员提供以下重定向 URI 和 Web 来源:
https://<keystoneURL>/v3/auth/OS-FEDERATION/identity_providers/<idp_name>/protocols/openid/websso/ https://<keystoneURL>/v3/auth/OS-FEDERATION/websso/openid webOrigins: https://<keystoneURL>-
将
<keystoneURL> 替换为在第 1 步中获取的 URL。此 url 必须以末尾的/结尾处。 将
<idp_name> 替换为您选择的值,如kcipaIDP。作为响应,您的 SSO 管理员为您提供了
ClientID和ClientSecret。注意所选 &
lt;idp_name> 值必须与此流程中所有引用的<idp_name> 值匹配。
-
将
检索 Memcached 主机名:
对于 IPv4 部署,请运行以下命令:
oc get memcacheds.memcached.openstack.org -n openstack -o json | jq -r '.items[0].status.serverList[0] | split(":")[0]'对于 IPv6 部署,运行以下命令:
oc get memcacheds.memcached.openstack.org -n openstack -o json | jq -r '.items[0].status.serverListWithInet[0]'
创建
keystone-httpd-override.yamlCR 文件并添加以下配置:apiVersion: v1 kind: Secret metadata: name: keystone-httpd-override namespace: openstack type: Opaque stringData: federation.conf: | # Example OIDC directives for the *public* endpoint OIDCClaimPrefix "OIDC-" OIDCScope "openid email profile" OIDCClaimDelimiter ";" OIDCPassUserInfoAs "claims" OIDCPassClaimsAs "both" OIDCClientID "<my_client_id>"1 OIDCClientSecret "<my_client_secret>"2 OIDCCryptoPassphrase "<crypto_pass>"3 OIDCProviderMetadataURL <metadata_url>4 OIDCResponseType "id_token"5 OIDCOAuthClientID "my_oauth_client_id" OIDCOAuthClientSecret "12345678" OIDCOAuthIntrospectionEndpoint "<https://my_oauth_introspection_endpoint>"6 OIDCRedirectURI "{{ .KeystoneEndpointPublic }}/v3/auth/OS-FEDERATION/identity_providers/<idp_name>/protocols/openid/websso/"7 <LocationMatch "/v3/auth/OS-FEDERATION/identity_providers/<idp_name>/protocols/openid/websso"> AuthType "openid-connect" Require valid-user </LocationMatch> <Location ~ "/v3/OS-FEDERATION/identity_providers/<idp_name>/protocols/openid/auth"> AuthType oauth20 Require valid-user </Location> <LocationMatch "/v3/auth/OS-FEDERATION/websso/openid"> AuthType "openid-connect" Require valid-user </LocationMatch>- 1
- 将
<my_client_id> 替换为您的客户端 ID,以用于 OpenID Connect 供应商握手。您必须从 SSO 管理员获取它。 - 2
- 将
<my_client_secret> 替换为用于 OpenID Connect 供应商握手的客户端 secret。在提供重定向 URL 后,您必须从 SSO 管理员获取它。 - 3
- 将
<crypto_pass> 替换为在加密 OpenID Connect 握手数据时使用的安全密码短语。这是一个用户定义的值。 - 4
- 将
<metadata_url> 替换为指向 OpenID Connect 供应商元数据的 URL。使用格式:"https://<FQDN>/realms/<realm>/.well-known/openid-configuration。SSO 管理员将为 OpenID 供应商提供所需的 <FQDN> 和特定于机构的<realm> 名称。 - 5
- OpenID Connect 供应商中预期的响应类型。
- 6
- 使用 SSO 管理员提供的值替换 https://my_oauth_introspection_endpoint。
- 7
- 将
<idp_name> 替换为您创建的唯一重定向 URL 的字符串,例如kcipaIDP。对于keystoneFederationIdentityProviderName参数和LocationMatch和Location指令参数,必须替换这个值。
重要OIDCRedirectURI参数的完整值必须以尾随/结尾。创建 secret:
oc create -f keystone-httpd-override.yaml获取 OpenStack 仪表板的 URL:
oc get horizons.horizon.openstack.org -o json | jq -r '.items[0].status.endpoint'编辑
OpenStackControlPlaneCR 文件的keystone部分并添加 secret:keystone: template: customServiceConfig: | [federation] trusted_dashboard=<horizon_endpoint>/dashboard/auth/websso/1 [openid] remote_id_attribute=HTTP_OIDC_ISS [auth] methods = password,token,oauth1,mapped,application_credential,openid2 httpdCustomization: customConfigSecret: keystone-httpd-override3 编辑
OpenStackControlPlaneCR 文件的horizon部分,以配置 OpenStack Dashboard (horizon):horizon: template: customServiceConfig: | # Point Horizon to the Keystone public endpoint OPENSTACK_KEYSTONE_URL = "<keystone_endpoint>/v3"1 # Enable WebSSO in Horizon WEBSSO_ENABLED = True # Provide login options in Horizon's dropdown menu WEBSSO_CHOICES = ( ("credentials", _("Keystone Credentials")), ("OIDC", _("OpenID Connect")), ) # Map Horizon's "OIDC" choice to the Keystone IDP and protocol WEBSSO_IDP_MAPPING = { "OIDC": ("<idp_name>", "openid"),2 }更新 control plane:
$ oc apply -f openstack_control_plane.yaml -n openstack
后续步骤