本文介绍如何通过配置安全断言标记语言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等。详细信息请参见什么是IDaaS
  • 安全断言标记语言SAML:基于XML协议,使用包含断言(Assertion)的安全令牌,在身份提供者IDP和服务提供者SP之间传递身份信息,实现基于网络跨域的单点登录。SAML协议是成熟的认证协议,在公有云和私有云中有非常广泛的运用。详细信息请参见SAML
  • 单点登录SSO(Single Sign On):是指在多个应用系统中,用户只需要登录一次,就可以访问所有相互信任的应用系统。详细信息请参见单点登录和身份联邦
目前,SAML单点登录仅支持后端手动配置,您需要先参考本文,在测试环境配置并测试成功后,再提交工单将配置提供给技术人员帮您配置。
说明 本文包含配置IDaaS SAML应用(用户侧)创建自定义角色并配置elastic SAML(后端)两部分。其中配置IDaaS SAML应用(用户侧)需要您手动操作,创建自定义角色并配置elastic SAML(后端)需要阿里云Elasticsearch技术人员在后端为您配置。本文给出后端操作旨在帮助您测试配置并了解配置原理。

前提条件

  • 创建阿里云Elasticsearch实例7.10版本,并开启HTTPS访问协议。

    创建实例的具体操作,请参见创建阿里云Elasticsearch实例。本文以7.10版本实例为例,其他版本的操作配置可能存在差异,具体以实际界面为准。

    开启HTTPS的具体操作,请参见使用HTTPS协议
    注意 只有包含协调节点的实例才支持开启HTTPS,请确保实例中已包含协调节点。
  • 开通IDaaS服务的EIAM实例。
    具体操作,请参见开通和试用流程
    说明 elastic仅支持SAML身份验证的HTTP-Redirect binding方式,不支持HTTP-POST binding及其他方式,因此只需保证PC端可以访问IDP及SP服务即可。

配置IDaaS SAML应用(用户侧)

  1. 登录IDaaS管理平台,进入EIAM实例,添加SAML应用。
    具体操作请参见添加应用添加SAML应用
  2. 添加应用(SAML)面板,单击目标SigningKey右侧的选择,配置IDP认证ID及SP认证信息。
    说明 如果没有SigningKey,需要先添加或导入一个SigningKey,具体操作请参见Gitlab对接(SAML)
    配置SAML
    您需要配置以下参数,其他参数保持默认。
    参数 说明
    应用名称 自定义SAML应用的名称。
    IDP IdentityId 在IDaaS中设置的认证参数,需要将此参数配置到SP中,可设置为IDaaS。
    SP Entity ID 服务提供者SP的访问URL。本文的服务提供者为Kibana,因此需要配置为Kibana服务的基础访问URL,并使用HTTPS协议。
    SP ACS URL(SSO Location)
    NameldFormat 名称标识格式类型。请设置为urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
    Binding 选择默认的POST方式。
    Assertion Attribute 断言属性。名称可自定义,值需要选择应用子账户
    账户关联方式 选择账户映射
  3. 单击提交
  4. 系统提示弹出框中,单击立即授权,为应用授权。
    注意 应用授权之前,请确保已经同步或创建应用侧账户信息,详细信息请参见IDaaS账户
  5. 参考下图,选择对应账户,单击保存,确认后完成授权。
    为应用授权
  6. 从已创建的IDaaS应用中导出IDaaS SAML元配置文件。
    具体操作请参见Gitlab对接(SAML)导出IDaaS SAML元配置文件
  7. 将导出的文件通过提交工单的形式提交给阿里云Elasticsearch技术支持人员。
    提交后,技术人员会按照创建自定义角色并配置elastic SAML(后端)中的操作为您配置elastic SAML。您也可以参考这部分内容,在您的自建Elasticsearch环境中进行测试。
  8. 待技术人员配置完成后,验证Kibana单点登录。
    1. 参见登录Kibana控制台,进入Kibana控制台登录页面,单击Log in with saml/saml1
      SAML登录Kibana控制台
    2. 输入IDaaS关联的账号,单击提交
      登录成功后的页面如下图。登录成功页面

创建自定义角色并配置elastic SAML(后端)

  1. 登录目标实例的Kibana控制台。
  2. 创建自定义角色。
    创建自定义角色
  3. 将角色与SAML进行映射。
    PUT /_security/role_mapping/idaas-test
    {
      "roles": [ "admin_role" ],
      "enabled": true,
      "rules": {
        "field": { "realm.name": "saml1" }
      }
    }
    说明 roles参数值需要替换为上一步创建的角色名称。
  4. 配置IDaaS SAML应用(用户侧)中导出的IDaaS SAML元配置文件上传至elasticsearch的config/saml路径下。
  5. 分别在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身份登录。