

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

# 使用启用 SAML 联合 AWS Identity and Access Management
<a name="application-enable-SAML-identity-federation"></a>

OpenSearch 用户界面支持安全断言标记语言 2.0 (SAML)，这是许多身份提供商使用的开放标准。这将通过 AWS Identity and Access Management （IAM）启用身份联合验证。有了这种支持，您的账户或组织中的用户可以通过担任 IAM 角色直接访问用户 OpenSearch 界面。您可以为最终用户创建由身份提供商启动 (IdP) 的单点登录体验，他们可以在外部身份提供商中进行身份验证，然后直接路由到您在 UI 中定义的页面。 OpenSearch 您还可以通过将最终用户或群组配置为扮演不同的 IAM 角色来实现精细的访问控制，这些角色具有不同的访问用户 OpenSearch 界面和相关数据源的权限。

本主题介绍 step-by-step如何通过 OpenSearch 用户界面配置 SAML 使用。在这些步骤中，我们以配置 Okta 身份和访问管理应用程序的步骤为例进行说明。其他身份提供程序（例如 Azure Active Directory 和 Ping）的配置步骤类似。

**Topics**
+ [步骤 1：设置身份提供程序应用程序（Okta）](#SAML-identity-federation-step-1)
+ [第 2 步：为 Okta 设置 AWS 配置](#SAML-identity-federation-step-2)
+ [步骤 3：在 IAM 中创建亚马逊 OpenSearch 服务访问策略](#SAML-identity-federation-step-3)
+ [步骤 4：使用 SAML 验证身份提供程序启动的单点登录体验](#SAML-identity-federation-step-4)
+ [第 5 步：配置 SAML 基于属性的精细访问控制](#SAML-identity-federation-step-5)

## 步骤 1：设置身份提供程序应用程序（Okta）
<a name="SAML-identity-federation-step-1"></a>

要使用带有 OpenSearch UI 的 SAML，第一步是设置您的身份提供商。

**任务 1：创建 Okta 用户**

1. 以具有管理权限的用户身份通过 [https://login.okta.com/](https://login.okta.com/)登录您的 Okta 组织。

1. 在管理员控制台上，在导航窗格的**目录**下，选择**人员**。

1. 选择 **Add person**（添加人员）。

1. 对于**名字**，输入用户的名字。

1. 对于**姓氏**，输入用户的姓氏。

1. 对于**用户名**，以电子邮件格式输入用户的用户名。

1. 选择**我将设置密码**，并输入密码 

1. （可选）如果不希望用户首次登录时更改密码，请取消勾选**用户首次登录时必须更改密码**复选框。

1. 选择**保存**。

**任务 2：创建和分配组**

1. 以具有管理权限的用户身份通过 [https://login.okta.com/](https://login.okta.com/)登录您的 Okta 组织。

1. 在管理员控制台上，在导航窗格的**目录**下，选择**组**。

1. 选择**添加组**。

1. 输入组名称，并选择**保存**。

1. 选择新创建的组，然后选择**分配人员**。

1. 选择加号（**\$1**），然后选择**完成**。

1. （可选）重复步骤 1-6 以添加更多的组。

**任务 3：创建 Okta 应用程序**

1. 以具有管理权限的用户身份通过 [https://login.okta.com/](https://login.okta.com/)登录您的 Okta 组织。

1. 在管理员控制台上，在导航窗格的**应用程序**下，选择**应用程序**。

1.  选择**创建应用程序集成**。

1. 选择 SAML 2.0 作为登录方法，然后选择**下一步**。

1.  输入应用程序集成的名称（例如 **OpenSearch\$1UI**），然后选择**下一步**。

1. 在应用程序中输入以下值；无需更改其他值：

   1.  1. 对于**单点登录 URL**，请输入**https://signin.aws.amazon.com/saml**商业 AWS 区域或您所在地区的特定网址。

   1. 2. 对于**受众 URI（SP 实体 ID）**，输入 **urn:amazon:webservices**。

   1. 3. 对于**名称 ID 格式**，输入 **EmailAddress** 

1. 选择**下一步**。

1. 选择**我是 Okta 客户，正在添加内部应用**，然后选择**这是我们创建的内部应用**。

1. 选择**结束**。

1. 选择**任务**，然后选择**分配**。

1. 选择**分配给组**，然后选择要添加组旁边的**分配**。

1. 选择**完成**。

**任务 4：设置 Oka 高级配置**

创建自定义 SAML 应用程序后，完成以下步骤：

1. 以具有管理权限的用户身份通过 [https://login.okta.com/](https://login.okta.com/)登录您的 Okta 组织。

   在管理员控制台的**常规**区域中，选择 **SAML 设置**下的**编辑**。

1. 选择**下一步**。

1. 使用以下格式将 OpenSearch UI 端点的**默认中继状态**设置为：

   `https://region.console.aws.amazon.com/aos/home?region=region#opensearch/applications/application-id/redirectToDashboardURL`. 

   以下是示例：

   `https://us-east-2.console.aws.amazon.com/aos/home?region=us-east-2#opensearch/applications/abc123def4567EXAMPLE/redirectToDashboardURL` 

1. 在**属性语句（可选）**项下，添加以下属性：

   1. 使用**角色**属性，以逗号分隔格式提供 IAM 角色和身份提供程序。在稍后的步骤中，您将在设置 AWS 配置时使用相同的 IAM 角色和身份提供商。

   1. 将 **user.login** 设置为。**RoleSessionName**这用作代入角色时签发的临时凭证的标识符。

   有关参考：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/application-enable-SAML-identity-federation.html)

1. 添加属性后，选择**下一步**，然后选择**完成**。

您的属性格式应与下图所示的属性格式相似。**默认中继状态**值是指您账户或组织中的最终用户完成 Okta 单点登录验证后定义登录页面的 URL。您可以将其设置为 OpenSearch UI 中的任何页面，然后将该 URL 提供给其目标最终用户。

![\[“SAML 2.0”区域报告应用程序的默认中继状态 URL 和元数据 URL。\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/ui-saml-2.0-area-okta.png)


## 第 2 步：为 Okta 设置 AWS 配置
<a name="SAML-identity-federation-step-2"></a>

完成以下任务来设置 Okta 的 AWS 配置。

**任务 1：收集 Okta 信息**

在此步骤中，您需要收集 Okta 信息，以便稍后在 AWS中对其进行配置。

1. 以具有管理权限的用户身份通过 [https://login.okta.com/](https://login.okta.com/)登录您的 Okta 组织。

1. 在页面右下角的**登录**选项卡上，选择**查看 SAML 设置说明**。

1. 记录**身份提供程序单点登录 URL** 的值。在连接到任何第三方 SQL 客户端（例如 [SQL Workbench/J](https://www.sql-workbench.eu/)）时，您可以使用此 URL。

1. 使用区块 4 中的身份提供程序元数据，然后将元数据文件以 .xml 格式进行保存（例如，`metadata.xml`）。

**任务 2：创建 IAM 提供程序**

要创建 IAM 提供程序，请完成以下步骤：

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航面板的**访问管理**下，选择**身份提供程序**。

1. 选择**添加提供程序**。

1. 对于**提供程序类型**，选择 **SAML**。

1. 对于**提供程序名称**，输入名称。

1. 对于**元数据文档**，选择**选择文件**，并上传您先前下载的元数据文件（.xml）。

1. 选择**添加提供程序**。

**任务 3：创建 IAM 角色**

要创建您的 AWS Identity and Access Management 角色，请完成以下步骤：

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格的**访问权限管理**下，选择**角色**。

1. 选择**创建角色**。

1. 对于**可信实体类型**，选择 **SAML 2.0 联合身份验证**。

1. 对于**基于 SAML 2.0 的提供程序**，选择您先前创建的身份提供程序。

1. 选择 “**允许编程和 AWS 管理控制台 访问**”。

1. 选择**下一步**。

1. 在**权限策略**列表中，选中授予 OpenSearch 服务权限的策略（例如 AWS 托管策略）的复选框**AmazonOpenSearchServiceFullAccess**。

1. 选择**下一步**。

1. 在**审核**区域中，对于**角色名称**，键入角色的名称（例如，**oktarole**）。

1. （可选）对于**描述**，输入角色用途的简要描述。

1. 选择**创建角色**。

1. 导航到您刚创建的角色，选择**信任关系**选项卡，然后选择**编辑信任策略**。

1. 在 **“编辑语句**” 窗格的 “**为 STS 添加操作**” 下，选中相应的复选框**TagSession**。

1. 选择**更新策略**。

## 步骤 3：在 IAM 中创建亚马逊 OpenSearch 服务访问策略
<a name="SAML-identity-federation-step-3"></a>

了解如何配置您的 IAM 角色以实现 OpenSearch 访问控制。借助 IAM 角色，您可以对 Okta 用户组实施精细的访问控制以访问资源。 OpenSearch 本主题使用两个示例组展示基于 IAM 角色的配置。

------
#### [ Sample group: Alice ]

请求:

```
GET _plugins/_security/api/roles/alice-group
```

结果：

```
{
  "alice-group": {
    "reserved": false,
    "hidden": false,
    "cluster_permissions": [
      "unlimited"
    ],
    "index_permissions": [
      {
        "index_patterns": [
          "alice*"
        ],
        "dls": "",
        "fls": [],
        "masked_fields": [],
        "allowed_actions": [
          "indices_all"
        ]
      }
    ],
    "tenant_permissions": [
      {
        "tenant_patterns": [
          "global_tenant"
        ],
        "allowed_actions": [
          "kibana_all_write"
        ]
      }
    ],
    "static": false
  }
}
```

------
#### [ Sample group: Bob ]

请求:

```
GET _plugins/_security/api/roles/bob-group
```

结果：

```
{
  "bob-group": {
    "reserved": false,
    "hidden": false,
    "cluster_permissions": [
      "unlimited"
    ],
    "index_permissions": [
      {
        "index_patterns": [
          "bob*"
        ],
        "dls": "",
        "fls": [],
        "masked_fields": [],
        "allowed_actions": [
          "indices_all"
        ]
      }
    ],
    "tenant_permissions": [
      {
        "tenant_patterns": [
          "global_tenant"
        ],
        "allowed_actions": [
          "kibana_all_write"
        ]
      }
    ],
    "static": false
  }
}
```

------

您可以使用后端角色映射将 Amazon S OpenSearch ervice 域角色映射到 IAM 角色，如以下示例所示：

```
{
  "bob-group": {
    "hosts": [],
    "users": [],
    "reserved": false,
    "hidden": false,
    "backend_roles": [
      "arn:aws:iam::111222333444:role/bob-group"
    ],
    "and_backend_roles": []
  },
  "alice-group": {
    "hosts": [],
    "users": [],
    "reserved": false,
    "hidden": false,
    "backend_roles": [
      "arn:aws:iam::111222333444:role/alice-group"
    ],
    "and_backend_roles": []
  }
}
```

## 步骤 4：使用 SAML 验证身份提供程序启动的单点登录体验
<a name="SAML-identity-federation-step-4"></a>

打开**默认中继状态**的 URL，以打开 Okta 身份验证页面。输入 end-user 的凭证。系统会自动将您重定向到 OpenSearch UI。

您可通过点击导航面板底部的用户图标查看当前凭证，如下图所示：

![\[在 Okta 的“设置和设置”页面中，选择用户图标会显示当前用户的凭证。\]](http://docs.aws.amazon.com/zh_cn/opensearch-service/latest/developerguide/images/ui-okta-user-icon.png)


您还可以通过访问导航面板底部的开发人员工具，并在控制台中运行查询，以验证用户的精细访问控制权限。下面是示例查询。

------
#### [ Example 1: Displays information about the current user ]

请求:

```
GET _plugins/_security/api/account
```

结果：

```
{
  "user_name": "arn:aws:iam::XXXXXXXXXXXX:role/bob-group",
  "is_reserved": false,
  "is_hidden": false,
  "is_internal_user": false,
  "user_requested_tenant": null,
  "backend_roles": [
    "arn:aws:iam::XXXXXXXXXXXX:role/bob-group"
  ],
  "custom_attribute_names": [],
  "tenants": {
    "global_tenant": true,
    "arn:aws:iam::XXXXXXXXXXXX:role/bob-group": true
  },
  "roles": [
    "bob-group"
  ]
}
```

------
#### [ Example 2: Displays actions permitted for a user ]

请求:

```
GET bob-test/_search
```

结果：

```
{
  "took": 390,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "bob-test",
        "_id": "ui01N5UBCIHpjO8Jlvfy",
        "_score": 1,
        "_source": {
          "title": "Your Name",
          "year": "2016"
        }
      }
    ]
  }
}
```

------
#### [ Example 3: Displays actions not permitted for a user ]

请求:

```
GET alice-test
```

结果：

```
{
  "error": {
    "root_cause": [
      {
        "type": "security_exception",
        "reason": "no permissions for [indices:admin/get] and User [name=arn:aws:iam::111222333444:role/bob-group, backend_roles=[arn:aws:iam::111222333444:role/bob-group], requestedTenant=null]"
      }
    ],
    "type": "security_exception",
    "reason": "no permissions for [indices:admin/get] and User [name=arn:aws:iam::111222333444:role/bob-group, backend_roles=[arn:aws:iam::111222333444:role/bob-group], requestedTenant=null]"
  },
  "status": 403
}
```

------

## 第 5 步：配置 SAML 基于属性的精细访问控制
<a name="SAML-identity-federation-step-5"></a>

借助 Amazon S OpenSearch ervice，您可以将精细的访问控制与 SAML 结合使用，将身份提供商中的用户和群组动态映射到 OpenSearch 精细的访问控制用户和角色。您可以将这些角色的范围限定为特定的 OpenSearch 域和无服务器集合，并定义索引级权限和文档级安全性。

**注意**  
有关精细访问控制的更多信息，请参阅 [Amazon 服务中的精细访问控制 OpenSearch](fgac.md)。

**Topics**
+ [用于精细访问控制的 SAML 属性](#saml-fgac-key-attributes)
+ [任务 1：配置 Okta 以实现精细访问控制](#configure-okta-fgac)
+ [任务 2：在域中 OpenSearch 配置 SAML](#configure-opensearch-domain-fgac)
+ [任务 3：在 OpenSearch 无服务器集合中配置 SAML](#saml-configure-collections)

### 用于精细访问控制的 SAML 属性
<a name="saml-fgac-key-attributes"></a>

**subjectKey**  
映射到唯一用户属性（如电子邮件或用户名），用于在身份验证过程中识别用户。

**rolesKey**  
映射至 IdP 中的组或角色属性，这些属性决定授权所需的角色或权限。

### 任务 1：配置 Okta 以实现精细访问控制
<a name="configure-okta-fgac"></a>

**配置 Okta 以实现精细访问控制**

1. 在 “属性**语句” 部分中为 OpenSearch 用户主体添加一个新属性**：
   + 名称: `UserName`
   + 值：`${user-email}`

   在 OpenSearch 细粒度访问控制配置中，此属性用作身份验证的 Subject **密钥**。

1. 在**组属性语句**部分中，为角色添加组属性：
   + 名称: `groups`
   + 筛选：`OpenSearch_xxx`

   此属性用作**角色键**，用于将组映射到 OpenSearch 精细的访问控制角色以进行授权。

### 任务 2：在域中 OpenSearch 配置 SAML
<a name="configure-opensearch-domain-fgac"></a>

**在域中 OpenSearch 配置 SAML**

1. 在 AWS 管理控制台中，确定要为 OpenSearch 用户界面用户启用精细访问控制的 OpenSearch 服务域。

1. 导航到特定域的详细信息页面

1. 选择**安全配置**选项卡，并点击**编辑**。

1. 展开**通过 IAM 联合身份验证的 SAML**。

1. 输入您在 Okta 中定义的 `subjectKey` 和 `roleKey`。

1. 选择**保存更改**。

您还可以使用 AWS CLI配置精细访问控制。

```
aws opensearch create-domain \
--domain-name testDomain \
--engine-version OpenSearch_1.3 \
--cluster-config InstanceType=r5.xlarge.search,InstanceCount=1,DedicatedMasterEnabled=false,ZoneAwarenessEnabled=false,WarmEnabled=false \
--access-policies '{"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":"*"},"Action":"es:*","Resource":"arn:aws:es:us-east-1:12345678901:domain/neosaml10/*"}]}' \
--domain-endpoint-options '{"EnforceHTTPS":true,"TLSSecurityPolicy":"Policy-Min-TLS-1-2-2019-07"}' \
--node-to-node-encryption-options '{"Enabled":true}' \
--encryption-at-rest-options '{"Enabled":true}' \
--advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"********","MasterUserPassword":"********"}, "IAMFederationOptions":{"Enabled": true,"SubjectKey":"TestSubjectKey","RolesKey":"TestRolesKey"}}' \
--ebs-options "EBSEnabled=true,VolumeType=gp2,VolumeSize=300" \
--no-verify-ssl \
--endpoint-url https://es.us-east-1.amazonaws.com \
--region us-east-1
```

要更新现有域，请执行以下操作：

```
aws opensearch update-domain-config \
--domain-name testDomain \
--advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"********","MasterUserPassword":"********"}, "IAMFederationOptions":{"Enabled": true,"SubjectKey":"TestSubjectKey","RolesKey":"TestRolesKey"}}' \
--ebs-options "EBSEnabled=true,VolumeType=gp2,VolumeSize=300" \
--no-verify-ssl \
--endpoint-url https://es.us-east-1.amazonaws.com \
--region us-east-1
```

### 任务 3：在 OpenSearch 无服务器集合中配置 SAML
<a name="saml-configure-collections"></a>

**在 Serverless 中配置基于 SAML 的精细访问控制 OpenSearch**

1. 打开 AWS 管理控制台 并导航至 Amazon OpenSearch 服务。

1. 在导航窗格的**无服务器**下，选择**安全**，然后选择**身份验证**。

1. 在 **IAM 联合身份验证**部分，选择**编辑**。

   您可以使用此配置控制 SAML 基于属性的精细访问控制。默认情况下，IAM 联合身份验证处于禁用状态。

1. 选择**启用 IAM 联合身份验证**。

1. 输入您在 Okta 中定义的 `subjectKey` 和 `roleKey` 值。

   有关更多信息，请参阅 [用于精细访问控制的 SAML 属性](#saml-fgac-key-attributes)。

1. 选择**保存**。

1. 在导航窗格的**无服务器**下，选择**数据访问策略**。

1. 更新现有策略或创建新策略。

1. 展开规则，选择**添加主体**，然后选择 **IAM 联合用户和组**。

1. 添加所需的主体，并选择**保存**。

1. 选择**授权**。

1. 在此规则下，执行以下操作：
   + 选择要为所选主体定义的权限。
   + 指定要在其中应用权限的集合。
   + （可选）定义索引级权限。
**注意**  
您可以创建多个规则，为不同的主体组分配不同的权限。

1. 完成后，选择**保存**。

1. 选择**创建**。

或者，您也可以使用 CLI 为集合创建安全配置，如下所示：

```
aws opensearchserverless create-security-config --region "region"  --type iamfederation --name "configuration_name" --description "description" --iam-federation-options '{"groupAttribute":"GroupKey","userAttribute":"UserKey"}'
```