SAMLAmazon OpenSearch 无服务器身份验证 - 亚马逊 OpenSearch 服务

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

SAMLAmazon OpenSearch 无服务器身份验证

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

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

注意

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

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

SAML authentication flow with data access policy, OpenSearch interface, and JSON configuration.

注意事项

配置SAML身份验证时,请考虑以下几点:

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

  • 不支持已加密的断言。

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

  • 对于非IAM身份SCP(例如在 Amazon OpenSearch Serverless SAML 和亚马逊服务的基本内部用户授权SAML中), OpenSearch 服务控制策略 () 将不适用或评估。

所需权限

SAML OpenSearch 无服务器的身份验证使用以下内容 AWS 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 发起的身份验证。

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

  2. 在左侧导航面板上,展开无服务器并选择SAML身份验证

  3. 选择 “添加SAML提供商”。

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

    注意

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

  5. 在 “配置你的 IdP” 下,复制断言使用者服务 ()。ACS URL

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

    例如,在 Okta 中,您可以创建一个 “SAML2.0 Web 应用程序”,并将指定ACSURL为单点登录URLURL、收件人和目标URL。对于 Auth0,您可以在 “允许的回调 URLs” 中指定它。

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

    受众限制字段的名称因提供者而异。对于 Okta 来说,这是受众URI(SP 实体 ID)。对于IAM身份中心来说,它是应用程序SAML受众

  8. 如果您使用的是 Ident IAM ity 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. 选择 “创建SAML提供商”。

访问 OpenSearch 仪表板

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

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

OpenSearch login page with dropdown menu for selecting SAML Identity Provider options.

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

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

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

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

要授予访问权限,请创建数据访问策略并在Principal声明IDs中指定您的SAML用户和/或组:

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

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

创建SAML提供者 (AWS CLI)

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

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

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

{ "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 Serverless 控制台更新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