本文介绍如何通过配置安全断言标记语言SAML(Security Assertion Markup Language)的身份提供者IDaaS(Alibaba Cloud Identity as a Service)和服务提供者Elasticsearch及Kibana,实现单点登录Kibana控制台。
背景信息
Elasticsearch支持SAML单点登录(SSO)到Kibana。在SAML术语中,Elasticsearch和Kibana作为服务提供者SP(Service Provider),支持SAML 2.0 协议的Web浏览器SSO和SAML 2.0 Single Logout配置 ,这使您能够使用任何符合SAML 2.0 的身份提供者IDP( IDentity Provider)访问阿里云Elasticsearch和Kibana,例如阿里云应用身份服务IDaaS(Alibaba Cloud Identity as a Service)、联合身份验证服务ADFS(Active Directory Federation Services)等。本文以IDaaS为例进行介绍。
- 阿里云应用身份服务IDaaS:是阿里云为企业用户提供的一套集中式身份、权限、应用管理服务,IDaaS支持多种产品,例如EIAM、CIAM等。
- 安全断言标记语言SAML:基于XML协议,使用包含断言(Assertion)的安全令牌,在身份提供者IDP和服务提供者SP之间传递身份信息,实现基于网络跨域的单点登录。SAML协议是成熟的认证协议,在公有云和私有云中有非常广泛的运用。
- 单点登录SSO(Single Sign On):是指在多个应用系统中,用户只需要登录一次,就可以访问所有相互信任的应用系统。
前提条件
- 创建阿里云Elasticsearch实例7.10版本,并开启HTTPS访问协议。
创建实例的具体操作,请参见创建阿里云Elasticsearch实例。本文以7.10版本实例为例,其他版本的操作配置可能存在差异,具体以实际界面为准。
开启HTTPS的具体操作,请参见使用HTTPS协议。
- 开通IDaaS服务的EIAM实例。说明 elastic仅支持SAML身份验证的HTTP-Redirect binding方式,不支持HTTP-POST binding及其他方式,因此只需保证PC端可以访问IDP及SP服务即可。
注意事项
目前,SAML单点登录仅支持后端手动配置,您需要先参考本文,在测试环境配置并测试成功后,再提交工单,将IDaaS SAML元配置文件、elasticsearch.yml和kibana.yml配置文件提供给技术人员帮您配置。
操作流程
步骤一:配置IDaaS SAML应用
- 登录IDaaS管理平台,进入EIAM实例,添加SAML应用。
- 在添加应用(SAML)面板,单击目标SigningKey右侧的选择,配置IDP认证ID及SP认证信息。说明 如果没有SigningKey,需要先添加或导入一个SigningKey。您需要配置以下参数,其他参数保持默认。
参数 说明 应用名称 自定义SAML应用的名称。 IDP IdentityId 在IDaaS中设置的认证参数,需要将此参数配置到SP中,可设置为IDaaS。 SP Entity ID 服务提供者SP的访问URL。本文的服务提供者为Kibana,因此需要配置为Kibana服务的基础访问URL,并使用HTTPS协议。 SP ACS URL(SSO Location) 断言消费服务ACS端点,一般为Kibana的URL,用来接收来自IDP的身份验证消息。此ACS端点仅支持SAML HTTP-POST绑定,通常配置为 ${kibana-url}/api/security/v1/saml
,其中${kibana-url}
为Kibana的基础访问URL。NameldFormat 名称标识格式类型。请设置为urn:oasis:names:tc:SAML:2.0:nameid-format:persistent。 Binding 选择默认的POST方式。 Assertion Attribute 断言属性。名称可自定义,值需要选择应用子账户。 账户关联方式 选择账户映射。 - 单击提交。
- 在系统提示弹出框中,单击立即授权,为应用授权。说明 应用授权之前,请确保已经同步或创建应用侧账户信息。
- 参考下图,选择对应账户,单击保存,确认后完成授权。
- 从已创建的IDaaS应用中导出IDaaS SAML元配置文件。
- 将导出的文件通过提交工单的形式提交给阿里云Elasticsearch技术支持人员。提交后,技术人员会将SAML元配置文件上传至elasticsearch的config/saml路径下,以备后用。您也可以在自建Elasticsearch环境中进行测试。
步骤二:创建自定义角色并配置elastic SAML
- 登录目标实例的Kibana控制台。
- 创建自定义角色。
- 将角色与SAML进行映射。
PUT /_security/role_mapping/idaas-test { "roles": [ "admin_role" ], "enabled": true, "rules": { "field": { "realm.name": "saml1" } } }
说明 roles参数值需要替换为上一步创建的角色名称。 - 分别在Elasticsearch和Kibana的YML配置文件中,添加SAML信息。重要 YML参数信息需要与步骤一:配置IDaaS SAML应用中配置的SAML信息保持一致。
- elasticsearch.yml配置
#elasticsearch.yml配置 xpack.security.authc.token.enabled: 'true' xpack.security.authc.realms.saml.saml1: order: 0 idp.metadata.path: saml/metadata.xml idp.entity_id: "https://es-cn-n6xxxxxx1d.elasticsearch.aliyuncs.com/" sp.entity_id: "https://es-cn-n6xxxxxx1d.kibana.elasticsearch.aliyuncs.com:5601/" sp.acs: "https://es-cn-n6xxxxxx1d.kibana.elasticsearch.aliyuncs.com:5601/api/security/v1/saml" attributes.principal: "nameid:persistent" attributes.groups: "roles"
参数 说明 xpack.security.authc.token.enabled 是否开启Token服务。需要设置为true,才可配置SAML单点登录,详细信息请参见saml-enable-token。 xpack.security.authc.realms.saml.saml1 定义的身份认证领域,本文示例为saml1。领域的详细信息请参见Realms。 order 领域优先级,数值越低,优先级越高。 idp.metadata.path IDP元数据文件路径。 idp.entity_id IDP使用的身份标识符,和元数据文件中的EntityID相匹配。 sp.entity_id Kibana实例唯一标识符,如果将Kibana添加为IDP的服务提供商,需要设置此值,推荐配置为Kibana的URL。 重要 请确保参数值与业务环境保持一致。如果您配置了反向代理访问Kibana,而不是直接通过URL访问,需要将该参数配置为反向代理的地址和端口。sp.acs 断言消费服务ACS端点,一般为Kibana的URL,用来接收来自IDP的身份验证消息。此ACS端点仅支持SAML HTTP-POST绑定,通常配置为 ${kibana-url}/api/security/v1/saml
,其中${kibana-url}
为Kibana的基础访问URL。sp.logout Kibana接收来自IDP的注销信息的URL,类似sp.acs,需要设置为 ${kibana-url}/logout
,其中${kibana-url}
为Kibana的基础访问URL。attributes.principal 断言信息,具体请参见Attribute mapping。 attributes.groups 断言信息,具体请参见Attribute mapping。 - kibana.yml配置
# kibana配置 xpack.security.authc.providers: saml.saml1: order: 0 realm: "saml1" basic.basic1: order: 1 icon: "logoElasticsearch" hint: "Typically for administrators"
参数 说明 xpack.security.authc.providers 添加SAML提供程序,以设置Kibana使用SAML SSO作为身份验证方法。 xpack.security.authc.providers.saml.<provider-name>.realm 设置SAML领域名称。请将<provider-name>替换为elasticsearch.yml中配置的领域名称。本文示例为saml1。 xpack.security.authc.providers.basic.basic1 Kibana配置SAML后,仅支持符合SAML身份验证的用户登录Kibana。为了便于在Kibana登录页面支持basic身份登录(尤其在测试环节,可能需要使用elastic用户名和密码登录集群,创建角色及角色映射),可指定basic.basic1部分配置。指定后,Kibana登录页面会添加基本身份登录入口,详细信息请参见Authentication in kibana。 说明 如果用户不需要使用basic身份登录Kibana控制台,可在kibana.yml中不设置basic身份登录。
- elasticsearch.yml配置
- 将配置后的yml文件通过提交工单的形式提交给阿里云Elasticsearch技术支持人员。提交后,技术人员会按照您提交的文件内容,在后端更新您集群的yml文件。
步骤三:验证Kibana单点登录
待技术人员配置完成后,验证Kibana单点登录。
- 进入Kibana控制台登录页面,单击Log in with saml/saml1。具体操作,请参见登录Kibana控制台。
- 输入IDaaS关联的账号,单击提交。登录成功后的页面如下图。