阿里云Elasticsearch支持单点登录到Kibana。本文介绍如何通过配置安全断言标记语言SAML的身份提供者IPD和服务提供者Elasticsearch及Kibana,实现单点登录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、联合身份验证服务ADFS(Active Directory Federation Services)等。本文以IDaaS为例进行介绍。
单点登录SSO(Single Sign On):
指在多个应用系统中,用户只需要登录一次,就可以访问所有相互信任的应用系统。
安全断言标记语言SAML(Security Assertion Markup Language):
基于XML协议,使用包含断言(Assertion)的安全令牌,在身份提供者IDP和服务提供者SP之间传递身份信息,实现基于网络跨域的单点登录。SAML协议是成熟的认证协议,在公有云和私有云中有非常广泛的运用。
阿里云应用身份服务IDaaS(Alibaba Cloud Identity as a Service):
阿里云为企业用户提供的一套集中式身份、权限、应用管理服务,IDaaS支持多种产品,例如EIAM、CIAM等。
前提条件
创建阿里云Elasticsearch实例,并开启HTTPS访问协议。本文以7.10版本实例为例,其他版本的操作可能存在差异,具体以实际界面为准。
说明创建实例,请参见创建阿里云Elasticsearch实例。
开启HTTPS,请参见使用HTTPS协议。
开通IDaaS服务的EIAM实例。
说明Elastic仅支持SAML身份验证的HTTP-Redirect binding方式,不支持HTTP-POST binding及其他方式,因此只需保证PC端可以访问IDP及SP服务即可。
操作步骤
步骤一:配置IDaaS SAML应用
登录IDaaS管理平台。
单击目标IDaaS实例ID。
添加应用。
在左侧菜单栏,单击应用。
在应用页面,单击添加应用。
单击标准协议页签。
在SAML 2.0区域,单击添加应用。
输入应用名称,单击立即添加。
在登录访问的单点登录页签下,完成应用的单点登录配置。
配置如下参数,选择授权范围,其他参数保持默认。更多参数信息,请参见IDaaS 侧配置字段说明。
分类
参数
说明
基本配置
单点登录地址
ACS URL
用来接收来自IDP的身份验证信息,此ACS端点仅支持SAML HTTP-POST绑定,通常配置为:
云原生管控下创建的ES实例:
${kibana-url}:443/api/security/saml /callback
。非云原生管控下创建的ES实例:
${kibana-url}:5601/api/security/v1/saml
说明${kibana-url}
为Kibana公网地址。
应用唯一标识
SP Entity ID
服务提供者SP的访问URL。本文的服务提供者为Kibana,应用唯一标识需要配置为
${kibana-url}:443
或${kibana-url}:5601
。说明${kibana-url}
为Kibana公网地址。授权范围
选择授权范围。如果选择手动授权,需要在登录访问的应用授权页签中进行权限分配。
高级配置
NameID 格式
NameIDFormat
选择2.0 persistent。
配置示例:
说明您可以在配置Kibana访问白名单的页面查看Kibana公网地址和Kibana端口。具体操作,请参见配置Kibana公网或私网访问白名单。
在应用配置信息区域,单击IdP元数据后的下载。
下载的文件即为IDaaS SAML元配置文件,以备后用。
步骤二:创建自定义角色并配置elastic SAML
在目标实例中登录Kibana控制台。具体操作,请参见登录Kibana控制台。
创建一个角色。具体操作,请参见通过Elasticsearch X-Pack角色管理实现用户权限管控。
将角色与SAML进行映射。
<admin_role>
需要替换为上一步创建的角色名称。PUT /_security/role_mapping/idaas-test { "roles": "<admin_role>" , "enabled": true, "rules": { "field": { "realm.name": "saml1" } } }
制作Elasticsearch和Kibana的YML配置文件,在配置文件中添加SAML信息。
说明YML参数信息需要与步骤一:配置IDaaS SAML应用中配置的SAML信息保持一致。
elasticsearch.yml配置文件内容
云原生管控下创建的ES实例(Kibana端口为443)
#elasticsearch.yml配置 xpack.security.authc.token.enabled: 'true' xpack.security.authc.realms.saml.saml1: order: 2 idp.metadata.path: saml/metadata.xml idp.entity_id: "https://l2cm8ccn.aliyunidaas.com/api/v2/app_mueycrtjtumouafhydzuq3zx3a/saml2/meta" sp.entity_id: "https://es-cn-pe33****-kibana.cn-zhangjiakou.elasticsearch.aliyuncs.com:443" sp.acs: "https://es-cn-pe33****-kibana.cn-zhangjiakou.elasticsearch.aliyuncs.com:443/api/security/saml/callback" attributes.principal: "nameid:persistent" attributes.groups: "roles"
非云原生管控下创建的ES实例(Kibana端口为5601)
#elasticsearch.yml配置 xpack.security.authc.token.enabled: 'true' xpack.security.authc.realms.saml.saml1: order: 2 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
领域优先级,数值越低,优先级越高。
说明8.x版本要求order数值唯一性,建议使用2。
idp.metadata.path
IDP元数据文件路径。
idp.entity_id
IDP使用的身份标识符,和元数据文件中的EntityID相匹配。
sp.entity_id
Kibana实例唯一标识符,与SAML应用的应用唯一标识SP Entity ID相同。如果将Kibana添加为IDP的服务提供商,需要设置此值,推荐配置为Kibana的URL。
重要请确保参数值与业务环境保持一致。如果您配置了反向代理访问Kibana,而不是直接通过URL访问,需要将该参数配置为反向代理的地址和端口。
sp.acs
断言消费服务ACS端点,与SAML应用的单点登录地址ACS URL相同。用来接收来自IDP的身份验证信息,此ACS端点仅支持SAML HTTP-POST绑定,通常配置为:
云原生管控下创建的ES实例:
${kibana-url}:443/api/security/saml/callback
。非云原生管控下创建的ES实例:
${kibana-url}:5601/api/security/v1/saml
说明${kibana-url}
为Kibana公网地址。
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技术支持人员。
IDaaS SAML元配置文件。技术人员会将SAML元配置文件上传至elasticsearch的config/saml路径下。
elasticsearch.yml配置文件。技术人员会按照您提交的文件内容,在后端更新您集群的yml文件。
kibana.yml配置文件。技术人员会按照您提交的文件内容,在后端更新您集群的yml文件。
步骤四:验证Kibana单点登录
待技术人员配置完成后,验证Kibana单点登录。
进入Kibana控制台登录页面,单击Log in with saml/saml1。
具体操作,请参见登录Kibana控制台。
输入IDaaS关联的账号,单击提交。
您可以看到已成功登录Kibana页面。