使用 SAML 和 Keycloak 实

使用 SAML 和 Keycloak 实现 Amazon OpenSearch 服务的单点登录 SSO

关键要点
- 介绍如何通过 SAML 和 Keycloak 配置 Amazon OpenSearch 服务的单点登录(SSO)。
- 详细步骤涵盖配置 OpenSearch 服务和 Keycloak 的身份提供者(IdP),及其之间的集成。
- 示例用户、角色和组配置,以便在 Keycloak 中进行设置。
- 最后测试 SSO 功能,确保能够成功登录 OpenSearch Dashboards。

解决方案概述

许多客户的常见用例是将现有的身份提供者(IdP)与 集成。OpenSearch 服务内置支持针对 OpenSearch Dashboards 的单点登录(SSO)认证,并采用 SAML 协议。利用 SAML 身份验证,用户可以将第三方身份提供者(如 Okta、Ping Identity、OneLogin、Auth0、ADFS、Azure Active Directory 以及 Keycloak)与 OpenSearch 服务的仪表板集成。

在本篇文章中,我们将逐步介绍如何配置使用 OpenSearch 服务和 Keycloak 的服务提供者发起的身份验证。同时,我们还将探讨如何在 Keycloak 中设置用户、组和角色,并配置它们在 OpenSearch Dashboards 的访问权限。

以下是解决方案的 SAML 身份验证流程图示。

![SAML删除)

登录流程步骤:

  1. 用户使用浏览器访问 Amazon OpenSearch 服务的 OpenSearch Dashboards 端点,例如 https://vpc-abc123.us-east-1.es.amazonaws.com/_dashboards
  2. 服务提供者(OpenSearch 服务)使用 IdP(Keycloak)的信息生成 SAML 认证请求,并将其重定向回浏览器。
  3. 浏览器将 SAML 认证请求转发给 Keycloak。Keycloak 解析请求并要求用户输入登录名和密码进行身份验证。
  4. 认证成功后,Keycloak 生成包含用户详细信息的 SAML 认证响应,并将编码的 SAML 响应发送给浏览器。
  5. 浏览器将 SAML 响应传递给 OpenSearch 服务的 Assertion Consumer Service (ACS) URL。
  6. OpenSearch 服务验证 SAML 响应。如果验证通过,用户将被重定向到 OpenSearch Dashboards 首页。访问权限根据映射到用户的角色进行处理。

前提条件

完成本指南前,您需要准备以下条件:

  • 一个运行 OpenSearch 或 Elasticsearch 版本 6.7 或更高的 OpenSearch 服务域,并在虚拟私有云(VPC)中启用精细化访问控制。
  • 。本文中,我们在与 OpenSearch 域相同的 VPC 中创建 IdP。IdP 和服务提供者之间无需直接连接,因此 IdP 也可以在不同网络中。
  • 一个正确配置的安全组,允许 OpenSearch 服务和 Keycloak IdP 服务器接收来自用户的入站流量。
  • 一款能够连接 Keycloak 和 OpenSearch Dashboards 的浏览器。

为 OpenSearch 服务启用 SAML 身份验证

第一步是为 OpenSearch 服务启用 SAML 身份验证。完成以下步骤:

  1. 在 OpenSearch 服务控制台中,打开您的 OpenSearch 服务域的详细页面。
  2. 安全配置 选项卡中,选择 编辑
  3. 选择 启用 SAML 身份验证

![启用 SAML删除)

启用此选项后,会自动填充 SAML 支持所需的不同 IdP URL。请记下 服务提供者实体 IDSP 发起的 SSO URL 下的值。OpenSearch Dashboards 登录流可以配置为服务提供者发起或 IdP 发起。本文使用服务提供者发起的登录流程。

删除)

将 Keycloak 配置为 IdP

在 SAML 身份验证过程中,一旦用户被认证,浏览器将接收来自 Keycloak 的 SAML 断言令牌并将其转发给 OpenSearch服务。OpenSearch 服务域根据断言中呈现的属性来验证用户后端角色。

要将 Keycloak 配置为 IdP,请完成以下步骤:

  1. 用管理员用户权限登录到 Keycloak IdP 管理控制台(例如, https:// :8081/admin/)。
  2. 选择 创建领域
  3. 领域名称 中输入名称(例如 Amazon_OpenSearch),然后选择 创建

删除)

为了管理 OpenSearch 服务特定的角色、用户和组,您首先需要创建一个单独的客户端领域,以提供管理对象的逻辑空间。

  1. 在导航窗格中选择您的领域,然后选择 客户端
  2. 选择 创建客户端
  3. 常规设置 窗口中,选择 客户端类型SAML
  4. 客户端 ID 中使用之前复制的服务提供者实体 ID,然后选择 下一步

删除)

  1. 登录设置 中,输入之前复制的服务提供者发起的 SSO URL(例如 https://vpc-abc123.us-east-1.es.amazonaws.com/_dashboards/_opendistro/_security/saml/acs),然后选择 保存

删除)

  1. 在客户端设置选项卡的 签名和加密 下,开启 签名断言 ,保持其他选项为默认,然后选择 保存

删除)

  1. 密钥 选项卡下,确保在 签名密钥配置 中,关闭 客户端签名必需

删除)

配置 Keycloak 用户、角色和组

在为 OpenSearch 服务配置好 Keycloak IdP 客户端后,您可以在 IdP端创建角色、组和用户。本文中,我们创建了两个角色、两个组和两个用户,如下表所示:

用户角色
super_user_1super_user_groupsuper_user_role
readonly_user_1readonly_user_groupreadonly_user_role

请按照以下步骤操作:

  1. 在您的领域的导航窗格中,选择 领域角色
  2. 选择 创建角色

删除)

  1. 角色名称 中输入名称(例如 super_user_role),然后选择 保存

删除)

  1. 重复上述步骤以创建第二个角色 readonly_user_role

接下来,我们创建组,给组分配角色,并将用户映射到组。

  1. 在您的领域下,选择导航窗格中的
  2. 选择 创建组
  3. 名称 中输入组名(例如 super_user_group),然后选择 保存

删除)

  1. 重复上述步骤以创建第二个组 readonly_user_group

当新组创建完成后,它们将在 页面中列出。

删除)

  1. 在每个组的详细页面上,选择 角色映射 选项卡,然后选择 分配角色

删除)

  1. 对于super_user_group组,选择角色super_user_role,然后选择 分配

删除)

  1. 重复以上步骤将角色 readonly_user_role 分配给 readonly_user_group 组。

最后一步是创建用户并将其分配到组中,以便他们自动继承组的权限。本文中,我们创建两个用户,super_user_1readonly_user_1,分别具有仪表板管理员和只读权限。

  1. 在您的领域下,选择导航窗格中的 用户
  2. 选择 创建新用户
  3. 常规 中配置用户详细信息,包括用户名、名字、姓氏和电子邮件,然后选择 创建

删除)

  1. 凭据 选项卡中为用户设置临时密码。
  2. 选择 添加用户 ,并重复以上步骤添加第二个用户 readonly_user_1
  3. 要将用户加入特定组,请在相应用户的 选项卡上选择 加入组

删除)

  1. 选择用户将要加入的组并选择 加入 。例如,用户 super_user_1 加入 super_user_group 组。

删除)

  1. 对于用户 readonly_user_1 也重复以上步骤以加入 readonly_user_group

接下来,您可以删除用户的默认角色映射,因为您已经将角色分配给他们各自的组。

  1. 角色映射 选项卡中,选择默认角色。
  2. 通过选择 取消分配 ,然后选择 移除 ,移除用户的默认角色。
  3. 对另一个用户重复以上步骤。

删除)

  1. 在导航窗格中选择 客户端范围
  2. 名称 列中选择 role_list

删除)

  1. 映射器 选项卡上,选择 角色列表

删除)

  1. 打开 单一角色属性 ,并选择 保存

删除)

从 Keycloak 下载 SAML 元数据

Keycloak 的配置现在已完成,您可以从 Keycloak 下载 SAML 元数据文件。SAML 元数据为 XML 格式,需要在后续步骤中配置 OpenSearch 服务的 SAML。

  1. 在您选定的领域中,选择导航窗格中的 领域设置
  2. 常规 选项卡上,选择 SAML 2.0 身份提供者元数据 下的 终结点

![下载 SAML删除)

这将在另一个窗口中生成 IdP 元数据文件。此 XML 文件包含有关提供者的信息,例如 TLS 证书、SSO 终结点和 IdP 实体 ID。

  1. 将此 XML 文件下载到本地,以便后续在 OpenSearch 服务控制台中上传该文件。

集成 OpenSearch 服务的 SAML 与 Keycloak

要将 OpenSearch 服务与 Keycloak IDP 集成,您需要在 OpenSearch 服务控制台上传 IdP 元数据 XML 文件。

  1. 在 OpenSearch 服务控制台中,导航到您的域。
  2. 选择 安全配置 ,然后选择 编辑
  3. 来自 IdP 的元数据 下,选择 从 XML 文件导入 ,以导入文件并自动填充 IdP 实体 ID。

或者,您也可以从元数据文件中复制并粘贴实体 ID 属性的内容。

删除)

  1. SAML 主后端角色 中输入 super_user_role

这意味着具有此角色的用户被授予集群的管理用户权限,但只能在 OpenSearch Dashboards 中使用权限。

删除)

  1. 展开 额外设置 部分。
  2. 角色密钥 中输入断言中的属性(在此案例中,角色),然后选择 保存更改

删除)

测试与 Keycloak 的 SAML 身份验证

现在您可以测试与 Keycloak 作为 IdP 的 SAML 集成。

  1. 选择 OpenSearch Dashboards URL,这可以在 OpenSearch 服务控制台中获得。

它将自动重定向您到 Keycloak 登录页面进行身份验证。

  1. 输入管理员用户名(super_user_1)和密码,然后选择 登录

成功认证后,它将重定向您到 OpenSearch Dashboards 的主页。如果您在此步骤遇到问题,请参考 以获取常见问题的帮助。

删除)

内部,安全插件将后端角色 super_user_role 映射到保留的安全角色 all_accesssecurity_manager。因此

Leave a Reply

Required fields are marked *