开启ES单点登录认证

阿里云Elasticsearch(简称ES)支持单点登录到Kibana,开启SAML身份验证后,允许您使用符合SAML 2.0 的身份提供者IDP访问阿里云ESKibana。本文以7.10版本实例为例,介绍通过配置安全断言标记语言SAML的身份提供者IDP和服务提供者ESKibana,实现单点登录Kibana控制台。

背景信息

在安全断言标记语言SAML中,ESKibana作为服务提供者SP(Service Provider),支持SAML 2.0 协议的Web浏览器SSOSAML 2.0 Single Logout配置 ,使您能够使用任何符合SAML 2.0 的身份提供者IDP( IDentity Provider)访问阿里云ESKibana,例如,阿里云应用身份服务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版本实例为例,其他版本的操作可能存在差异,具体以实际界面为准。

    说明
  • 开通IDaaS服务的EIAM实例。具体操作,请参见开通和试用流程

    说明

    Elastic仅支持SAML身份验证的HTTP-Redirect binding方式,不支持HTTP-POST binding及其他方式,因此只需保证PC端可以访问IDPSP服务即可。

Kibana公网端口为443

操作步骤

说明

开启SAML身份验证需要重启集群生效,为了减少变更影响,请在业务低峰期操作。

  1. 登录阿里云Elasticsearch控制台

  2. 在左侧导航栏,单击Elasticsearch实例

  3. 进入目标实例。

    1. 在顶部菜单栏处,选择资源组和地域。

    2. Elasticsearch实例中单击目标实例ID。

  4. 在目标实例的左侧导航栏,选择 配置与管理 > 安全配置

  5. 集群访问设置区域,打开SAML身份验证开关。

    说明

    如果当前实例暂未开启HTTPS访问协议,对话框中会提示当前实例已开启SAML身份验证,不允许关闭HTTPS协议

  6. 启用SAML身份验证控制面板,配置SAML应用。

    1. 配置SAML应用页面,选择访问方式,本文选择公网访问Kibana

    2. 下载IdP元数据。具体操作,请参见配置IDaaS SAML应用

      说明

      单点登录地址ACS URL和应用唯一标识SP Entity ID可在配置SAML应用向导页面复制。

    3. 单击或拖拽上传IdP元数据

    4. 单击下一步

  7. 关联ES自定义角色。

    1. 关联ES自定义角色向导页面,输入ES访问密码。

      • 角色名称:默认es_saml1_default,不支持修改。

      • 角色权限:默认为创建的角色es_saml1_default开启所有权限。如果您需要配置更细粒度的权限,可创建角色后在Kibana中修改角色的权限。具体操作,请参见通过Elasticsearch X-Pack角色管理实现用户权限管控

      • ES访问密码:输入ES访问密码,用于校验用户是否具有创建角色的权限。

    2. 单击创建并关联角色

      创建角色,并将角色与SAML进行映射。

    3. 单击下一步

  8. 配置yml参数。

    分类

    项目

    描述

    SAML信息

    身份认证领域

    需要和前面的映射保持一致,默认仅支持配置saml1,不支持修改。

    order

    领域优先级,数值越低,优先级越高。默认为2,不允许用户修改。

    idp.entity_id

    IDP使用的身份标识符。

    sp.entity_id

    Kibana实例唯一标识符,与SAML应用的应用唯一标识SP Entity ID相同。如果将Kibana添加为IDP的服务提供商,需要设置此值。

    sp.acs

    断言消费服务ACS端点,用来接收来自IDP的身份验证信息。与SAML应用的单点登录地址ACS URL相同。

    attributes.principal

    断言信息,例如,nameid:persistent。具体请参见Attribute mapping

    attributes.groups

    断言信息,例如,roles。具体请参见Attribute mapping

    高级设置

    Kibana Basic登录

    默认正常展示Kibana的基础登录入口,您可以选择不展示该入口。

    Kibana SAML登录描述

    填写SAML登录Kibana的描述。

    说明
    • 配置完成后,系统自动生成后端可识别的标准yml格式,并修改当前实例的yml配置。

    • 其他参数如idp.metadata.path为后端管控需要配置的xml路径,自动生成,不支持用户编辑和修改。

  9. 单击完成

    页面上方提示开启Saml身份验证成功,表明已成功配置开启Saml身份验证,实例重启中。

  10. 实例重启完成后,验证Kibana单点登录。

    1. 在左侧导航栏,选择 配置与管理 > 公网入口

    2. Kibana区域,单击公网入口

    3. 输入用户名密码,单击登录

      您可以看到已成功登录Kibana页面。

    说明
    • 关于登录Kibana的更多信息,请参见登录Kibana控制台

    • 您可以在实例的安全配置页面,查看并修改SAML身份认证的相关配置,如果SAML配置正确但仍存在无法登录的情况,请检查是否正确配置Kibana访问白名单或安全组。具体操作,请参见通过Kibana连接集群

配置IDaaS SAML应用

  1. 登录IDaaS管理平台

  2. 单击目标IDaaS实例ID。

  3. 添加应用。

    1. 在左侧菜单栏,单击应用管理 > 应用列表

    2. 应用列表页面,单击添加应用

    3. 单击标准协议页签。

    4. SAML 2.0区域,单击添加应用

    5. 输入应用名称,单击立即添加

  4. 登录访问单点登录页签下,完成应用的单点登录配置

    配置如下参数,其他参数保持默认。更多参数信息,请参见IDaaS 侧配置字段说明

    参数

    说明

    单点登录地址 ACS URl

    单点登录地址用来接收来自IDP的身份验证信息。您可以在ES控制台的配置SAML应用向导页面,复制单点登录地址ACS URL。

    应用唯一标识 SP Entity ID

    应用唯一标识是服务提供者SP的访问URL,本文的服务提供者为Kibana。您可以在ES控制台的配置SAML应用向导页面,复制应用唯一标识SP Entity ID。

    授权范围

    选择授权范围。

    如果选择手动授权,需要在应用授权页签中进行权限分配。

    NameID 格式

    选择2.0 persistent

    配置示例:

    image.png

  5. 应用配置信息区域,单击IdP元数据后的下载

  6. 单击保存,保存添加的应用。

其他操作

您可以在实例的安全配置页面,在集群访问设置区域,查看、修改SAML身份认证配置或关闭SAML身份验证。

项目

操作

查看SAML身份认证配置

单击SAML身份验证后的修改配置,查看SAML身份验证配置信息。

修改SAML身份认证配置

单击SAML身份验证后的修改配置

  • ES配置参数区域右上角单击编辑,重新上传IdP元数据或编辑yml参数。修改该配置会重启集群。

  • ES自定义角色关联:不支持修改关联的角色。允许您在Kibana中调整es_saml1_default角色的权限范围。

  • Kibana配置参数区域右上角单击编辑,修改Kibana登录相关配置,修改该配置会重启Kibana节点。

关闭SAML身份验证

关闭SAML身份验证开关,在弹出的对话框中单击 确定,集群重启后即可生效。

说明

确认关闭SAML身份验证后,当前SAML身份认证相关的配置将被清除。

Kibana公网端口为5601

步骤一:配置IDaaS SAML应用

  1. 登录IDaaS管理平台

  2. 单击目标IDaaS实例ID。

  3. 添加应用。

    1. 在左侧菜单栏,单击应用管理 > 应用列表

    2. 应用列表页面,单击添加应用

    3. 单击标准协议页签。

    4. SAML 2.0区域,单击添加应用

    5. 输入应用名称,单击立即添加

  4. 登录访问单点登录页签下,完成应用的单点登录配置

  5. 配置如下参数,选择授权范围,其他参数保持默认。更多参数信息,请参见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 格式

    选择2.0 persistent

    说明
    • ${kibana-url}Kibana公网地址。

    • 您可以在配置Kibana访问白名单的页面查看Kibana公网地址和Kibana端口。具体操作,请参见通过Kibana连接集群

    配置示例:

    image

  6. 应用配置信息区域,单击IdP元数据后的下载

    下载的文件即为IDaaS SAML元配置文件,以备后用。

  7. 单击保存,保存添加的应用。

步骤二:创建自定义角色并配置elastic SAML

  1. 在目标实例中登录Kibana控制台

  2. 创建一个角色

  3. 将角色与SAML进行映射。

    PUT /_security/role_mapping/idaas-test
    {
      "roles": "<admin_role>" ,
      "enabled": true,
      "rules": {
        "field": { "realm.name": "saml1" }
      }
    }
    • idaas-test需替换为步骤一IDaaS服务实际创建的账号名称。

    • <admin_role>需替换为上一步创建的角色名称。

  4. 制作ElasticsearchKibanaYML配置文件,在配置文件中添加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的服务提供商,需要设置此值,推荐配置为KibanaURL。

      重要

      请确保参数值与业务环境保持一致。如果您配置了反向代理访问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配置文件内容

      重要

      此配置仅适用于7.10版本实例。不同版本实例的Kibana配置可能存在较大差异,请根据实际情况进行调整,详情请参见Configuring Kibana

      # 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元配置文件上传至elasticsearchconfig/saml路径下。

  • elasticsearch.yml配置文件。技术人员会按照您提交的文件内容,在后端更新您集群的yml文件。

  • kibana.yml配置文件。技术人员会按照您提交的文件内容,在后端更新您集群的yml文件。

步骤四:验证Kibana单点登录

待技术人员配置完成后,验证Kibana单点登录。

  1. 进入Kibana控制台登录页面,单击Log in with saml/saml1

    具体操作,请参见登录Kibana控制台

  2. 输入IDaaS关联的账号,单击提交

    您可以看到已成功登录Kibana页面。