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

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

使用启用 SAML 联合 Amazon Identity and Access Management

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

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

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

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

任务 1:创建 Okta 用户
  1. 以具有管理权限的用户身份通过 https://login.okta.com/登录您的 Okta 组织。

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

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

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

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

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

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

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

  9. 选择保存

任务 2:创建和分配组
  1. 以具有管理权限的用户身份通过 https://login.okta.com/登录您的 Okta 组织。

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

  3. 选择添加组

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

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

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

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

任务 3:创建 Okta 应用程序
  1. 以具有管理权限的用户身份通过 https://login.okta.com/登录您的 Okta 组织。

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

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

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

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

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

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

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

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

  7. 选择下一步

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

  9. 选择结束

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

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

  12. 选择完成

任务 4:设置 Oka 高级配置

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

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

    在管理员控制台的常规区域中,选择 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. user.login 设置为。RoleSessionName这用作代入角色时签发的临时凭证的标识符。

    有关参考:

    Name 名称格式 格式 示例

    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. 以具有管理权限的用户身份通过 https://login.okta.com/登录您的 Okta 组织。

  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. 选择 “允许编程和 Amazon Web Services 管理控制台 访问”。

  7. 选择下一步

  8. 权限策略列表中,选中授予 OpenSearch 服务权限的策略(例如 Amazon 托管策略)的复选框AmazonOpenSearchServiceFullAccess

  9. 选择下一步

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

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

  12. 选择创建角色

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

  14. “编辑语句” 窗格的 “为 STS 添加操作” 下,选中相应的复选框TagSession

  15. 选择更新策略

步骤 3:在 IAM 中创建亚马逊 OpenSearch 服务访问策略

了解如何配置您的 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 验证身份提供程序启动的单点登录体验

打开默认中继状态的 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 S OpenSearch ervice,您可以将精细的访问控制与 SAML 结合使用,将身份提供商中的用户和群组动态映射到 OpenSearch 精细的访问控制用户和角色。您可以将这些角色的范围限定为特定的 OpenSearch 域和无服务器集合,并定义索引级权限和文档级安全性。

注意

有关精细访问控制的更多信息,请参阅 Amazon 服务中的精细访问控制 OpenSearch

用于精细访问控制的 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 用户界面用户启用精细访问控制的 OpenSearch 服务域。

  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

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

  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"}'