跳到主要内容

SSO

分析师以企业账号登录。Caddy 经 oauth2-proxy 对接客户 IdP,角色由 IdP 组映射,审计记录到人。企业版功能。

默认部署使用网关自带的口令登录,账号在用户页管理。有 IdP 的企业改用 docker-compose.sso.yml,账号由 IdP 管理,网关不保存口令。两种方式不能同时启用。SSO 是企业版功能:许可不包含 SSO 时,网关忽略 SSO 配置,继续使用自带登录。

SSO 链路

oauth2-proxy 是 OIDC 反向代理:未登录的请求重定向到 IdP,登录成功后把身份写入请求头交给网关。网关只信任这些请求头,信任的前提有两个:网关只能经代理链访问(/api/* 请求必须携带 RST_GATEWAY_SHARED_SECRET),以及 oauth2-proxy 用会话中已验证的身份覆盖这些请求头。任何能注入身份头的前置代理都可以替换 oauth2-proxy,以此对接 SAML 或 LDAP。

SSO 只决定谁能登录网关。网关对 QRadar 的读写仍使用同一个授权服务 Token。在 QRadar 侧,网关发起的备注、关闭、分配记在该授权服务名下,具体操作人记录在网关的调用审计中。

对接 IdP

前提条件

  • 企业版许可。
  • 主机上有 oauth2-proxy 镜像 quay.io/oauth2-proxy/oauth2-proxy:v7.7.1。交付包不含该镜像:联网主机在 deploy.sh 提示时在线拉取;离线主机在联网机器上 docker pull 并 docker save,拷贝后 docker load。

步骤

  1. 在 IdP 中注册一个机密客户端(confidential client),回调 URI 为 https://<域名>/oauth2/callback。记录 client id、client secret 和 issuer URL。

  2. 执行 sudo ./deploy.sh,认证方式选择 2,按提示填写 OIDC issuer、client id 和 client secret。脚本生成 cookie 密钥并写入 OIDC 相关配置项。

  3. 在 .env 中配置角色映射,然后执行 docker compose -f docker-compose.sso.yml up -d:

    RST_RBAC_ADMIN_GROUPS=soc-admins
    RST_RBAC_ANALYST_GROUPS=soc-l1,soc-l2
    RST_RBAC_VIEWER_GROUPS=auditors

IdP 的 groups claim 随身份传给网关。用户属于多个已映射的组时取最高角色。不属于任何已映射组的用户没有角色,可以执行写操作,不能管理。需要只读时,把对应的组写入 RST_RBAC_VIEWER_GROUPS。

手动部署时不带 --profile bundled-idp,该 profile 只用于演示环境。

配置项

配置项说明
OIDC_ISSUER_URL、OIDC_CLIENT_ID、OIDC_CLIENT_SECRETIdP 的 issuer 与客户端凭据
OAUTH2_PROXY_COOKIE_SECRET会话 cookie 的加密密钥,deploy.sh 生成,也可用 openssl rand -base64 32 生成
OAUTH2_PROXY_REDIRECT_URL与 IdP 中注册的回调 URI 一致
OAUTH2_PROXY_SKIP_OIDC_DISCOVERY对接客户 IdP 时为 false,deploy.sh 写入
OAUTH2_PROXY_COOKIE_SECURE、OAUTH2_PROXY_REVERSE_PROXY生产环境为 true,deploy.sh 写入
RST_RBAC_ADMIN_GROUPS、RST_RBAC_ANALYST_GROUPS、RST_RBAC_VIEWER_GROUPS映射为管理员、分析员、只读的 IdP 组,逗号分隔
RST_SSO_ENFORCE默认 true,缺少身份的 /api/* 请求返回 401
RST_SSO_USER_HEADER、RST_SSO_GROUPS_HEADER可选。更换前置代理时指定身份头名称

对接 AD 域

分析师以 AD 或 LDAP 域账号登录时,在 Keycloak 中配置用户联邦:登录时通过 LDAP 绑定校验账号,再以 OIDC 交给 oauth2-proxy。

微软 AD 的关键字段:vendor=ad、connectionUrl=ldaps://dc.corp.local:636、usernameLDAPAttribute=sAMAccountName、uuidLDAPAttribute=objectGUID、userObjectClasses=person, organizationalPerson, user,bindDn 使用一个服务账号。再添加一个 group-ldap-mapper,把 AD 安全组映射到 groups claim,用于角色映射。

演示环境

docker-compose.sso.yml 的 bundled-idp profile 内置 Keycloak 与 OpenLDAP,只用于演示。测试账号为 analyst / analyst123(Keycloak 本地账号)和 analyst.ldap / Ldap123!(LDAP 联邦)。其中的 client secret、redirectUris: ["*"] 和 sslRequired: none 都是演示值,投产前改用客户 IdP。

登录后的差异

  • 审计事件的 user 字段取自 SSO 身份。
  • 页面右上角显示当前用户,登出经 /oauth2/sign_out。
  • 账号页不提供修改口令,口令由 IdP 管理。

本页内容