阿里云Elasticsearch(简称ES)支持单点登录到Kibana,开启SAML身份验证后,允许您使用符合SAML 2.0 的身份提供者IDP访问阿里云ES和Kibana。本文介绍通过配置安全断言标记语言SAML的身份提供者IDP和服务提供者ES及Kibana,实现单点登录Kibana控制台。
背景信息
在安全断言标记语言SAML中,ES和Kibana作为服务提供者SP(Service Provider),支持SAML 2.0 协议的Web浏览器SSO和SAML 2.0 Single Logout配置 ,使您能够使用任何符合SAML 2.0 的身份提供者IDP( IDentity Provider)访问阿里云ES和Kibana,例如,阿里云应用身份服务IDaaS、联合身份验证服务ADFS(Active Directory Federation Services)等。本文以IDaaS为例进行介绍。
单点登录SSO(Single Sign On):
指在多个应用系统中,用户只需要登录一次,就可以访问所有相互信任的应用系统。详细信息请参见单点登录和身份联邦。
安全断言标记语言SAML(Security Assertion Markup Language):
基于XML协议,使用包含断言(Assertion)的安全令牌,在身份提供者IDP和服务提供者SP之间传递身份信息,实现基于网络跨域的单点登录。SAML协议是成熟的认证协议,在公有云和私有云中有非常广泛的运用。详细信息请参见SAML。
阿里云应用身份服务IDaaS(Alibaba Cloud Identity as a Service):
阿里云为企业用户提供的一套集中式身份、权限、应用管理服务,IDaaS支持多种产品,例如EIAM、CIAM等。详细信息请参见什么是IDaaS。
前提条件
已创建阿里云ES实例,并开启HTTPS访问协议。本文以7.10版本实例为例,其他版本的操作可能存在差异,具体以实际界面为准。
说明创建实例,请参见创建阿里云Elasticsearch实例。
开启HTTPS,请参见使用HTTPS协议。
开通IDaaS服务的EIAM实例。具体操作,请参见开通和试用流程。
说明Elastic仅支持SAML身份验证的HTTP-Redirect binding方式,不支持HTTP-POST binding及其他方式,因此只需保证PC端可以访问IDP及SP服务即可。
Kibana公网端口为443
操作步骤
开启SAML身份验证需要重启集群生效,为了减少变更影响,请在业务低峰期操作。
- 登录阿里云Elasticsearch控制台。
- 在左侧导航栏,单击Elasticsearch实例。
- 进入目标实例。
- 在顶部菜单栏处,选择资源组和地域。
- 在Elasticsearch实例中单击目标实例ID。
在目标实例的左侧导航栏,选择
。在集群访问设置区域,打开SAML身份验证开关。
说明如果当前实例暂未开启HTTPS访问协议,对话框中会提示请先在当前页面集群网络配置中开启HTTPS协议。
在启用SAML身份验证控制面板,配置SAML应用。
在配置SAML应用向导页面,选择访问方式,本文选择公网访问Kibana。
下载IdP元数据。具体操作,请参见配置IDaaS SAML应用。
说明单点登录地址ACS URL和应用唯一标识SP Entity ID可在配置SAML应用向导页面复制。
单击或拖拽上传IdP元数据。
单击下一步。
关联ES自定义角色。
在关联ES自定义角色向导页面,输入ES访问密码。
角色名称:默认es_saml1_default,不支持修改。
操作权限:默认为创建的角色es_saml1_default开启所有权限。如果您需要配置更细粒度的权限,可创建角色后在Kibana中修改角色的权限。具体操作,请参见通过Elasticsearch X-Pack角色管理实现用户权限管控。
访问密码:输入ES访问密码,用于校验用户是否具有创建角色的权限。
单击创建并关联角色。
创建角色,并将角色与SAML进行映射。
单击下一步。
单击完成。
页面上方提示开启Saml身份验证成功,表明已成功配置开启Saml身份验证,实例重启中。
实例重启完成后,验证Kibana单点登录。
在左侧导航栏,选择
。在Kibana区域,单击公网入口。
选择Log in with Elasticsearch。
输入用户名和密码,单击登录。
您可以看到已成功登录Kibana页面。
说明关于登录Kibana的更多信息,请参见登录Kibana控制台。
您可以在实例的安全配置页面,查看并修改SAML身份认证的相关配置,如果SAML配置正确但仍存在无法登录的情况,请检查是否正确配置Kibana访问白名单或安全组。具体操作,请参见配置Kibana公网或私网访问白名单。
配置IDaaS SAML应用
登录IDaaS管理平台。
单击目标IDaaS实例ID。
添加应用。
在左侧菜单栏,单击应用。
在应用页面,单击添加应用。
单击标准协议页签。
在SAML 2.0区域,单击添加应用。
输入应用名称,单击立即添加。
在登录访问的单点登录页签下,完成应用的单点登录配置。
配置如下参数,其他参数保持默认。更多参数信息,请参见IDaaS 侧配置字段说明。
分类
参数
说明
基本配置
单点登录地址
ACS URL
单点登录地址用来接收来自IDP的身份验证信息。您可以在ES控制台的配置SAML应用向导页面,复制单点登录地址ACS URL。
应用唯一标识
SP Entity ID
应用唯一标识是服务提供者SP的访问URL,本文的服务提供者为Kibana。您可以在ES控制台的配置SAML应用向导页面,复制应用唯一标识SP Entity ID。
授权范围
选择授权范围。
如果选择手动授权,需要在登录访问的应用授权页签中进行权限分配。
高级配置
NameID 格式
NameIDFormat
选择2.0 persistent。
配置示例:
在应用配置信息区域,单击IdP元数据后的下载。
单击保存,保存添加的应用。
其他操作
您可以在实例的安全配置页面,在集群访问设置区域,查看、修改SAML身份认证配置或关闭SAML身份验证。
项目 | 操作 |
查看SAML身份认证配置 | 单击SAML身份验证后的修改配置,查看SAML身份验证配置信息。 |
修改SAML身份认证配置 | 单击SAML身份验证后的修改配置:
|
关闭SAML身份验证 | 关闭SAML身份验证开关,在弹出的对话框中单击确定,集群重启后即可生效。 说明 确认关闭SAML身份验证后,当前SAML身份认证相关的配置将被清除。 |
Kibana公网端口为5601
步骤一:配置IDaaS SAML应用
登录IDaaS管理平台。
单击目标IDaaS实例ID。
添加应用。
在左侧菜单栏,单击应用。
在应用页面,单击添加应用。
单击标准协议页签。
在SAML 2.0区域,单击添加应用。
输入应用名称,单击立即添加。
在登录访问的单点登录页签下,完成应用的单点登录配置。
配置如下参数,选择授权范围,其他参数保持默认。更多参数信息,请参见IDaaS 侧配置字段说明。
分类
参数
说明
基本配置
单点登录地址
ACS URL
用来接收来自IDP的身份验证信息,此ACS端点仅支持SAML HTTP-POST绑定,通常配置为:
${kibana-url}:5601/api/security/v1/saml
。应用唯一标识
SP Entity ID
服务提供者SP的访问URL。本文的服务提供者为Kibana,应用唯一标识需要配置为
${kibana-url}:5601
。授权范围
选择授权范围。如果选择手动授权,需要在登录访问的应用授权页签中进行权限分配。
高级配置
NameID 格式
NameIDFormat
选择2.0 persistent。
说明${kibana-url}
为Kibana公网地址。您可以在配置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配置文件内容
#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绑定,通常配置为
${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页面。