本文介绍如何通过配置安全断言标记语言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配置文件提供给技术人员帮您配置。

操作流程

  1. 步骤一:配置IDaaS SAML应用
  2. 步骤二:创建自定义角色并配置elastic SAML
  3. 步骤三:验证Kibana单点登录

步骤一:配置IDaaS SAML应用

  1. 登录IDaaS管理平台,进入EIAM实例,添加SAML应用。
  2. 添加应用(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断言属性。名称可自定义,值需要选择应用子账户
    账户关联方式选择账户映射
  3. 单击提交
  4. 系统提示弹出框中,单击立即授权,为应用授权。
    说明 应用授权之前,请确保已经同步或创建应用侧账户信息。
  5. 参考下图,选择对应账户,单击保存,确认后完成授权。
  6. 从已创建的IDaaS应用中导出IDaaS SAML元配置文件。
  7. 将导出的文件通过提交工单的形式提交给阿里云Elasticsearch技术支持人员。
    提交后,技术人员会将SAML元配置文件上传至elasticsearch的config/saml路径下,以备后用。您也可以在自建Elasticsearch环境中进行测试。

步骤二:创建自定义角色并配置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. 分别在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.pathIDP元数据文件路径。
      idp.entity_idIDP使用的身份标识符,和元数据文件中的EntityID相匹配。
      sp.entity_idKibana实例唯一标识符,如果将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.logoutKibana接收来自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.basic1Kibana配置SAML后,仅支持符合SAML身份验证的用户登录Kibana。为了便于在Kibana登录页面支持basic身份登录(尤其在测试环节,可能需要使用elastic用户名和密码登录集群,创建角色及角色映射),可指定basic.basic1部分配置。指定后,Kibana登录页面会添加基本身份登录入口,详细信息请参见Authentication in kibana
      说明 如果用户不需要使用basic身份登录Kibana控制台,可在kibana.yml中不设置basic身份登录。
  5. 将配置后的yml文件通过提交工单的形式提交给阿里云Elasticsearch技术支持人员。
    提交后,技术人员会按照您提交的文件内容,在后端更新您集群的yml文件。

步骤三:验证Kibana单点登录

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

  1. 进入Kibana控制台登录页面,单击Log in with saml/saml1
    具体操作,请参见登录Kibana控制台SAML登录Kibana控制台
  2. 输入IDaaS关联的账号,单击提交
    登录成功后的页面如下图。登录成功页面