zoukankan      html  css  js  c++  java
  • 由于CVE202010770漏洞,k8s集群升级keycloak 8.0.0>15.0.0

    • 背景  

      前段时间项目组用到的8.0.0版本的keycloak被安全部门同事扫出来一个中危漏洞:

    A flaw was found in Keycloak, where it is possible to force the server to call out an unverified URL using the OIDC parameter request_uri. This flaw allows an attacker to use this parameter to execute a Server-side request forgery (SSRF) attack.

    所以这两天在琢磨怎么升级keycloak。

    (正确操作在思路三)

    • 思路一:新建新版本keycloak然后从mysql导数据

    最开始的思路是:我们集群用了外置mysql,并且启动keycloak后没有从来改过里面的配置文件;且容器没有挂载任何问题到configmap或nfs,也就是说,重启后容器会恢复初始状态,但是配置却不影响,因此我判断:所有的配置都在外置的mysql。

    这就比较好办了。

     直接新建一个库,把数据导入。再用新的版本keycloak配置到这个库启动。

    果然,起不来了。。

    再查数据库,发现124个表。。

    当时折腾了挺久,以为配置都在数据库,只要把数据库导进去就行。事实证明数据也不是万能的。

    • 思路二:新建新版本keycloak然后从老keycloak页面导出数据文件,再从新版本页面导入。(导入有些坑。。)

    先将之前做的测试keycloak数据和容器全部清空。

    观察到keycloak页面可以导入导出,三下五除二就把新版本keycloak搭起来了,很快啊,登录新keycloak,选择旧版本keycloak导出来的文件:realm-export.json

    选择导入

    果然有问题。由于上面导出的文件没有组,是手动建的组,所以之前组的权限全部没有了,导致实际使用中出现问题。

    官方表示,控制台导出,会将一些敏感信息用****代替,所以导入后必然有问题。

    参考链接:https://www.keycloak.org/docs/latest/server_admin/#assembly-exporting-importing_server_administration_guide

    思路三: 

     最终还是依赖导出功能解决升级问题:(部署方式为腾讯云的k8s容器服务)

    =====================================================20220120

    •  《从旧keycloak服务器导出导出,新keycloak控制台导入

    1 新建部署单元,镜像:直接填不要选: jboss/keycloak,版本用15.0.0
    2 数据库配置在环境变量,指定另外的库,环境变量好像有先后顺序之分?期间填错了database和user的前后位置导致报错。具体需要的环境变量有:

    - env:
            - name: KEYCLOAK_USER
              value: admin
            - name: KEYCLOAK_PASSWORD
              value: **********
            - name: DB_VENDOR
              value: mysql
            - name: DB_ADDR
              value: 10.200.192.3
            - name: MYSQL_PORT
              value: "3306"
            - name: DB_DATABASE
              value: keycloak_2022
            - name: DB_USER
              value: root
            - name: DB_PASSWORD
              value: **********
            - name: PROXY_ADDRESS_FORWARDING
              value: "true"
            - name: KEYCLOAK_FRONTEND_URL
              value: https://sso-2022.xxx.com/auth
            - name: TZ
              value: Asia/Shanghai
    View Code

    3 数据库必须已创建且为空
    4 启动新keycloak。如果启动正常的话可以看到如下日志:

     1 Added 'admin' to '/opt/jboss/keycloak/standalone/configuration/keycloak-add-user.json', restart server to load user
     2 -b 0.0.0.0
     3 =========================================================================
     4 
     5   Using MySQL database
     6 
     7 =========================================================================
     8 
     9 16:54:59,234 INFO  [org.jboss.modules] (CLI command executor) JBoss Modules version 1.11.0.Final
    10 16:54:59,836 INFO  [org.jboss.msc] (CLI command executor) JBoss MSC version 1.4.12.Final
    11 16:54:59,922 INFO  [org.jboss.threads] (CLI command executor) JBoss Threads version 2.4.0.Final
    12 16:55:00,731 INFO  [org.jboss.as] (MSC service thread 1-2) WFLYSRV0049: Keycloak 15.0.0 (WildFly Core 15.0.1.Final) starting
    13 16:55:01,040 INFO  [org.jboss.vfs] (MSC service thread 1-2) VFS000002: Failed to clean existing content for temp file provider of type temp. Enable DEBUG level log to find what caused this
    14 16:55:04,734 INFO  [org.wildfly.security] (ServerService Thread Pool -- 20) ELY00001: WildFly Elytron version 1.15.3.Final
    15 16:55:06,725 INFO  [org.jboss.as.controller.management-deprecated] (ServerService Thread Pool -- 5) WFLYCTL0033: Extension 'security' is deprecated and may not be supported in future versions
    16 16:55:08,639 INFO  [org.jboss.as.controller.management-deprecated] (Controller Boot Thread) WFLYCTL0028: Attribute 'security-realm' in the resource at address '/core-service=management/management-interface=http-interface' is deprecated, and may be removed in a future version. See the attribute description in the output of the read-resource-description operation to learn more about the deprecation.
    View Code

    5 从旧keycloak导出配置文件:keycloak-export.json:(https://www.coder.work/article/6370494)

    bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=keycloak-export.json -Djboss.http.port=8888 -Djboss.https.port=9999 -Djboss.management.http.port=7777

    6 

    导入:

    bin/standalone.sh -Dkeycloak.migration.action=import -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=keycloak-export-uat0218.json -Dkeycloak.migration.strategy=OVERWRITE_EXISTING -Djboss.http.port=8888 -Djboss.https.port=9999 -Djboss.management.http.port=7777

    7 将keycloak的 KEYCLOAK_FRONTEND_URL 改为生产用的url,并将域名解析切换至新keycloak。完成。

    经验证,用户和权限配置等都迁移正常。



    总结:

    官方表示,控制台导出,会将一些敏感信息用****代替,所以从控制台的导出和导入都会有问题。

    ----------------------------------------------------

    参考链接:https://wjw465150.gitbooks.io/keycloak-documentation/content/server_admin/topics/export-import.html

    参考链接:https://www.keycloak.org/docs/latest/server_admin/#assembly-exporting-importing_server_administration_guide

    作者注: 本站文章除注明转载外,均为本站原创或编辑,欢迎大家转载,但请务必注明出处,尊重他人成果,谢谢。 任何问题请联系1187616732@qq.com
  • 相关阅读:
    如何通过npm编译Typescript代码
    TypeScript 中的':' 和'?:'的区别
    无法读取本地服务器JSON文件, 返回404错误
    Nodejs , npn 注册 包上传,更新,下载
    Java 字符流
    Java 字节流
    Java中的File类,递归是什么?
    JDBC工具类—如何封装JDBC
    JDBC的开发步骤
    vFor和vIf不要一起使用
  • 原文地址:https://www.cnblogs.com/laijx/p/15724144.html
Copyright © 2011-2022 走看看