前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Eureka安全访问

Eureka安全访问

原创
作者头像
3号攻城狮
发布2018-05-13 14:53:55
3.5K3
发布2018-05-13 14:53:55
举报

背景

在使用注册服务的时候,我们启动了Eureka Server,然后在浏览器中输入http://ip:port/后,直接回车,就进入了Spring Cloud的服务治理页面。

在公网部署应用存在以下问题:

1.普通用户可以直接访问我们的服务治理页面

2.普通用户可以将自己的服务注册到生成环景

解决方案

添加spring-security支持

代码语言:txt
复制
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-security</artifactId>  
</dependency> 

在配置文件bootstrap.yml加入安全认证

代码语言:txt
复制
spring:
  profiles: default
  cloud:
    config:
      enabled: false
# 安全认证的配置  
security:  
  basic:  
    enabled: true  
  user:  
    name: pikachu  # 用户名  
    password: pikachu   # 用户密码
eureka:
  instance:
    preferIpAddress: true
    leaseRenewalIntervalInSeconds: 1
    leaseExpirationDurationInSeconds: 3
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: ${EUREKA_DEFAULT_ZONE:http://pikachu:pikachu@localhost:8761/eureka/ }
    registryFetchIntervalSeconds: 1
  server:
    evictionIntervalTimerInMs: 1000

关键配置

代码语言:txt
复制
security:  
  basic:  
    enabled: true  
  user:  
    name: pikachu  # 用户名  
    password: pikachu   # 用户密码
代码语言:txt
复制
defaultZone: ${EUREKA_DEFAULT_ZONE:http://pikachu:pikachu@localhost:8761/eureka/}

启动应用查看效果

image.png
image.png

输入密码后可以正常访问页面

image.png
image.png

正常服务注册效果比较

使用默认配置做服务注册,可以看到服务注册失败。

image.png
image.png

调整配置后可以看到,服务正常启动

image.png
image.png

正常注册

image.png
image.png

优化

上述解决方案虽然解决了我们公网部署,生产环境部署的安全访问问题。但是针对团队内部的权限依然没有管理好。

通常我们的服务配置存放在两个地方:

代码语言:txt
复制
1.application.yml
2.bootstrap.yml

项目都能从两个文件中读取配置。但是bootstrap.yml优先于application.yml加载,会初始化系统的环境配置信息。

当使用Spring Cloud时,通常从服务器加载不同环境的配置数据。为了获取URL(和其他连接配置,如密码等),我们就需要一个较早的或“bootstrap”配置。因此,我们可以将配置服务器属性放在bootstrap.yml中,该属性用于加载实际配置数据(通常覆盖application.yml 如果存在中的内容)。

Spring cloud 我们通常都会有config服务。通过config服务读取各个环境的配置信息,所有我们只需要在bootstrap.yml中配置信息来源。将具体的配置写入到application.yml中。

bootstrap.yml如下

代码语言:txt
复制
spring:
  profiles: uat
  cloud:
    config:
      label: master
      name: cloud-demo-server
      discovery:
        serviceId: cloud-config-server
        enabled: true
      failFast: true
      retry:
        maxAttempts: 32
        multiplier: 1.5
        maxInterval: 10000

application.yml如下

代码语言:txt
复制
spring:
  profiles: default
  cloud:
    config:
      enabled: false
# 安全认证的配置  
security:  
  basic:  
    enabled: true  
  user:  
    name: pikachu  # 用户名  
    password: pikachu   # 用户密码
eureka:
  instance:
    preferIpAddress: true
    leaseRenewalIntervalInSeconds: 1
    leaseExpirationDurationInSeconds: 3
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: ${EUREKA_DEFAULT_ZONE:http://pikachu:pikachu@localhost:8761/eureka/ }
    registryFetchIntervalSeconds: 1
  server:
    evictionIntervalTimerInMs: 1000

当然,在一些情况上不用我们不用那么区分这两个文件,只需要使用application文件即可,把全部选项都写在这里,效果基本是一致的,在不考虑上面的加载顺序覆盖的问题上。

总结

通过以上配置我们基本能解决Eureka的安全访问问题:

1.普通用户可以直接通过域名访问我们的服务治理页面;

2.普通用户可以将自己的服务注册到生产环境;

3.团队内部成员权限隔离

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 解决方案
    • 添加spring-security支持
      • 在配置文件bootstrap.yml加入安全认证
        • 启动应用查看效果
          • 正常服务注册效果比较
          • 优化
          • 总结
          相关产品与服务
          微服务引擎 TSE
          微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档