通过 Amazon Identity and Access Management 启用 SAML 联合身份验证 - Amazon OpenSearch Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

通过 Amazon Identity and Access Management 启用 SAML 联合身份验证

OpenSearch UI 支持安全断言标记语言 2.0(SAML),这是许多身份提供程序使用的一种开放标准。这将通过 Amazon Identity and Access Management(IAM)启用身份联合验证。借助此支持,您账户或组织中的用户可通过代入 IAM 角色直接访问 OpenSearch UI。您可以为最终用户创建由身份提供程序(IdP)启用的单点登录体验,用户可在外部身份提供程序处进行身份验证,然后直接路由到您在 OpenSearch UI 中定义的页面。您还可以通过配置最终用户或用户组代入不同的 IAM 角色以实现精细访问控制,这些角色具有访问 OpenSearch UI 及相关数据来源的不同权限。

本主题提供逐步说明,指导您配置 SAML 与 OpenSearch UI 结合使用。在这些步骤中,我们以配置 Okta 身份和访问管理应用程序的步骤为例进行说明。其他身份提供程序(例如 Azure Active Directory 和 Ping)的配置步骤类似。

步骤 1:设置身份提供程序应用程序(Okta)

要将 SAML 与 OpenSearch UI 结合使用,第一步是设置您的身份提供程序。

任务 1:创建 Okta 用户
  1. 以具备管理权限的用户身份登录 Okta 组织,网址为 https://login.okta.com/

  2. 在管理员控制台上,在导航窗格的目录下,选择人员

  3. 选择 Add person(添加人员)。

  4. 对于名字,输入用户的名字。

  5. 对于姓氏,输入用户的姓氏。

  6. 对于用户名,以电子邮件格式输入用户的用户名。

  7. 选择我将设置密码,并输入密码

  8. (可选)如果不希望用户首次登录时更改密码,请取消勾选用户首次登录时必须更改密码复选框。

  9. 选择保存

任务 2:创建和分配组
  1. 以具备管理权限的用户身份登录 Okta 组织,网址为 https://login.okta.com/

  2. 在管理员控制台上,在导航窗格的目录下,选择

  3. 选择添加组

  4. 输入组名称,并选择保存

  5. 选择新创建的组,然后选择分配人员

  6. 选择加号(+),然后选择完成

  7. (可选)重复步骤 1-6 以添加更多的组。

任务 3:创建 Okta 应用程序
  1. 以具备管理权限的用户身份登录 Okta 组织,网址为 https://login.okta.com/

  2. 在管理员控制台上,在导航窗格的应用程序下,选择应用程序

  3. 选择创建应用程序集成

  4. 选择 SAML 2.0 作为登录方法,然后选择下一步

  5. 输入应用程序集成的名称(例如 OpenSearch_UI),然后选择下一步

  6. 在应用程序中输入以下值;无需更改其他值:

    1. 1. 对于单点登录 URL,请输入适用于商业 Amazon 区域的 https://signin.aws.amazon.com/saml 或您所在区域的特定 URL。

    2. 2. 对于受众 URI(SP 实体 ID),输入 urn:amazon:webservices

    3. 3. 对于名称 ID 格式,输入 EmailAddress

  7. 选择下一步

  8. 选择我是 Okta 客户,正在添加内部应用,然后选择这是我们创建的内部应用

  9. 选择完成

  10. 选择任务,然后选择分配

  11. 选择分配给组,然后选择要添加组旁边的分配

  12. 选择完成

任务 4:设置 Oka 高级配置

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

  1. 以具备管理权限的用户身份登录 Okta 组织,网址为 https://login.okta.com/

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

  2. 选择下一步

  3. 使用以下格式,将默认中继状态设置为 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

  4. 属性语句(可选)项下,添加以下属性:

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

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

    有关参考:

    名称 名称格式 格式 示例

    https://aws.amazon.com/SAML/Attributes/Role

    未指定

    arn:aws:iam::aws-account-id:role/role-name,arn:aws:iam::aws-account-id:saml-provider/provider-name

    arn:aws:iam::111222333444:role/oktarole,arn:aws:iam::111222333444:saml-provider/oktaidp

    https://aws.amazon.com/SAML/Attributes/RoleSessionName

    未指定

    user.login

    user.login

  5. 添加属性后,选择下一步,然后选择完成

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

“SAML 2.0”区域报告应用程序的默认中继状态 URL 和元数据 URL。

步骤 2:为 Okta 设置 Amazon 配置

要为 Okta 设置 Amazon 配置,请完成以下任务。

任务 1:收集 Okta 信息

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

  1. 以具备管理权限的用户身份登录 Okta 组织,网址为 https://login.okta.com/

  2. 在页面右下角的登录选项卡上,选择查看 SAML 设置说明

  3. 记录身份提供程序单点登录 URL 的值。在连接到任何第三方 SQL 客户端(例如 SQL Workbench/J)时,您可以使用此 URL。

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

任务 2:创建 IAM 提供程序

要创建 IAM 提供程序,请完成以下步骤:

  1. 登录 Amazon Web Services 管理控制台,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航面板的访问管理下,选择身份提供程序

  3. 选择添加提供程序

  4. 对于提供程序类型,选择 SAML

  5. 对于提供程序名称,输入名称。

  6. 对于元数据文档,选择选择文件,并上传您先前下载的元数据文件(.xml)。

  7. 选择添加提供程序

任务 3:创建 IAM 角色

要创建 Amazon Identity and Access Management 角色,请完成以下步骤:

  1. 登录 Amazon Web Services 管理控制台,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格的访问权限管理下,选择角色

  3. 选择创建角色

  4. 对于可信实体类型,选择 SAML 2.0 联合身份验证

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

  6. 选择 Allow programmatic and Amazon Web Services 管理控制台 access(允许编程和访问)。

  7. 选择下一步

  8. 权限策略列表中,选择您先前创建的策略以及 OpenSearchFullAccess 复选框。

  9. 选择下一步

  10. 审核区域中,对于角色名称,键入角色的名称(例如,oktarole)。

  11. (可选)对于描述,输入角色用途的简要描述。

  12. 选择创建角色

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

  14. 编辑语句窗格的为 STS 添加操作下,选择 TagSession 复选框。

  15. 选择更新策略

步骤 3:在 IAM 中创建 Amazon OpenSearch Service 访问策略

了解如何为 OpenSearch 访问控制配置 IAM 角色。借助 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 OpenSearch Service 域角色映射到 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 验证身份提供程序启动的单点登录体验

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

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

在 Okta 的“设置和设置”页面中,选择用户图标会显示当前用户的凭证。

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

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 基于属性的精细访问控制

借助 Amazon OpenSearch Service,您可以通过 SAML 使用精细访问控制,将用户和组从身份提供商动态映射到 OpenSearch 精细访问控制用户和角色。您可以将这些角色限定在特定的 OpenSearch 域和无服务器集合中,并定义索引级权限和文档级安全性。

注意

有关精细访问控制的更多信息,请参阅 在 Amazon OpenSearch Service 中进行精细访问控制

用于精细访问控制的 SAML 属性

subjectKey

映射到唯一用户属性(如电子邮件或用户名),用于在身份验证过程中识别用户。

rolesKey

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

任务 1:配置 Okta 以实现精细访问控制

配置 Okta 以实现精细访问控制
  1. 属性语句部分,为 OpenSearch 用户主体添加新属性:

    • 名称:UserName

    • 值:${user-email}

    此属性用作 OpenSearch 精细访问控制配置中身份验证的主题密钥

  2. 组属性语句部分中,为角色添加组属性:

    • 名称:groups

    • 筛选:OpenSearch_xxx

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

任务 2:在 OpenSearch 域中配置 SAML

在 OpenSearch 域中配置 SAML
  1. 在 Amazon 管理控制台中,确定要为 OpenSearch UI 用户启用精细访问控制的 OpenSearch Service 域。

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

  3. 选择安全配置选项卡,并点击编辑

  4. 展开通过 IAM 联合身份验证的 SAML

  5. 输入您在 Okta 中定义的 subjectKeyroleKey

  6. 选择保存更改

您还可以使用 Amazon 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

在 OpenSearch 无服务器中配置基于 SAML 的精细访问控制
  1. 打开 Amazon Web Services 管理控制台 并导航到 Amazon OpenSearch Service。

  2. 在导航窗格的无服务器下,选择安全,然后选择身份验证

  3. IAM 联合身份验证部分,选择编辑

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

  4. 选择启用 IAM 联合身份验证

  5. 输入您在 Okta 中定义的 subjectKeyroleKey 值。

    有关更多信息,请参阅 用于精细访问控制的 SAML 属性

  6. 选择保存

  7. 在导航窗格的无服务器下,选择数据访问策略

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

  9. 展开规则,选择添加主体,然后选择 IAM 联合用户和组

  10. 添加所需的主体,并选择保存

  11. 选择授权

  12. 在此规则下,执行以下操作:

    • 选择要为所选主体定义的权限。

    • 指定要在其中应用权限的集合。

    • (可选)定义索引级权限。

    注意

    您可以创建多个规则,为不同的主体组分配不同的权限。

  13. 完成后,选择保存

  14. 选择创建

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

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