

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

# 适用于 Amazon 无服务器的 SAM OpenSearch L 身份验证
<a name="serverless-saml"></a>

借助适用于 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 支持的身份来源列表及其配置步骤，请参阅《IAM Identity Center 用户指南》中的 [Getting started tutorials](https://docs.aws.amazon.com/singlesignon/latest/userguide/tutorials.html)**。

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

要设置 SAML 身份验证，首先需要配置 SAML 身份提供者（IdP）。然后，您可以在[数据访问策略](serverless-data-access.md)中包括来自该 IdP 的一个或多个用户。此策略向其授予对集合 and/or 索引的某些权限。然后，用户可以登录 OpenSearch 仪表板并执行数据访问策略中允许的操作。

![\[SAML authentication flow with data access policy, OpenSearch interface, and JSON configuration.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/serverless-saml-flow.png)


**Topics**
+ [注意事项](#serverless-saml-considerations)
+ [所需权限](#serverless-saml-permissions)
+ [创建 SAML 提供者（控制台）](#serverless-saml-creating)
+ [访问 OpenSearch 仪表板](#serverless-saml-dashboards)
+ [授予 SAML 身份针对集合数据的访问权限](#serverless-saml-policies)
+ [创建 SAML 提供者（AWS CLI）](#serverless-saml-creating-api)
+ [查看 SAML 提供者](#serverless-saml-viewing)
+ [更新 SAML 提供者](#serverless-saml-updating)
+ [删除 SAML 提供者](#serverless-saml-deleting)

## 注意事项
<a name="serverless-saml-considerations"></a>

在配置 SAML 身份验证时，请考虑以下事项：
+ 不支持已签名和已加密的请求。
+ 不支持已加密的断言。
+ 不支持 IdP 发起的身份验证和注销。
+ 对于非 IAM 身份（例如 Amazon S OpenSearch erverless 和 SAML 中的 SAML 以及亚马逊服务的基本内部用户授权），服务控制策略 (SCP) 将不适用或不进行评估。 OpenSearch 

## 所需权限
<a name="serverless-saml-permissions"></a>

 OpenSearch 无服务器的 SAML 身份验证使用以下 AWS Identity and Access Management (IAM) 权限：
+ `aoss:CreateSecurityConfig`：创建 SAML 提供者。
+ `aoss:ListSecurityConfig`：列出当前账户中的所有 SAML 提供者。
+ `aoss:GetSecurityConfig`：查看 SAML 提供者信息。
+ `aoss:UpdateSecurityConfig`：修改给定的 SAML 提供者配置，包括 XML 元数据。
+ `aoss:DeleteSecurityConfig`：删除 SAML 提供者。

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

------
#### [ JSON ]

****  

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

------

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

## 创建 SAML 提供者（控制台）
<a name="serverless-saml-creating"></a>

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

**为仪表板启用 SAML 身份验证 OpenSearch**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home )中登录亚马逊 OpenSearch 服务控制台。

1. 在左侧导航面板上，展开 **Serverless**（无服务器），然后选择 **SAML authentication**（SAML 身份验证）。

1. 选择 **Add SAML provider**（添加 SAML 提供者）。

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

1. 在 **Configure your IdP**（配置您的 IdP）下，复制断言使用者服务（ACS）URL。

1. 使用您刚刚复制的 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，您可以在 “**允许的回调 URLs**” 中指定它。

1. 如果您的 IdP 有用于受众限制的字段，则请提供受众限制。受众限制是 SAML 断言中的一个值，用于指定断言适用于哪些受众。使用 OpenSearch 无服务器，您可以执行以下操作。请务必用您自己*content*的 AWS 账户 ID 替换以下代码示例中的：

   1. 使用默认的受众限制 `:opensearch:111122223333`。

   1. （可选）使用 AWS CLI配置自定义受众限制。有关更多信息，请参阅 [创建 SAML 提供者（AWS CLI）](#serverless-saml-creating-api)。

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

1. 如果您使用的是 IAM Identity Center，则还需要指定以下[属性映射](https://docs.aws.amazon.com/singlesignon/latest/userguide/attributemappingsconcept.html)：`Subject=${user:name}`，格式为 `unspecified`。

1. 配置了身份提供程序后，它会生成 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>
   ```

1. 保持**自定义用户 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>
   ```

1. （可选）在 **Group attribute**（组属性）字段中指定自定义属性，如 `role` 或 `group`。仅支持一个组属性。没有默认群组属性。如果您未指定组属性，则您的数据访问策略只能包含用户主体。

   以下示例显示了 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>
   ```

1. 默认情况下， OpenSearch 控制面板会在 24 小时后注销用户。您可以通过指定**OpenSearch 仪表板超时**将此值配置为 1 到 12 小时（15 到 720 分钟）之间的任意数字。如果您尝试将超时设置为等于或小于 15 分钟，您的会话将重置为一小时。

1. 选择 **Create SAML provider**（创建 SAML 提供者）。

## 访问 OpenSearch 仪表板
<a name="serverless-saml-dashboards"></a>

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

如果您启用了 SAML，则选择中的链接 AWS 管理控制台 会将您定向到 IdP 选择页面，您可以在其中使用 SAML 凭据登录。首先，使用下拉列表选择身份提供者：

![\[OpenSearch login page with dropdown menu for selecting SAML Identity Provider options.\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/idpList.png)


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

如果您未启用 SAML，则选择中的链接 AWS 管理控制台 将引导您以 IAM 用户或角色的身份登录，但没有 SAML 选项。

## 授予 SAML 身份针对集合数据的访问权限
<a name="serverless-saml-policies"></a>

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

要授予访问权限，请创建数据访问策略并在`Principal`语句 IDs 中指定您的 SAML 用户 and/or 组：

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

您可以授予针对集合、索引或两者的访问权限。如果您希望不同用户拥有不同权限，请创建多条规则。有关可用权限的列表，请参阅[受支持的策略权限](serverless-data-access.md#serverless-data-supported-permissions)。有关如何设置访问策略格式的信息，请参阅[策略语法](serverless-data-access.md)。

## 创建 SAML 提供者（AWS CLI）
<a name="serverless-saml-creating-api"></a>

要使用 OpenSearch 无服务器 API 创建 SAML 提供商，请发送请求：[CreateSecurityConfig](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_CreateSecurityConfig.html)

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

将包括元数据 XML 在内的 `saml-options` 指定为 .json 文件中的键值映射。必须以 [JSON 转义字符串](https://www.freeformatter.com/json-escape.html)的形式编码元数据 XML。

```
{
   "sessionTimeout": 70,
   "groupAttribute": "department",
   "userAttribute": "userid",
   "openSearchServerlessEntityId": "aws:opensearch:111122223333:app1",
   "metadata": "EntityDescriptor xmlns=\"urn:oasis:names:tc:SAML:2.0:metadata\" ... ... ... IDPSSODescriptor\r\n\/EntityDescriptor"
}
```

**注意**  
（可选）使用 AWS CLI配置自定义受众限制。有关更多信息，请参阅 [创建 SAML 提供者（AWS CLI）](#serverless-saml-creating-api)。

## 查看 SAML 提供者
<a name="serverless-saml-viewing"></a>

以下[ListSecurityConfigs](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListSecurityConfigs.html)请求列出了您账户中的所有 SAML 提供商：

```
aws opensearchserverless list-security-configs --type saml
```

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

```
{
   "securityConfigDetails": [ 
      { 
         "configVersion": "MTY2NDA1MjY4NDQ5M18x",
         "createdDate": 1664054180858,
         "description": "Example SAML provider",
         "id": "saml/111122223333/myprovider",
         "lastModifiedDate": 1664054180858,
         "samlOptions": { 
            "groupAttribute": "department",
            "metadata": "EntityDescriptorxmlns=\"urn:oasis:names:tc:SAML:2.0:metadata\" ...... ...IDPSSODescriptor\r\n/EntityDescriptor",
            "sessionTimeout": 120,
            "openSearchServerlessEntityId": "aws:opensearch:111122223333:app1",
            "userAttribute": "userid"
         }
      }
   ]
}
```

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

## 更新 SAML 提供者
<a name="serverless-saml-updating"></a>

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

要通过 OpenSearch Serverless API 更新提供商，[UpdateSecurityConfig](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_UpdateSecurityConfig.html)请发送请求并包含要更新的策略的标识符。还必须包括配置版本，您可以使用 `ListSecurityConfigs` 或 `GetSecurityConfig` 命令检索配置版本。包括最新版本可以确保您不会无意中覆盖其他人所做的更改。

以下请求更新了提供者的 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 提供者
<a name="serverless-saml-deleting"></a>

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

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

要通过 OpenSearch 无服务器 API 删除提供商，请发送[DeleteSecurityConfig](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_DeleteSecurityConfig.html)请求：

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