适用于 Amazon 无服务器的 SAM OpenSearch L 身份验证 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Amazon 无服务器的 SAM OpenSearch L 身份验证

借助适用于 Amazon OpenSearch Serverless 的 SAML 身份验证,您可以使用现有的身份提供商为无服务器集合的 OpenSearch 控制面板终端节点提供单点登录 (SSO)。

SAML 身份验证允许您使用第三方身份提供商登录 OpenSearch 仪表板以索引和搜索数据。 OpenSearch Serverless 支持使用 SAML 2.0 标准的提供商,例如 IAM 身份中心、Okta、Keycloak、Active Directory 联合身份验证服务 (AD FS) 和 Auth0。您可以将 IAM Identity Center 配置为同步来自其他身份来源(例如 Okta 和 Microsoft Entra ID)的用户和群组。 OneLogin有关 IAM Identity Center 支持的身份源列表及其配置步骤,请参阅 I AM Identity Center 用户指南中的入门教程

注意

SAML 身份验证仅适用于通过 Web 浏览器访问 OpenSearch 仪表板。经过身份验证的用户只能通过 OpenSearch 仪表板中的开发工具向 OpenSearch API 操作发出请求。您的 SAML 凭证允许您直接向 OpenSearch API 操作发出 HTTP 请求。

要设置 SAML 身份验证,首先需要配置 SAML 身份提供者(IdP)。然后,您可以在数据访问策略中包括来自该 IdP 的一个或多个用户。此策略将授予其针对集合和/或索引的某些权限。然后,用户可以登录 OpenSearch 仪表板并执行数据访问策略中允许的操作。

注意事项

在配置 SAML 身份验证时,请考虑以下事项:

  • 不支持已签名和已加密的请求。

  • 不支持已加密的断言。

  • 不支持 IdP 发起的身份验证和注销。

所需权限

OpenSearch 无服务器的 SAML 身份验证使用以下 Amazon Identity and Access Management (IAM) 权限:

  • aoss:CreateSecurityConfig:创建 SAML 提供者。

  • aoss:ListSecurityConfig:列出当前账户中的所有 SAML 提供者。

  • aoss:GetSecurityConfig:查看 SAML 提供者信息。

  • aoss:UpdateSecurityConfig:修改给定的 SAML 提供者配置,包括 XML 元数据。

  • aoss:DeleteSecurityConfig:删除 SAML 提供者。

以下基于身份的访问策略允许用户管理所有 IdP 配置:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aoss:CreateSecurityConfig", "aoss:DeleteSecurityConfig", "aoss:GetSecurityConfig", "aoss:UpdateSecurityConfig", "aoss:ListSecurityConfigs" ], "Effect": "Allow", "Resource": "*" } ] }

请注意,Resource 元素必须是通配符。

创建 SAML 提供者(控制台)

这些步骤说明了如何创建 SAML 提供者。这为仪表板启用了使用服务提供商 (SP) 启动的身份验证的 SAML 身份验证。 OpenSearch 不支持 IdP 发起的身份验证。

为仪表板启用 SAML 身份验证 OpenSearch
  1. 登录亚马逊 OpenSearch 服务控制台,网址为 https://console.aws.amazon.com/aos/home

  2. 在左侧导航面板上,展开 Serverless(无服务器),然后选择 SAML authentication(SAML 身份验证)。

  3. 选择 Add SAML provider(添加 SAML 提供者)。

  4. 为提供者提供名称和描述。

    注意

    您指定的名称可公开访问,当用户登录 OpenSearch 控制面板时,该名称将显示在下拉菜单中。确保该名称易于识别,并且不会泄露有关您的身份提供者的敏感信息。

  5. Configure your IdP(配置您的 IdP)下,复制断言使用者服务(ACS)URL。

  6. 使用您刚刚复制的 ACS URL 配置您的身份提供者。术语和步骤因提供者而异。请参阅提供程序的文档。

    例如,在 Okta 中,您可以创建 SAML 2.0 web application(SAML 2.0 Web 应用程序),并将 ACS URL 指定为 Single Sign On URL(单点登录 URL)、Recipient URL(收件人 URL)和 Destination URL(目标 URL)。对于 Auth0,您可以在 Allowed Callback URLs(允许的回调 URL)中指定它。

  7. 如果您的 IdP 有用于受众限制的字段,则请提供受众限制。受众限制是 SAML 断言中的一个值,用于指定断言适用于哪些受众。对于 OpenSearch 无服务器,请指定aws:opensearch:<aws account id>。例如,aws:opensearch:123456789012

    受众限制字段的名称因提供者而异。对于 Okta,该字段为 Audience URI (SP Entity ID)(受众 URI(SP 实体 ID))。对于 IAM Identity Center,该字段为 Application SAML audience(应用程序 SAML 受众)。

  8. 如果您使用的是 IAM Identity Center,则还需要指定以下属性映射Subject=${user:name},格式为 unspecified

  9. 配置了身份提供程序后,它会生成 IdP 元数据文件。此 XML 文件包含有关提供者的信息,如 TLS 证书、单点登录端点和身份提供者的实体 ID。

    复制 IdP 元数据文件中的文本,并将其粘贴到 Provide metadata from your IdP(提供来自您的 IdP 的元数据)字段下。也可以选择从 XML 文件导入并上载文件。元数据文件应如下所示:

    <?xml version="1.0" encoding="UTF-8"?> <md:EntityDescriptor entityID="entity-id" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> <md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> <md:KeyDescriptor use="signing"> <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:X509Data> <ds:X509Certificate>tls-certificate</ds:X509Certificate> </ds:X509Data> </ds:KeyInfo>s </md:KeyDescriptor> <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat> <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="idp-sso-url"/> <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="idp-sso-url"/> </md:IDPSSODescriptor> </md:EntityDescriptor>
  10. 保持自定义用户 ID 属性字段为空,以将 SAML 断言的 NameID 元素用于用户名。如果您的断言不使用此标准元素,而是将用户名作为自定义属性,请在此处指定该属性。属性区分大小写。仅支持一个用户属性。

    以下示例显示了 SAML 断言中 NameID 的覆盖属性:

    <saml2:Attribute Name="UserId" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"> <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">annie</saml2:AttributeValue> </saml2:Attribute>
  11. (可选)在 Group attribute(组属性)字段中指定自定义属性,如 rolegroup。仅支持一个组属性。没有默认群组属性。如果您未指定组属性,则您的数据访问策略只能包含用户主体。

    以下示例显示了 SAML 断言中的组属性:

    <saml2:Attribute Name="department" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"> <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">finance</saml2:AttributeValue> </saml2:Attribute>
  12. 默认情况下, OpenSearch 控制面板会在 24 小时后注销用户。您可以通过指定OpenSearch 仪表板超时将此值配置为 1 到 12 小时(15 到 720 分钟)之间的任意数字。如果您尝试将超时设置为等于或小于 15 分钟,您的会话将重置为一小时。

  13. 选择 Create SAML provider(创建 SAML 提供者)。

访问 OpenSearch 仪表板

配置 SAML 提供商后,与该提供商关联的所有用户和群组都可以导航到 OpenSearch 仪表板端点。所有集合的控制面板 URL 格式为 collection-endpoint/_dashboards/

如果您启用了 SAML,则选择中的链接 Amazon Web Services Management Console 会将您定向到 IdP 选择页面,您可以在其中使用 SAML 凭据登录。首先,使用下拉列表选择身份提供者:

然后,使用您的 IdP 凭证登录。

如果您未启用 SAML,则选择中的链接 Amazon Web Services Management Console 将引导您以 IAM 用户或角色的身份登录,但没有 SAML 选项。

授予 SAML 身份针对集合数据的访问权限

在您创建 SAML 提供者后,您仍然需要向基础用户和组授予针对集合中数据的访问权限。您可以通过数据访问策略授予访问权限。在您向用户提供访问权限之前,他们将无法读取、写入或删除您的集合中的任何数据。

要授予访问权限,请创建数据访问策略,然后在 Principal 语句中指定您的 SAML 用户和/或组 ID:

[ { "Rules":[ ... ], "Principal":[ "saml/987654321098/myprovider/user/Shaheen", "saml/987654321098/myprovider/group/finance" ] } ]

您可以授予针对集合、索引或两者的访问权限。如果您希望不同用户拥有不同权限,请创建多条规则。有关可用权限的列表,请参阅受支持的策略权限。有关如何设置访问策略格式的信息,请参阅策略语法

创建 SAML 提供者(Amazon CLI)

要使用 OpenSearch 无服务器 API 创建 SAML 提供商,请发送请求:CreateSecurityConfig

aws opensearchserverless create-security-config \ --name myprovider \ --type saml \ --saml-options file://saml-auth0.json

将包括元数据 XML 在内的 saml-options 指定为 .json 文件中的键值映射。必须以 JSON 转义字符串的形式编码元数据 XML。

{ "sessionTimeout": 70, "groupAttribute": "department", "userAttribute": "userid", "metadata": "<EntityDescriptor xmlns=\"urn:oasis:names:tc:SAML:2.0:metadata\" ... ... ... IDPSSODescriptor>\r\n<\/EntityDescriptor>" }

查看 SAML 提供者

以下ListSecurityConfigs请求列出了您账户中的所有 SAML 提供商:

aws opensearchserverless list-security-configs --type saml

该请求返回有关所有现有 SAML 提供者的信息,包括您的身份提供者生成的完整 IdP 元数据:

{ "securityConfigDetails": [ { "configVersion": "MTY2NDA1MjY4NDQ5M18x", "createdDate": 1664054180858, "description": "Example SAML provider", "id": "saml/123456789012/myprovider", "lastModifiedDate": 1664054180858, "samlOptions": { "groupAttribute": "department", "metadata": "<EntityDescriptor xmlns=\"urn:oasis:names:tc:SAML:2.0:metadata\" ... ... ... IDPSSODescriptor>\r\n<\/EntityDescriptor>", "sessionTimeout": 120, "userAttribute": "userid" } } ] }

要查看有关某个具体提供者的详细信息,包括未来更新的 configVersion,请发送 GetSecurityConfig 请求。

更新 SAML 提供者

要使用 OpenSearch 无服务器控制台更新 SAML 提供商,请选择 SAML 身份验证,选择您的身份提供商,然后选择编辑。您可以修改所有字段,包括元数据和自定义属性。

要通过 OpenSearch Serverless API 更新提供商,UpdateSecurityConfig请发送请求并包含要更新的策略的标识符。还必须包括配置版本,您可以使用 ListSecurityConfigsGetSecurityConfig 命令检索配置版本。包括最新版本可以确保您不会无意中覆盖其他人所做的更改。

以下请求更新了提供者的 SAML 选项:

aws opensearchserverless update-security-config \ --id saml/123456789012/myprovider \ --type saml \ --saml-options file://saml-auth0.json \ --config-version MTY2NDA1MjY4NDQ5M18x

将您的 SAML 配置选项指定为 .json 文件中的键值映射。

重要

对 SAML 选项的更新不是增量的。如果您在更新时没有为 SAMLOptions 对象中的参数指定值,则现有值将被空值覆盖。例如,如果当前配置包含 userAttribute 的值,然后您进行了更新但不包括此值,则该值将从配置中移除。在您通过调用 GetSecurityConfig 操作进行更新之前,请确保您知道现有值是什么。

删除 SAML 提供者

在您删除 SAML 提供者时,对数据访问策略中关联用户和组的任何引用都将不再起作用。为避免混淆,建议您在删除端点之前,先移除对访问策略中端点的所有引用。

要使用 OpenSearch 无服务器控制台删除 SAML 提供商,请选择身份验证,选择提供商,然后选择删除。

要通过 OpenSearch 无服务器 API 删除提供商,请发送DeleteSecurityConfig请求:

aws opensearchserverless delete-security-config --id saml/123456789012/myprovider