zoukankan      html  css  js  c++  java
  • ElasticSearch安全-账号密码验证

    JAVA 8

    elasticsearch-7.14.0 on Windows 10

    Spring Boot 2.5.3

    ---

    目录

    1、开启ES的账号密码访问

    2、修改Kibana的ES账号密码

    3、Spring Boot项目启动访问ES

    4、更多操作

    参考文档

    相关ES官方文档

    1、Secure the Elastic Stack

    password protect access、Transport Layer Security (TLS)、role-based access control、IP filtering、auditing……

    2、Security APIs

    角色管理、用户管理,其它

    1、开启ES的账号密码访问

    在使用的7.14版本ES中,无需密码即可访问。

    根据 参考文档1 的介绍,开启了ES的账号密码登录功能。来自博客园

    步骤如下:

    1)修改配置文件configelasticsearch.yml

    添加:

    # ---------------------------------- Security -----------------------------------
    xpack.security.enabled: true

    2)执行binelasticsearch.bat

    启动ES后,执行下面的命令访问ES:访问失败,权限不足

    D:WSesin>curl localhost:9200
    {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials 
    for REST request [/]","header":{"WWW-Authenticate":"Basic realm="security" charset="UTF-8""}}],
    "type":"security_exception","reason":"missing authentication credentials for REST request [/]",
    "header":{"WWW-Authenticate":"Basic realm="security" charset="UTF-8""}},"status":401}

    3)执行binelasticsearch-setup-passwords.bat interactive

    interactive adj.  互相作用的,相互影响的; [计]交互式的; 互动的;

    交互式地设置 多个账号的密码。

    这些账号(6个)包括:elastic、apm_system、kibana_system、logstash_system、beats_system、remote_monitoring_user

    设置多个用户密码
    D:WSesin>elasticsearch-setup-passwords.bat interactive
    "warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME"
    Future versions of Elasticsearch will require Java 11; your Java version from [D:Program FilesJavajdk1.8.0_202jre] does not meet this requirement. Consider switching to a distribution of Elasticsearch with a bundled JDK. If you are already using a distribution with a bundled JDK, ensure the JAVA_HOME environment variable is not set.
    Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
    You will be prompted to enter passwords as the process progresses.
    Please confirm that you would like to continue [y/N]y
    
    
    Enter password for [elastic]:
    Reenter password for [elastic]:
    Enter password for [apm_system]:
    Reenter password for [apm_system]:
    Enter password for [kibana_system]:
    Reenter password for [kibana_system]:
    Enter password for [logstash_system]:
    Reenter password for [logstash_system]:
    Enter password for [beats_system]:
    Reenter password for [beats_system]:
    Enter password for [remote_monitoring_user]:
    Reenter password for [remote_monitoring_user]:
    Changed password for user [apm_system]
    Changed password for user [kibana_system]
    Changed password for user [kibana]
    Changed password for user [logstash_system]
    Changed password for user [beats_system]
    Changed password for user [remote_monitoring_user]
    Changed password for user [elastic]
    
    D:WSesin>

    注,为了简便,将它们都设置为了 123456

    设置账号密码后,验证使用账号密码是否能访问ES:两种格式,都成功。

    账号密码访问ES
    # 第一种格式:命令中没有 密码
    D:WSesin>curl localhost:9200 -u elastic
    Enter host password for user 'elastic':
    {
      "name" : "DESKTOP-BDNTQQ3",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "mACMicetS3-YnNTGbiDLXA",
      "version" : {
        "number" : "7.14.0",
        "build_flavor" : "default",
        "build_type" : "zip",
        "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
        "build_date" : "2021-07-29T20:49:32.864135063Z",
        "build_snapshot" : false,
        "lucene_version" : "8.9.0",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    
    # 第二种格式:命令中有密码
    D:WSesin>curl localhost:9200 -u elastic:123456

    六个账号都能访问成功。来自博客园

    2、修改Kibana的ES账号密码

    在Kibana的配置文件kibana.yml中,默认是不使用账号密码访问ES的。

    默认情况下启动Kibana,出现下面的错误信息:

    log   [10:24:50.678] [error][savedobjects-service] Unable to retrieve version information 
    from Elasticsearch nodes. security_exception: [security_exception] Reason: missing authentication 
    credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]

    此时访问Kibana:Kibana server is not ready yet

    修改Kibana的配置中的ES账号密码信息:

    elasticsearch.username: "kibana_system"
    elasticsearch.password: "123456"

    再次启动Kibana:启动成功。

    访问Kibana:弹出登录对话框。

    使用ES的 kibana_system 账号登录,不过,登录成功了,但提示没有权限

    怎么添加这个权限呢?看了一些文档,没有找到想要的答案……

    ……若干分钟后……

    上面使用的账号 kibana_system来访问Kibana,提示权限不足。

    更改为使用ES账号 elastic 来访问Kibana,访问成功

    登录后,还可以修改自己的密码:

    打开主菜单的Management->Stack Management,可以看到更多管理信息。来自博客园

    在其中的 Security 中,可以看到 Users、Roles的信息。

    从上面的Users表可以看到,账号elastic的角色是 superuser,而之前没有访问权限的 Kibana_system 的角色是 kibana_system,这才导致了访问权限不足,无法进入系统。

    新增用户 也可以在这个页面,当然,也可以使用RESTful API来对用户、角色进行管理。

    3、Spring Boot项目启动访问ES

    未配置账号密码启动:启动失败

    配置文件中添加下面的配置:

    # 账号、密码
    spring.elasticsearch.rest.username=elastic
    spring.elasticsearch.rest.password=123456

    再次启动:启动成功。

    访问应用的接口:访问成功。

    4、更多操作

    修改账号密码

    Kibana中操作:
    
    获取所有用户
    GET /_security/user
    
    获取单个用户elastic
    GET /_security/user/elastic
    
    修改用户密码(修改自己的密码后,需要重新登录)
    POST /_security/user/elastic/_password
    {
      "password": "123456"
    }
    

    重置账号密码

    忘记账号elastic这个超级账号的密码了,此时,需要重置。

    按照 参考文档1 的步骤执行即可。

    步骤如下:

    1、停止ES

    2、修改ES的配置文件elasticsearch.yml

    取消:xpack.security.enabled: true

    3、重启ES

    检查ES的索引:有一个名为 .security-7 的

    4、删除这个索引 .security-7

    curl -XDELETE localhost:9200/.security-7
    {"acknowledged":true}

    删除成功。

    此时,ES就回到了没有账号密码阶段了,又可以按照第一章的建立账号密码了。来自博客园

    添加账号

    官文:

    Create or update users API

    获取角色:

    GET /_security/role

    获取账号:

    GET /_security/user

    添加一个 角色为 superuser 的账号:lib

    # Kibana
    POST /_security/user/lib
    {
      "password" : "123456",
      "roles" : [ "superuser"  ],
      "full_name" : "library",
      "email" : "lib@example.com",
      "metadata" : {
        "startfrom" : 20210927
      }
    }
    响应:
    {
      "created" : true
    }
    
    # 查看
    GET /_security/user/lib
    响应:
    {
      "lib" : {
        "username" : "lib",
        "roles" : [
          "superuser"
        ],
        "full_name" : "library",
        "email" : "lib@example.com",
        "metadata" : {
          "startfrom" : 20210927
        },
        "enabled" : true
      }
    }
    

    使用S.B应用验证,成功。

    删除账号

    使用 elastic这个 superuser 账号去 删除上面的lib:来自博客园

    DELETE /_security/user/lib
    响应:
    {
      "found" : true
    }
    
    
    GET /_security/user/lib
    响应:
    { }
    
    GET /_security/user
    也没找到 lib 账号。

    》》》全文完《《《

    ES的账号密码验证搞完,不过,看了官文,ES还有更多安全措施可以做,后面再深入。来自博客园

    对了SMAL是什么?回头了解下,感觉毕OAuth2 还高级啊(认证与授权协议对比:OAuth2、OpenID、SMAL

    参考文档

    1、如何给ElasticSearch设置用户名和密码

    作者:Vino

    2、

  • 相关阅读:
    控件列[Coolite]上传文件
    阿里巴巴淘宝马云的SNS之梦有了新目标 收购“微博”
    十进制数真值配套自测连载(一)
    谷歌用户Siri当心!谷歌正从苹果业务中分走一杯羹
    服务协议Rest风格的web服务开发入门篇1
    注意测试数据hdu 1010 (DFS+剪枝)
    团队软件成为技术领导者研发团队管理经验分享
    字段数据用一句sql语句更新两个表并可更新对应的字段的值
    日期条件SQL 截取日期作为条件
    取消内存Myeclipse 9.0优化方法汇总
  • 原文地址:https://www.cnblogs.com/luo630/p/15341532.html
Copyright © 2011-2022 走看看