通过 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 用户
-
以具备管理权限的用户身份登录 Okta 组织,网址为 https://login.okta.com/
。 -
在管理员控制台上,在导航窗格的目录下,选择人员。
-
选择 Add person(添加人员)。
-
对于名字,输入用户的名字。
-
对于姓氏,输入用户的姓氏。
-
对于用户名,以电子邮件格式输入用户的用户名。
-
选择我将设置密码,并输入密码
-
(可选)如果不希望用户首次登录时更改密码,请取消勾选用户首次登录时必须更改密码复选框。
-
选择保存。
任务 2:创建和分配组
-
以具备管理权限的用户身份登录 Okta 组织,网址为 https://login.okta.com/
。 -
在管理员控制台上,在导航窗格的目录下,选择组。
-
选择添加组。
-
输入组名称,并选择保存。
-
选择新创建的组,然后选择分配人员。
-
选择加号(+),然后选择完成。
-
(可选)重复步骤 1-6 以添加更多的组。
任务 3:创建 Okta 应用程序
-
以具备管理权限的用户身份登录 Okta 组织,网址为 https://login.okta.com/
。 -
在管理员控制台上,在导航窗格的应用程序下,选择应用程序。
-
选择创建应用程序集成。
-
选择 SAML 2.0 作为登录方法,然后选择下一步。
-
输入应用程序集成的名称(例如
OpenSearch_UI),然后选择下一步。 -
在应用程序中输入以下值;无需更改其他值:
-
1. 对于单点登录 URL,请输入适用于商业 Amazon 区域的
https://signin.aws.amazon.com/saml或您所在区域的特定 URL。 -
2. 对于受众 URI(SP 实体 ID),输入
urn:amazon:webservices。 -
3. 对于名称 ID 格式,输入
EmailAddress
-
-
选择下一步。
-
选择我是 Okta 客户,正在添加内部应用,然后选择这是我们创建的内部应用。
-
选择完成。
-
选择任务,然后选择分配。
-
选择分配给组,然后选择要添加组旁边的分配。
-
选择完成。
任务 4:设置 Oka 高级配置
创建自定义 SAML 应用程序后,完成以下步骤:
-
以具备管理权限的用户身份登录 Okta 组织,网址为 https://login.okta.com/
。 在管理员控制台的常规区域中,选择 SAML 设置下的编辑。
-
选择下一步。
-
使用以下格式,将默认中继状态设置为 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 -
在属性语句(可选)项下,添加以下属性:
-
使用角色属性,以逗号分隔格式提供 IAM 角色和身份提供程序。在后续步骤中,您将在设置 Amazon 配置时使用相同的 IAM 角色和身份提供程序。
-
为 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-namearn:aws:iam::111222333444:role/oktarole,arn:aws:iam::111222333444:saml-provider/oktaidphttps://aws.amazon.com/SAML/Attributes/RoleSessionName未指定
user.loginuser.login -
-
添加属性后,选择下一步,然后选择完成。
您的属性格式应与下图所示的属性格式相似。默认中继状态值是指您账户或组织中的最终用户完成 Okta 单点登录验证后定义登录页面的 URL。您可以在 OpenSearch UI 中将其设置为任意页面,然后将该 URL 提供给目标最终用户。
步骤 2:为 Okta 设置 Amazon 配置
要为 Okta 设置 Amazon 配置,请完成以下任务。
任务 1:收集 Okta 信息
在此步骤中,您需要收集 Okta 信息,以便稍后在 Amazon 中对其进行配置。
-
以具备管理权限的用户身份登录 Okta 组织,网址为 https://login.okta.com/
。 -
在页面右下角的登录选项卡上,选择查看 SAML 设置说明。
-
记录身份提供程序单点登录 URL 的值。在连接到任何第三方 SQL 客户端(例如 SQL Workbench/J
)时,您可以使用此 URL。 -
使用区块 4 中的身份提供程序元数据,然后将元数据文件以 .xml 格式进行保存(例如,
metadata.xml)。
任务 2:创建 IAM 提供程序
要创建 IAM 提供程序,请完成以下步骤:
登录 Amazon Web Services 管理控制台,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。
-
在导航面板的访问管理下,选择身份提供程序。
-
选择添加提供程序。
-
对于提供程序类型,选择 SAML。
-
对于提供程序名称,输入名称。
-
对于元数据文档,选择选择文件,并上传您先前下载的元数据文件(.xml)。
-
选择添加提供程序。
任务 3:创建 IAM 角色
要创建 Amazon Identity and Access Management 角色,请完成以下步骤:
登录 Amazon Web Services 管理控制台,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。
-
在导航窗格的访问权限管理下,选择角色。
-
选择创建角色。
-
对于可信实体类型,选择 SAML 2.0 联合身份验证。
-
对于基于 SAML 2.0 的提供程序,选择您先前创建的身份提供程序。
-
选择 Allow programmatic and Amazon Web Services 管理控制台 access(允许编程和访问)。
-
选择下一步。
-
在权限策略列表中,选择您先前创建的策略以及 OpenSearchFullAccess 复选框。
-
选择下一步。
-
在审核区域中,对于角色名称,键入角色的名称(例如,
oktarole)。 -
(可选)对于描述,输入角色用途的简要描述。
-
选择创建角色。
-
导航到您刚创建的角色,选择信任关系选项卡,然后选择编辑信任策略。
-
在编辑语句窗格的为 STS 添加操作下,选择 TagSession 复选框。
-
选择更新策略。
步骤 3:在 IAM 中创建 Amazon OpenSearch Service 访问策略
了解如何为 OpenSearch 访问控制配置 IAM 角色。借助 IAM 角色,您可以对 Okta 用户组实施精细访问控制,以便访问 OpenSearch 资源。本主题使用两个示例组展示基于 IAM 角色的配置。
您可以使用后端角色映射将 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。
您可通过点击导航面板底部的用户图标查看当前凭证,如下图所示:
您还可以通过访问导航面板底部的开发人员工具,并在控制台中运行查询,以验证用户的精细访问控制权限。下面是示例查询。
第 5 步:配置 SAML 基于属性的精细访问控制
借助 Amazon OpenSearch Service,您可以通过 SAML 使用精细访问控制,将用户和组从身份提供商动态映射到 OpenSearch 精细访问控制用户和角色。您可以将这些角色限定在特定的 OpenSearch 域和无服务器集合中,并定义索引级权限和文档级安全性。
注意
有关精细访问控制的更多信息,请参阅 在 Amazon OpenSearch Service 中进行精细访问控制。
主题
用于精细访问控制的 SAML 属性
- subjectKey
-
映射到唯一用户属性(如电子邮件或用户名),用于在身份验证过程中识别用户。
- rolesKey
-
映射至 IdP 中的组或角色属性,这些属性决定授权所需的角色或权限。
任务 1:配置 Okta 以实现精细访问控制
配置 Okta 以实现精细访问控制
-
在属性语句部分,为 OpenSearch 用户主体添加新属性:
-
名称:
UserName -
值:
${user-email}
此属性用作 OpenSearch 精细访问控制配置中身份验证的主题密钥。
-
-
在组属性语句部分中,为角色添加组属性:
-
名称:
groups -
筛选:
OpenSearch_xxx
此属性用作角色键,用于将组映射到OpenSearch精细访问控制角色以进行授权。
-
任务 2:在 OpenSearch 域中配置 SAML
在 OpenSearch 域中配置 SAML
-
在 Amazon 管理控制台中,确定要为 OpenSearch UI 用户启用精细访问控制的 OpenSearch Service 域。
-
导航到特定域的详细信息页面
-
选择安全配置选项卡,并点击编辑。
-
展开通过 IAM 联合身份验证的 SAML。
-
输入您在 Okta 中定义的
subjectKey和roleKey。 -
选择保存更改。
您还可以使用 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 的精细访问控制
-
打开 Amazon Web Services 管理控制台 并导航到 Amazon OpenSearch Service。
-
在导航窗格的无服务器下,选择安全,然后选择身份验证。
-
在 IAM 联合身份验证部分,选择编辑。
您可以使用此配置控制 SAML 基于属性的精细访问控制。默认情况下,IAM 联合身份验证处于禁用状态。
-
选择启用 IAM 联合身份验证。
-
输入您在 Okta 中定义的
subjectKey和roleKey值。有关更多信息,请参阅 用于精细访问控制的 SAML 属性 。
-
选择保存。
-
在导航窗格的无服务器下,选择数据访问策略。
-
更新现有策略或创建新策略。
-
展开规则,选择添加主体,然后选择 IAM 联合用户和组。
-
添加所需的主体,并选择保存。
-
选择授权。
-
在此规则下,执行以下操作:
-
选择要为所选主体定义的权限。
-
指定要在其中应用权限的集合。
-
(可选)定义索引级权限。
注意
您可以创建多个规则,为不同的主体组分配不同的权限。
-
-
完成后,选择保存。
-
选择创建。
或者,您也可以使用 CLI 为集合创建安全配置,如下所示:
aws opensearchserverless create-security-config --region "region" --type iamfederation --name "configuration_name" --description "description" --iam-federation-options '{"groupAttribute":"GroupKey","userAttribute":"UserKey"}'