配置 Amazon OpenSearch Serverless 和 Keycloak 的 SAML 联邦

作者:Arpad Csoke 发布日期:2024年7月24日在 Amazon OpenSearch Service 中,中级 (200),技术操作指南永久链接评论区

关键点总结

Amazon OpenSearch Serverless 是一种无服务器的完整托管搜索和分析平台。本文介绍了如何使用 Keycloak 作为身份提供者 (IdP) 配置 SAML 认证,以控制对公共 OpenSearch Dashboards 的访问。了解 SAML 认证后,用户可以通过单一的凭证访问多个应用程序,从而提高用户体验。

Amazon OpenSearch Serverless 是 Amazon OpenSearch Service 的一种无服务器版本,区域能够以 PB 级别进行搜索和分析工作,而无需管理底层的 OpenSearch 集群。OpenSearch Serverless 支持高达 30TB 的时间序列数据。每次创建集合时,系统会自动提供 OpenSearch Dashboards 的安装。

网络配置

OpenSearch Serverless 集合的网络配置控制了集合的网络访问方式。您可以选择将集合公开于互联网,允许来自任何网络的访问,或者将其访问限制为仅通过 OpenSearch Serverless 管理的 虚拟私有云 (VPC) 端点进行私密访问。此网络访问设置可以单独定义,用于集合的 OpenSearch 端点用于数据操作及其对应的 OpenSearch Dashboards 端点用于数据可视化和分析。在本篇文章中,我们将讨论一个公共可访问的 OpenSearch Serverless 集合。

SAML 认证

SAML 允许用户通过一组凭证访问多个应用程序或服务,从而消除了为每个应用程序或服务单独登录的需要。这不仅提高了用户体验,还减少了管理多个凭证的负担。我们为 OpenSearch Serverless 提供了 SAML 认证,通过此功能,您可以使用现有的身份提供者 (IdP) 为 OpenSearch Dashboards 端点提供单一登录 (SSO)。OpenSearch Serverless 支持符合 SAML 20 标准的 IdP,包括 AWS IAM 身份中心、Okta、Keycloak、Active Directory 联合身份验证服务 (AD FS) 和 Auth0。这一 SAML 认证机制仅用于通过网络浏览器访问 OpenSearch Dashboards 界面。

在本篇文章中,我们将向您展示如何配置 SAML 认证,以控制对公共 OpenSearch Dashboards 的访问。

解决方案概述

以下是一个示例架构图,展示了允许用户使用 Keycloak 进行 SSO 身份验证的 OpenSearch Dashboards。

登录流程

登录流程包括以下步骤:

用户在浏览器中访问 OpenSearch Dashboards,并从列表中选择身份提供者。OpenSearch Serverless 生成一个 SAML 认证请求。OpenSearch Service 将请求重定向回浏览器。浏览器将用户重定向到所选择的 IdPKeycloak。Keycloak 提供一个登录页面,用户可以在此输入登录凭证。如果认证成功,Keycloak 将 SAML 响应返回给浏览器。SAML 声明被发送回 OpenSearch Serverless。OpenSearch Serverless 验证 SAML 声明,并将用户登录到 OpenSearch Dashboards。

前提条件

开始之前,您需要具备以下前提条件:

一个正在运行的 OpenSearch Serverless 集合一个运行正常的 Keycloak 服务器在本地或云端配置 SAML 认证在 OpenSearch Serverless 中所需的 AWS 身份与访问管理 (IAM) 权限:aossCreateSecurityConfig 创建 SAML 提供者。aossListSecurityConfig 列出当前账户中的所有 SAML 提供者。aossGetSecurityConfig 查看 SAML 提供者信息。aossUpdateSecurityConfig 修改给定 SAML 提供者的配置,包括 XML 元数据。aossDeleteSecurityConfig 删除 SAML 提供者。

在 Keycloak 中创建和配置客户端

完成以下步骤以创建 Keycloak 客户端:

登录您的 Keycloak 管理页面。在导航面板中选择 客户端。

选择 创建 客户端。

在 客户端类型 中选择 SAML。

在 客户端ID 中输入 awsopensearchAWSACCOUNTID,其中 AWSACCOUNTID 是您的 AWS 账户 ID。为您的客户端输入名称和描述。

选择 下一步。

在 有效重定向 URI 中,输入断言消费者服务 (ACS) 的地址,其中 REGION 是您创建 OpenSearch Serverless 集合的 AWS 区域。

在 主 SAML 处理 URL 中,输入前面的 ACS 地址。

完成客户端的创建。

创建客户端后,您需要禁用 签名密钥配置 设置,因为不支持 OpenSearch Serverless 的签名和加密请求。更多细节请参见注意事项。

在您创建客户端并禁用客户端签名后,可以通过选择 领域设置 页面上的链接来导出 SAML 20 IdP 元数据。您在 OpenSearch Serverless 中创建 SAML 提供者时需要此元数据。

创建 SAML 提供者

当您的 OpenSearch Serverless 集合处于活动状态时,您需要创建 SAML 提供者。此 SAML 提供者可以分配给同一区域中的任何集合。完成以下步骤:

在 OpenSearch Service 控制台中,导航到 无服务器,在左侧菜单中选择 安全 下的 SAML 认证。

选择 创建 SAML 提供者。

输入您的 SAML 提供者的名称和描述。

输入您从 Keycloak 下载的 IdP 元数据。

在 附加设置 下,您可以选择性地添加自定义用户 ID 和组属性本示例中我们将其留空。

选择 创建 SAML 提供者。

您现在已经为 OpenSearch Serverless 配置了 SAML 提供者。接下来,您需要配置数据访问策略,以便用户能够访问集合。

创建数据访问策略

在配置 SAML 提供者后,您需要为 OpenSearch Serverless 创建数据访问策略,以允许用户访问。

在 OpenSearch Service 控制台中,导航到 无服务器,在左侧菜单中选择 安全 下的 数据访问策略。

选择 创建访问策略。

输入访问策略的名称和可选描述。

对于 策略定义方法,选择 可视化编辑器。

奈云加速器

对于 规则名称,输入一个名称。

在 选择主体 下,对于 添加主体,选择 SAML 用户和组。

对于 SAML 提供者名称,选择之前创建的提供者。

选择 保存。

按照格式 user/USERNAME 或 group/GROUPNAME 指定用户或组。USERNAME 或 GROUPNAME 的值应与您在 Keycloak 中指定的值一致。

配置 Amazon OpenSearch Serverless 与 Keycloak 的 SAML

选择 保存。

选择 授予 为资源授予权限。

在 授予资源和权限 部分,您可以指定希望为给定用户在集合级别和索引模式级别提供的访问权限。有关如何为用户设置更细粒度的访问权限的更多信息,请参考 支持的 OpenSearch API 操作和权限 和 支持的策略权限。

选择 保存。

如果需要,您可以创建其他规则。

选择 创建 以创建数据访问策略。

现在,您已创建数据访问策略,允许用户访问 OpenSearch Dashboards 并执行允许的操作。

访问 OpenSearch Dashboards

完成以下步骤以登录 OpenSearch Dashboards:

在 OpenSearch Service 控制台中,导航到 无服务器,在左侧菜单中选择 仪表盘。在 集合 部分,找到您的集合并选择 仪表盘。

这会在新浏览器标签页中打开 OpenSearch 登录页面。

从下拉菜单中选择您的 IdP,并选择 登录。 您将被重定向到 Keycloak 的登录页面。

使用您的单一登录凭证进行登录。

成功登录后,您将被重定向到 OpenSearch Dashboards,可以执行数据访问策略允许的操作。

您已经成功将 OpenSearch Dashboards 与 Keycloak 进行联邦集成。

清理工作

当您完成该解决方案后,如果不再需要所创建的资源,请删除它们。

删除您的 OpenSearch Serverless 集合。删除您的数据访问策略。删除 SAML 提供者。

结论

在本文中,我们演示了如何设置 Keycloak 作为 IdP 以使用 SAML 认证访问 OpenSearch Serverless 仪表板。欲了解更多详情,请参考 Amazon OpenSearch Serverless 的 SAML 认证。

关于作者

Arpad Csoke 是亚马逊网络服务的解决方案架构师。他的职责包括帮助大型企业客户了解和利用 AWS 环境,作为技术顾问为他们解决问题。