利用 Amazon OpenSearch Serverless 和 Keycloak 配置 SAML federation
在本文中,我们将向您展示如何配置 SAML 身份验证,利用 Keycloak 作为 IdP 来控制对公共 OpenSearch Dashboards 的访问。



解决方案概述
下图展示了一个示例架构,该架构允许用户使用 Keycloak 进行单点登录,以实现 OpenSearch Dashboards 的身份验证。

登录流程的具体步骤如下:
- 用户在浏览器中访问 OpenSearch Dashboards,并从列表中选择一个 IdP。
- OpenSearch Serverless 生成一个 SAML 身份验证请求。
- OpenSearch Service 将请求重定向回浏览器。
- 浏览器将用户重定向到所选的 IdP(Keycloak)。Keycloak 将提供一个登录页面,用户可以在该页面提供登录凭证。
- 如果身份验证成功,Keycloak 将 SAML 响应返回给浏览器。
- SAML 断言会被发回至 OpenSearch Serverless。
- OpenSearch Serverless 会验证 SAML 断言,并将用户登录到 OpenSearch Dashboards。
先决条件
开始之前,您应满足以下先决条件:
1. 一个活跃的 OpenSearch Serverless 集合
2. 一台正常运行的本地或云端 Keycloak 服务器
3. 以下 AWS Identity and Access Management (IAM) 权限可用于在 OpenSearch Serverless 中配置 SAML 身份验证:
- aoss:CreateSecurityConfig - 创建 SAML 提供商。
- aoss:ListSecurityConfig - 列出当前账户中的所有 SAML 提供商。
- aoss:GetSecurityConfig - 查看 SAML 提供商信息。
- aoss:UpdateSecurityConfig - 修改给定的 SAML 提供商配置,包括 XML 元数据。
- aoss:DeleteSecurityConfig - 删除 SAML 提供商。
在 Keycloak 中创建和配置客户端
按照如下步骤创建您的 Keycloak 客户端:
1. 登录到您的 Keycloak 管理页面。
2. 在导航窗格中,选择“客户端”。
3. 点击“创建客户端”。

4. 对于“客户端类型”,选择 SAML。
5. 对于“客户端 ID”,输入 aws:opensearch:AWS_ACCOUNT_ID,其中 AWS_ACCOUNT_ID 是您的亚马逊云科技账户 ID。
6. 为您的客户端输入名称和描述。
7. 点击“下一步”。

8. 对于“有效的重定向 URI”,输入断言消费者服务(ACS)的地址,其中 REGION 是您创建 OpenSearch Serverless 集合所在的亚马逊云科技区域。
9. 对于“主 SAML 处理 URL”,同样输入前面提到的 ACS 地址。
10. 完成客户端的创建。

11. 创建客户端后,您必须禁用“签名密钥配置”设置,因为 OpenSearch Serverless 不支持签名和加密请求。有关更多详细信息,请参阅“注意事项”。

12. 创建客户端并禁用客户端签名后,您可以通过点击“领域设置”页面上的链接,以导出 SAML 2.0 IdP 元数据。在 OpenSearch Serverless 中创建 SAML 提供商时,您需要这些元数据。

创建 SAML 提供商
当您的 OpenSearch Serverless 集合处于活动状态时,您可以创建一个 SAML提供商。该 SAML 提供商可以分配给同一区域内的任何集合。具体步骤如下:
1. 在 OpenSearch Service 控制台上,在导航窗格的“Serverless”下,选择“安全性”下的“SAML 身份验证”。
2. 点击“创建 SAML 提供商”。

3. 为您的 SAML 提供商输入名称和描述。
4. 输入您之前从 Keycloak 下载的 IdP 元数据。

5. 在“其他设置”下,您可以选择添加自定义用户 ID 和组属性(本例留空)。
6. 点击“创建 SAML 提供商”。

现在您已经为 OpenSearch Serverless 配置了一个 SAML 提供商。接下来配置用于访问集合的数据访问策略。
创建数据访问策略
完成 SAML 提供商的配置后,您必须创建数据访问策略,以允许用户访问 OpenSearch Serverless。
1. 在 OpenSearch Service 控制台中,在导航窗格的“Serverless”下,选择“安全性”下的“数据访问策略”。
2. 点击“创建访问策略”。

3. 输入策略名称和可选描述。
4. 对于“策略定义方法”,选择“可视化编辑器”。

5. 对于“规则名称”,请输入一个名称。
6. 在“选择主体”下,为“添加主体”选择“SAML 用户和组”。

7. 对于“SAML 提供商名称”,选择您之前创建的提供商。
8. 点击“保存”。

9. 指定用户或组为 user/USERNAME 或 group/GROUPNAME 格式。USERNAME 或 GROUPNAME 的值应与您在 Keycloak 中为 .user/USERNAME 指定的值相匹配。

10. 点击“保存”。
11. 点击“授予”以授予资源权限。
12. 在“授予资源和权限”部分,您可以为指定用户提供集合级别和索引模式级别的访问权限。
有关如何为用户设置更细化的访问控制粒度的更多信息,请参阅“支持的 OpenSearch API 操作和权限”以及“支持的策略权限”。
13. 点击“保存”。

14. 如有需要,您可以创建其他规则。
15. 点击“创建”以创建数据访问策略。

现在,您已经有了一个数据访问策略,该策略将允许用户访问 OpenSearch Dashboards,这样就可以在其中执行允许的操作了。
访问 OpenSearch Dashboards
登录 OpenSearch Dashboards 的具体步骤如下:
1. 在 OpenSearch Service 控制台中,在导航窗格的“Serverless”下选择“仪表板”。
2. 在“集合”部分,找到您的集合并选择“仪表板”。

将在新的浏览器选项卡中打开 OpenSearch 登录页面。
3. 在下拉菜单中选择您的 IdP 提供商,再点击“登录”。

您将重定向到 Keycloak 登录页面。
4. 使用您的 SSO 凭证登录。

登录成功后,您将重定向到 OpenSearch Dashboards,此时就可以执行数据访问策略允许的操作了。
至此您已成功实现了 OpenSearch Dashboards 与作为 IdP 的 Keycloak 的联合认证。
清理
完成此解决方案后,如果不再需要,请删除您创建的资源。
1. 删除您的 OpenSearch Serverless 集合。
2. 删除您的数据访问策略。
3. 删除 SAML 提供商。
总结
在本文中,我们演示了如何将 Keycloak 设置为 IdP,以利用 SAML 身份验证访问 OpenSearch Serverless 仪表板。更多详情请参阅“Amazon OpenSearch Serverless SAML 身份验证”。
