全部产品
Search
文档中心

检索分析服务Elasticsearch版:elasticsearch单点登录认证

更新时间:Mar 22, 2024

阿里云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版本实例为例,其他版本的操作可能存在差异,具体以实际界面为准。

    说明
  • 开通IDaaS服务的EIAM实例。

    说明

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

操作步骤

步骤一:配置IDaaS SAML应用

  1. 登录IDaaS管理平台

  2. 单击目标IDaaS实例ID。

  3. 添加应用。

    1. 在左侧菜单栏,单击应用

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

    3. 单击标准协议页签。

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

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

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

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

    配置示例:

    image.png

    说明

    您可以在配置Kibana访问白名单的页面查看Kibana公网地址和Kibana端口。具体操作,请参见配置Kibana公网或私网访问白名单

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

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

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

  1. 在目标实例中登录Kibana控制台。具体操作,请参见登录Kibana控制台

  2. 创建一个角色。具体操作,请参见通过Elasticsearch X-Pack角色管理实现用户权限管控

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

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

    PUT /_security/role_mapping/idaas-test
    {
      "roles": "<admin_role>" ,
      "enabled": true,
      "rules": {
        "field": { "realm.name": "saml1" }
      }
    }
  4. 制作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单点登录。

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

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

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

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