1. 程式人生 > >SpringCloud元件:你的Eureka服務註冊中心安全嗎?

SpringCloud元件:你的Eureka服務註冊中心安全嗎?

在之前的章節我們講到了SpringCloud元件:搭建Eureka服務註冊中心,已經可以讓我們自定義的微服務節點進行註冊到該Eureka Server上,不過在註冊過程中存在一個風險的問題,如果我們的Eureka Server的地址無意暴露在外,那豈不是通過Eureka協議建立的任意服務都可以進行註冊到該Eureka Server嗎?(當然如果你配置了伺服器的安全組並且使用內網的IP地址或者主機名方式對外提供服務註冊地址幾乎不存在這個問題。)

本章目標

Eureka Server穿上安全的外套,我的註冊中心更安全。

構建專案

依然使用idea開發工具建立一個SpringBoot專案,在依賴的選擇介面我們新增Eureka Server

Security相關依賴,pom.xml配置檔案如下所示:

//...省略部分內容
<dependencies>
    <!--Eureka服務端-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <!--新增安全認證-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
//...省略部分內容

因為我們是用的是Spring Security作為安全元件,所以在這裡需要新增spring-boot-starter-security依賴來完成安全相關元件自動化配置以及例項化

既然依賴已經新增好了,那麼我們怎麼配置安全使用者呢?

開啟註冊中心安全配置

在新增安全配置之前,我們需要把Eureka Server的配置也一併新增上,如果你對Eureka Server配置不太瞭解,你可以檢視SpringCloud元件:搭建Eureka服務註冊中心閱讀學習

配置檔案的安全配置

修改application.yml配置檔案內容,新增安全配置資訊,如下所示:

# 服務名稱
spring:
  application:
    name: hengboy-spring-cloud-eureka-security
  # 安全引數配置
  security:
    user:
      name: api
      password: node
      roles: SERVICE_NODE
# eureka配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:${server.port}/eureka/
    fetch-registry: false
    register-with-eureka: false

# 埠號
server:
  port: 10000

安全相關的內容我們通過spring.security.user開頭的引數進行配置,對應自動繫結spring-boot-starter-security依賴內的org.springframework.boot.autoconfigure.security.SecurityProperties屬性實體類。
SecurityProperties的內部類SecurityProperties.User內我們可以看到已經給我們生成了一個預設的name以及password

  • spring.security.user.name
    使用者名稱,預設值為user,配置Spring Security內建使用記憶體方式儲存的使用者名稱。
  • spring.security.user.password
    使用者對應的密碼,預設值為UUID隨機字串,配置Spring Security預設對應user使用者的密碼,該密碼在系統啟動時會在控制檯列印,如果使用預設值可以執行檢視控制檯的輸出內容。

開啟Http Basic 安全認證

舊版本的Spring Security的依賴是可以在配置檔案內容直接通security.basic.enabled引數進行開啟basic認證,不過目前版本已經被廢除,既然這種方式不可行,那我們就使用另外一種方式進行配置,通過繼承WebSecurityConfigurerAdapter安全配置類來完成開啟認證許可權,配置類如下所示:

/**
 * 開啟Eureka Server安全認證配置
 *
 * @author:於起宇 <p>
 * ================================
 * Created with IDEA.
 * Date:2018/9/28
 * Time:5:42 PM
 * 簡書:http://www.jianshu.com/u/092df3f77bca
 * 碼雲:https://gitee.com/hengboy
 * GitHub:https://github.com/hengyuboy
 * ================================
 * </p>
 */
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    /**
     * 配置安全資訊
     * - 禁用csrf攻擊功能
     * - 開啟所有請求需要驗證並且使用http basic進行認證
     *
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.csrf()
                .disable()
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .httpBasic();
    }
}

如果你瞭解Spring Security那肯定對我們自定義的安全配置類SecurityConfiguration的內容不陌生,在SecurityConfiguration#configure方法內,我們禁用了csrf功能並且開啟所有請求都需要通過basic方式進行驗證。

到目前為止我們的Eureka 註冊中心的安全相關配置已經新增完成,那麼我們的服務在進行註冊時是不是也需要同步修改呢?

答案:肯定以及必須的

不過服務註冊時僅僅是微調,影響不太大,那麼我們下面來看下該怎麼調整。

註冊服務時的安全配置

如果你對怎麼把服務註冊到Eureka Server不太瞭解,你可以閱讀SpringCloud元件:將微服務提供者註冊到Eureka服務中心來進行學習,
我們只需要修改eureka.client.service-url.defaultZone配置的連線字串內容即可,下面是修改前後的對比:

// 修改前
# 配置Eureka Server 資訊
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10000/eureka/

// 修改後
# 配置Eureka Server 資訊
eureka:
  client:
    service-url:
      defaultZone: http://api:[email protected]:10000/eureka/

修改後的api:[email protected]這塊的內容,前面是spring.security.user.name配置的值,而後面則是spring.security.user.password配置的值,@符號後面才是原本之前的Eureka Server的連線字串資訊。

對於上面的修改是不是很簡單?

這也歸功於Eureka的設計,安全方面也是netflix他們在研發過程中考慮到的一點,所以才會可以這麼簡單的整合Spring Security安全認證。

執行測試

本章的測試流程如下:

  1. 啟動Eureka Server(本章專案)
  2. 訪問Eureka Server管理平臺 http://localhost:10000
  3. 輸入使用者名稱api以及密碼node進行登入
  4. 檢視服務註冊列表

總結

我們本章為Eureka Server穿上了安全的外套,讓它可以更安全,在文章開始的時候我說到了如果使用內網IP或者主機名方式進行服務註冊時是幾乎不存在安全問題的,如果你想你的服務註冊中心更新安全,大可不必考慮你的服務註冊方式都可以新增安全認證。

原始碼位置

與恆宇少年面對面

如果你喜歡恆宇少年的相關文章,那麼就去微信公眾號(恆宇少年)關注我吧!!!
當然你也可以去 SpringCloud碼雲原始碼 專案底部掃描微信公眾號二維碼關注我,感謝閱讀!!!

學習目錄推薦

開源資訊

這段時間一直在編寫開源的相關框架,致力於公司使用的框架升級以及開源計劃,將公司使用到的工具以及外掛進行升級重構並且開源。

  • 自動分頁外掛
    MyBatis-Pageable是一款自動化分頁的外掛,基於MyBatis內部的外掛Interceptor攔截器編寫完成,攔截Executor.query的兩個過載方法計算出分頁的資訊以及根據配置的資料庫Dialect自動執行不同的查詢語句完成總數量的統計。
    Gitee地址https://gitee.com/hengboy/mybatis-pageable

相關推薦

SpringCloud元件Eureka服務註冊中心安全

在之前的章節我們講到了SpringCloud元件:搭建Eureka服務註冊中心,已經可以讓我們自定義的微服務節點進行註冊到該Eureka Server上,不過在註冊過程中存在一個風險的問題,如果我們的Eureka Server的地址無意暴露在外,那豈不是通過Eu

服務架構 SpringCloud(三)Eureka註冊中心集群篇)

ima static ice fff active hostname 需要 lee 分別是 一:集群環境搭建第一步:我們新建兩個註冊中心工程一個叫eureka_register_service_master、另外一個叫eureka_register_service_back

4--SpringCloud搭建高可用的服務註冊中心 1--SpringCloud服務註冊與發現Eureka 1--SpringCloud服務註冊與發現Eureka 1--SpringCloud服務註冊與發現Eureka

  我們已經介紹了1--SpringCloud的服務註冊與發現Eureka,其中,主要演示瞭如何構建和啟動服務註冊中心Eureka Server,以及如何將服務註冊到Eureka Server中,但是在之前的示例中,這個服務註冊中心是單點的,顯然這並不適合應用於線上生產環境,那麼下面在前文的基礎上,我們來看看

SpringCloud-Eureka 服務註冊中心搭建--高可用以及負載均衡配置例項

前言:        由於公司使用的分散式框架太老,慢慢轉移使用SpringBoot微服務框架,後臺框架存在很多問題,為了優化底層服務,現採取如下措施: 0、Nexus搭建Maven私服   (集中

十五Spring Cloud 之Eureka服務註冊中心(HA版)

1. Eureka簡介 2. 程式碼實現 2.1涉及的模組 eureka-server-ha:通過profiles指定不同的埠來模擬多服務例項。 eureka-service:服務提供者 2.2

SpringCloud第二篇 eureka(服務註冊中心)

1.新建一個Spring Cloud的eureka專案 2.具體的pom如下 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"  

Spring Cloud Eureka(四)Eureka 服務註冊中心配置說明

Eureka Client 配置項(eureka.client.*) org.springframework.cloud.netflix.eureka.EurekaClientConfigBean

SpringCloud Eureka服務註冊中心搭建及問題總結

(1)建立SpringBoot工程,命名eureka-server (2)pom檔案引入依賴 <dependency>    <groupId>org.springframework.cloud</groupId>    <a

SpringCloud——搭建Eureka服務註冊中心

一:Eureka簡介 Eureka和Consul、Zookeeper等類似,是一個使用者服務發現和服務註冊的元件,最開始主要用於亞

Spring Cloud(二)Eureka 服務註冊中心

前言 服務治理 隨著業務的發展,微服務應用也隨之增加,這些服務的管理和治理會越來越難,並且叢集規模、服務位置、服務命名都會發生變化,手動維護的方式極易發生錯誤或是命名衝突等問題。而服務治理正是為了解決這個問題,服務治理是微服務架構中最為核心和基礎的模組,它主要實現各個微服務例項的自動化註冊和發現。 服務註

沒使用Spring Cloud的版本管理導致Eureka服務無法註冊Eureka服務註冊中心

esc ice 修改 encoding -s put http nag scrip 創建了一個Eureka Server的服務註冊集群(兩個Eureka服務),都能相互註冊,寫了一個Eureka客戶端服務無法註冊到服務發現註冊中心 註冊中心1: 註冊中心2:

SpringCloud(三)Eureka服務註冊與發現《2》(actuator與Eureka自我保護)

1、actuator與註冊微服務資訊完善 1.1、主機名稱:服務名稱修改 1.當前問題:含有主機名或主機ip。 2.修改microservice-provider-dept-8001yml檔案: eureka:   client:&nbs

Spring Cloud 中Eureka服務註冊中心的搭建

1:首先在idea上面建立一個Maven工程,命名為Sprng-Boot-eureka-test 建立的Maven工程中的pom檔案如下 2:在建立的Sprng-Boot-eureka-test工程下面新建一個module為eureka-server

初始化Spring Cloud建立Eureka服務註冊中心

bootstrap https 控制臺 depend lee 心跳 git reg iyu 1、新建項目 https://gitee.com/frankawp/vishnu 新建一個git項目 打開git bash git clone https://gitee.co

搭建Spring Cloud Eureka服務註冊中心(二)服務呼叫

上一節我們搭建了單節點的Eureka和一個provide-server的服務,這一次我們再新建立一個consume-server,然後使用RestTemplate實現服務之間的呼叫。 1、建立consume-server服務 服務建立過程就不一一描述了,這裡貼一下appl

Spring Cloud入門高可用服務註冊中心

文章例項使用的Spring Cloud版本為Finchley.SR1,Spring Boot版本為2.0.4。 1 高可用服務註冊中心 上一節服務註冊與服務發現 中,我們嘗試了服務註冊中心的構建,但在微服務架構這樣的分散式環境中,我們需要充分考慮發生故障的情況,所以在生

4--SpringCloud搭建高可用的服務註冊中心

  我們已經介紹了1--SpringCloud的服務註冊與發現Eureka,其中,主要演示瞭如何構建和啟動服務註冊中心Eureka Server,以及如何將服務註冊到Eureka Server中,但是在之前的示例中,這個服務註冊中心是單點的,顯然這並不適合應用於線上生產環境,那麼下面在前文的基礎上,我們來看看

SpringCloud 使用consul作為微服務註冊中心

eureka宣佈閉源,使用consul作為服務註冊中心。 1、parent pom檔案 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"

Spring Cloud Eureka服務註冊中心 單節點搭建(學習總結)

一、前言: 本文主要搭建Spring Cloud Eureka服務註冊中心(單節點),不過一般生產環境都是多節點負載均衡,形成一個服務註冊中心叢集,這樣一個註冊中心崩了不會影響整個系統的執行以及介面的呼叫。本文基於SpringBoot 1.5.2,Spring Cloud 

【Spring Cloud】原始碼-Eureka客戶端如何載入Eureka服務註冊中心列表

這部分原始碼涉及到兩個類: 1. com.netflix.discovery.endpoint.EndpointUtils 2.  org.springframework.cloud.netflix.eureka.EurekaClientConfigBean 我