本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SAML OpenSearch 仪表板的身份验证
SAML OpenSearch 控制面板身份验证允许您使用现有的身份提供商为运行 OpenSearch 或 Elasticsearch 6.7 或更高版本的亚马逊 OpenSearch 服务域上的控制面板提供单点登录 (SSO)。要使用SAML身份验证,必须启用精细的访问控制。
控制面板的身份验证允许您使用第三方身份提供商登录控制面板SAML、管理精细访问控制、搜索数据和构建可视化效果,而不是通过 Amazon Cognito 或内部用户数据库进行身份验证 OpenSearch 。 OpenSearch 服务支持使用 SAML 2.0 标准的提供商,例如 Okta、Keycloak、Active Directory 联合服务 (ADFS)、Auth0 和。 AWS IAM Identity Center
SAML仪表板的身份验证仅适用于通过 Web 浏览器访问 OpenSearch 仪表板。您的SAML凭据不允许您直接向 OpenSearch 或控制面板HTTP发出请求APIs。
SAML配置概述
本文档假定您有现有的身份提供程序并且熟悉它。我们无法为您的确切提供商提供详细的配置步骤,只能为您的 OpenSearch 服务域提供详细的配置步骤。
OpenSearch 仪表板登录流程可以采用以下两种形式之一:
-
已启动服务提供程序 (SP):导航到控制面板(例如
https://
),它会将您重定向到登录屏幕。登录后,身份提供程序会将您重定向到控制面板。my-domain
.us-east-1
.es.amazonaws.com/_dashboards -
身份提供者 (IdP) 已启动:您导航到您的身份提供商,登录,然后从应用程序目录中选择 Dash OpenSearch boards。
OpenSearch 服务提供两种单点登录URLs,SP 启动和 IDP 启动,但您只需要与所需控制面板登录流程相匹配的单点登录。 OpenSearch
无论您使用哪种身份验证类型,目标都是通过您的身份提供商登录并收到包含您的用户名(必填)和任何后端角色(可选,但建议使用)的SAML断言。这些信息允许精细的访问控制来为用户分配权限。SAML在外部身份提供程序中,后端角色通常称为“角色”或“组”。
注意事项
配置SAML身份验证时,请考虑以下几点:
-
由于 IdP 元数据文件的大小,我们强烈建议使用 AWS 控制台配置SAML身份验证。
-
域一次只支持一种控制面板身份验证方法。如果您启用了 OpenSearch 控制面板的 Amazon Cognito 身份验证,则必须先将其禁用,然后才能启用SAML身份验证。
-
如果您将网络负载均衡器与配合使用SAML,则必须先创建自定义终端节点。有关更多信息,请参阅 为 Amazon OpenSearch Service 服务创建自定义终端节点。
-
对于非IAM身份SCP(例如在 Amazon OpenSearch Serverless SAML 和亚马逊服务的基本内部用户授权SAML中), OpenSearch 服务控制策略 () 将不适用或评估。
SAMLVPC域名认证
SAML不需要您的身份提供商和服务提供商之间进行直接通信。因此,即使您的 OpenSearch 域名托管在私有域中VPC,SAML只要您的浏览器可以与 OpenSearch 集群和身份提供商通信,您仍然可以使用。您的浏览器基本上充当身份提供商和服务提供商之间的中间人。有关解释SAML身份验证流程的有用图表,请参阅 Okta 文档
修改域访问策略
在配置SAML身份验证之前,必须更新域访问策略以允许SAML用户访问该域。否则,会显示拒绝访问的错误。
我们建议使用以下域访问策略,它将提供针对域上子资源 (/*
) 的完全访问权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESHttp*", "Resource": "domain-arn/*" } ] }
要使策略的限制更为严格,可以在策略中添加 IP 地址条件。此条件将仅允许访问指定的 IP 地址范围或子网。例如,以下策略仅允许从 192.0.2.0/24 子网进行访问:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "es:ESHttp*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "192.0.2.0/24" ] } }, "Resource": "domain-arn/*" } ] }
注意
开放域访问策略要求在域上启用精细访问控制,否则您会看到以下错误:
To protect domains with public access, a restrictive policy or fine-grained
access control is required.
如果您的主用户或内部用户配置了强健密码,则从安全角度来看,在使用精细访问控制的同时保持策略开放也许是可以接受的。有关更多信息,请参阅 在 Amazon OpenSearch Service 中进行精细访问控制。
配置 SP 或 IdP 发起的身份验证
这些步骤说明了如何使用由 SP 启动或 IDP 启动的SAML身份验证为仪表板启用身份验证。 OpenSearch 有关同时启用这两种身份验证所需的额外步骤,请参阅配置 SP 和 IdP 发起的身份验证。
步骤 1:启用SAML身份验证
您可以在创建域时启用SAML身份验证,也可以通过选择操作、编辑现有域上的安全配置来启用身份验证。根据您的选择,以下步骤略有不同。
在域配置中,在 D OpenSearch ashboards/Kibana 的SAML身份验证下,选择启用身份验证。SAML
步骤 2:配置身份提供程序
根据配置SAML身份验证的时间,执行以下步骤。
如果正在创建新域
如果您正在创建新域,则服务还无法生成 OpenSearch 服务提供商实体 ID 或SSOURLs。您的身份提供商需要这些值才能正确启用SAML身份验证,但它们只能在创建域之后生成。要在域创建期间解决这种相互依赖关系,您可以在 IdP 配置中提供临时值以生成所需的元数据,然后在域处于活动状态后对其进行更新。
如果您使用的是自定义终端节点,则可以推断出URLs将是什么。例如,如果您的自定义终端节点是www.
,则服务提供商实体 ID 将是custom-endpoint
.comwww.
,IDP 启动的SSOURL将是custom-endpoint
.comwww.
,S SSO URL P 启动的将是。custom-endpoint
.com/_dashboards/_opendistro/_security/saml/acs/idpinitiatedwww.
在创建域之前,您可以使用这些值来配置身份提供程序。有关示例,请参阅下一节。custom-endpoint
.com/_dashboards/_opendistro/_security/saml/acs
注意
您无法使用双堆栈端点登录,因为HTTP请求FQDN的与SAML请求FQDN的不同。如果您想使用双堆栈端点登录,则 OpenSearch管理员需要设置自定义终端节点并将该CNAME值设置为双堆栈端点。
如果您没有使用自定义端点,则可以在 IdP 中输入临时值以生成所需的元数据,然后在域处于活动状态后对其进行更新。
例如,在 Okta https://
中,您可以在 “单点登录” URL 和 “受众URI(SP 实体 ID)” 字段中输入,这样您就可以生成元数据。然后,在域名处于活动状态后,您可以从 S OpenSearch ervice 中检索正确的值并在 Okta 中对其进行更新。有关说明,请参阅 第 6 步:更新你的 IdP URLs。temp-endpoint
.amazonaws.com
如果您正在编辑现有域
如果您要在现有域上启用SAML身份验证,请复制服务提供商实体 ID 和其中一个SSOURLs。有关使用哪种方法URL的指导,请参阅SAML配置概述。
使用这些值配置您的身份提供程序。这是过程中最复杂的部分,不幸的是,术语和步骤因提供程序而异。请参阅提供程序的文档。
例如,在 Okta 中,你创建了一个 SAML 2.0 的 Web 应用程序。对于单点登录 URL,请指定SSOURL。对于受众URI(SP 实体 ID),请指定 SP 实体 ID。
Okta 拥有用户和组,而不是用户和后端角色。对于 Group Attribute Statements(组属性语句),建议将 role
添加到 Name(名称)字段,并将正则表达式 .+
添加到 Filter(筛选条件)字段。此语句告诉 Okta 身份提供者在用户进行身份验证后将所有用户组包含在SAML断言role
字段下。
在 IAM Identity Center 中,您可以将 SP 实体 ID 指定为应用程序SAML受众。您还需要指定以下属性映射:Subject=${user:subject}:format=unspecified
和 Role=${user:groups}:format=uri
。
在 Auth0 中,您可以创建一个常规 Web 应用程序并启用 SAML 2.0 插件。在 Keycloak 中,创建客户端。
步骤 3:导入 IdP 元数据
配置了身份提供程序后,它会生成 IdP 元数据文件。此XML文件包含有关提供商的信息,例如TLS证书、单点登录端点和身份提供者的实体 ID。
复制 IdP 元数据文件的内容并将其粘贴到服务控制台的 “来自 IdP 的元数据” 字段中。 OpenSearch 或者,选择从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> </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>
步骤 4:配置SAML字段
输入 IdP 元数据后,请在 OpenSearch 服务控制台中配置以下其他字段:
-
IdP entity ID(IdP 实体 ID):从元数据文件中复制
entityID
属性值粘贴到此字段。许多身份提供程序还将此值显示为配置后摘要的一部分。有些提供程序称之为 “发行人”。 -
SAML主用户名和SAML主后端角色-您指定的用户和/或后端角色获得集群的完全权限,相当于新的主用户,但只能在 OpenSearch 控制面板中使用这些权限。
例如,在 Okta 中,您可能有属于群组
admins
的用户jdoe
。如果jdoe
添加到SAML主用户名字段,则只有该用户获得完全权限。如果您admins
添加到SAML主后端角色字段,则属于该admins
组的任何用户都将获得完全权限。注意
SAML断言的内容必须与您用于SAML主用户名和SAML主角色的字符串完全匹配。一些身份提供商在其用户名前添加前缀,这可能会导致 hard-to-diagnose不匹配。在身份提供商用户界面中,您可能会看到
jdoe
,但SAML断言可能包含auth0|jdoe
。始终使用SAML断言中的字符串。
许多身份提供者允许您在配置过程中查看示例断言,而诸如 SAML-tracer
<?xml version="1.0" encoding="UTF-8"?> <saml2:Assertion ID="id67229299299259351343340162" IssueInstant="2020-09-22T22:03:08.633Z" Version="2.0" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"> <saml2:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">
idp-issuer
</saml2:Issuer> <saml2:Subject> <saml2:NameID
Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">username
</saml2:NameID> <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"> <saml2:SubjectConfirmationData NotOnOrAfter="2020-09-22T22:08:08.816Z" Recipient="domain-endpoint/_dashboards/_opendistro/_security/saml/acs
"/> </saml2:SubjectConfirmation> </saml2:Subject> <saml2:Conditions NotBefore="2020-09-22T21:58:08.816Z" NotOnOrAfter="2020-09-22T22:08:08.816Z"> <saml2:AudienceRestriction> <saml2:Audience>domain-endpoint
</saml2:Audience> </saml2:AudienceRestriction> </saml2:Conditions> <saml2:AuthnStatement AuthnInstant="2020-09-22T19:54:37.274Z"> <saml2:AuthnContext> <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml2:AuthnContextClassRef> </saml2:AuthnContext> </saml2:AuthnStatement> <saml2:AttributeStatement> <saml2:Attribute Name="role
" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"> <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">GroupName Match Matches regex ".+" (case-sensitive) </saml2:AttributeValue> </saml2:Attribute> </saml2:AttributeStatement> </saml2:Assertion>
步骤 5:(可选)配置其他设置
在 Additional settings(其他设置)下,配置以下可选字段:
-
Subject key — 您可以将此字段留空,以便使用SAML断言
NameID
元素作为用户名。如果您的断言不使用此标准元素,而是将用户名作为自定义属性,请在此处指定该属性。 -
Roles key(角色密钥):如果要使用后端角色(推荐),请在此字段指定断言的属性,例如
role
或group
。这是像 SAML-tracer这样的工具可以提供帮助的另一种情况。 -
会话上线时间-默认情况下, OpenSearch 控制面板会在 24 小时后将用户注销。通过指定新值,可以将此值配置为 60 到 1440(24 小时)之间的任何数字。
配置好后,请保存域。
第 6 步:更新你的 IdP URLs
如果您在创建域时启用了SAML身份验证,则必须在 IdP 中指定临时URLs身份才能生成XML元数据文件。在域名状态更改为后Active
,您可以获取正确的域名URLs并修改您的 IdP。
要检索URLs,请选择域并选择操作、编辑安全配置。在 OpenSearch Dashboards/Kibana 的SAML身份验证下,您可以找到正确的服务提供商实体 ID 和。SSO URLs复制这些值并使用它们来配置您的身份提供商,替换您在步骤 2 中提供的临时URLs身份提供商。
步骤 7:将SAML用户映射到角色
当您的域名状态为 “激活” 且您的 IdP 配置正确后,请导航至 OpenSearch 控制面板。
-
如果您选择了 SP 启动的URL,请导航至。
要直接登录到特定租户,可以附加domain-endpoint
/_dashboards?security_tenant=
到。URLtenant-name
-
如果您选择 IdP 启动的URL,请导航到身份提供商的应用程序目录。
在这两种情况下,都要以SAML主用户或属于SAML主后端角色的用户身份登录。要继续执行步骤 7 中的示例,请以 jdoe
或 admins
组中 成员录入)。
OpenSearch 仪表板加载后,选择安全、角色。然后,映射角色以允许其他用户访问 OpenSearch 仪表板。
例如,您可能将受信任的同事 jroe
映射添加到 all_access
和 security_manager
角色。您还可以将后端角色 analysts
映射添加到 readall
和 opensearch_dashboards_user
角色。
如果您更喜欢使用 OpenSearch 仪表板API而不是控制面板,请参阅以下示例请求:
PATCH _plugins/_security/api/rolesmapping [ { "op": "add", "path": "/security_manager", "value": { "users": ["
master-user
", "jdoe", "jroe"], "backend_roles": ["admins"] } }, { "op": "add", "path": "/all_access", "value": { "users": ["master-user
", "jdoe", "jroe"], "backend_roles": ["admins"] } }, { "op": "add", "path": "/readall", "value": { "backend_roles": ["analysts"] } }, { "op": "add", "path": "/opensearch_dashboards_user", "value": { "backend_roles": ["analysts"] } } ]
配置 SP 和 IdP 发起的身份验证
如果要配置 SP 和 IDP 启动的身份验证,则必须通过身份提供程序执行此操作。例如,在 Okta 中,您可以执行以下步骤:
-
在SAML应用程序中,前往常规、SAML设置。
-
对于单点登录 URL,请提供您的 IdP 启动版。SSO URL例如,
https://search-
。domain-hash
/_dashboards/_opendistro/_security/saml/acs/idpinitiated
-
启用 “允许此应用请求其他” SSO URLs。
-
在 “可申请” 下 SSOURLs,添加一个或多个 S SSO URLs P 启动的。例如,
https://search-
。domain-hash
/_dashboards/_opendistro/_security/saml/acs
配置SAML身份验证 (AWS CLI)
以下 AWS CLI 命令为现有域上的 OpenSearch 仪表板启用SAML身份验证:
aws opensearch update-domain-config \ --domain-name
my-domain
\ --advanced-security-options '{"SAMLOptions":{"Enabled":true
,"MasterUserName":"my-idp-user
","MasterBackendRole":"my-idp-group-or-role
","Idp":{"EntityId":"entity-id
","MetadataContent":"metadata-content-with-quotes-escaped
"},"RolesKey":"optional-roles-key
","SessionTimeoutMinutes":180
,"SubjectKey":"optional-subject-key
"}}'
必须对元数据XML中的所有引号和换行符进行转义。例如,使用 <KeyDescriptor use=\"signing\">\n
而不是 <KeyDescriptor use="signing">
和换行符。有关使用的详细信息 AWS CLI,请参阅AWS CLI 命令参考。
配置SAML身份验证(配置API)
以下配置请求API允许在现有域上对 OpenSearch 仪表板进行SAML身份验证:
POST https://es.
us-east-1
.amazonaws.com/2021-01-01/opensearch/domain/my-domain
/config { "AdvancedSecurityOptions": { "SAMLOptions": { "Enabled":true
, "MasterUserName": "my-idp-user
", "MasterBackendRole": "my-idp-group-or-role
", "Idp": { "EntityId": "entity-id
", "MetadataContent": "metadata-content-with-quotes-escaped
" }, "RolesKey": "optional-roles-key
", "SessionTimeoutMinutes":180
, "SubjectKey": "optional-subject-key
" } } }
必须对元数据XML中的所有引号和换行符进行转义。例如,使用 <KeyDescriptor use=\"signing\">\n
而不是 <KeyDescriptor use="signing">
和换行符。有关使用配置的详细信息API,请参阅OpenSearch 服务参API考。
SAML故障排除
错误 | 详细信息 |
---|---|
|
确认您向身份提供商提供了正确的信息 SSOURL(步骤 3)。 |
|
您的 IdP 元数据文件不符合 SAML 2.0 标准。使用验证工具检查错误。 |
SAML配置选项在控制台中不可见。 |
更新到最新服务软件。 |
|
出现这种通用错误的原因很多。
|
|
您成功进行了身份验证,但是SAML断言中的用户名和任何后端角色都未映射到任何角色,因此没有权限。这些映射区分大小写。 您的系统管理员可以使用诸如 SAML-tracer
|
尝试访问 OpenSearch 仪表板时,您的浏览器会持续重定向或收到 HTTP 500 个错误。 |
如果您的SAML断言包含大量角色,总共约为 1,500 个字符,则可能会发生这些错误。例如,如果您传递 80 个角色(其平均长度为 20 个字符),则可能会超过 Web 浏览器中 Cookie 的大小限制。从 2.7 OpenSearch 版开始,SAML断言支持最多 5000 个字符的角色。 |
您无法登出ADFS。 |
ADFS需要对所有注销请求进行签名,但 OpenSearch 服务不支持。 |
|
在元数据中提供XML给 OpenSearch 服务的 IdP 的实体 ID 与响应中的实体 ID 不同。SAML要解决这个问题,请确保二者匹配。在您的域上启用 CW 应用程序错误日志,查找错误消息以调试SAML集成问题。 |
|
OpenSearch 服务无法使用元数据中提供的 IdP 证书验证SAML响应中的签名。XML可能是手动错误,也可能是 IdP 已轮换证书。在通过XML提供给 OpenSearch 服务的元数据中更新来自您的 IdP 的最新证书。 AWS Management Console |
|
SAML响应中的受众字段与域端点不匹配。要修复此错误,请更新 SP 受众字段,使其与域端点相符。如果已启用自定义端点,则受众字段应与自定义端点匹配。在您的域上启用 CW 应用程序错误日志,查找错误消息以调试SAML集成问题。 |
您的浏览器在响应 |
如果您将 IdP 启动URL的格式配置为该格式,通常会发生此错误。 |
通过 |
SAML响应中的目标字段与以下URL格式之一不匹配:
根据您使用的登录流程(SP 启动或 IDP 发起的),在与其中一个匹配的目标字段中输入。 OpenSearch URLs |
响应具有 |
您正在使用 IDP 启动的 SP 启动URL的登录流程。改用 SP 启动的URL。 |
禁用SAML身份验证
禁用 OpenSearch 仪表板的SAML身份验证(控制台)
-
选择域、Actions(操作)和 Edit security configuration(编辑安全配置)。
-
取消选中启用SAML身份验证。
-
选择 Save changes(保存更改)。
-
域完成处理后,请使用以下请求验证精细访问控制角色映射:
GET _plugins/_security/api/rolesmapping
禁用仪表板的SAML身份验证不会删除SAML主用户名和/或SAML主后端角色的映射。如果要移除这些映射,请使用内部用户数据库(如果启用)登录控制面板,或者使用API将其删除:
PUT _plugins/_security/api/rolesmapping/
all_access
{ "users": [ "master-user
" ] }