Eureka安全访问

背景

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

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

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

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

解决方案

添加spring-security支持

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-security</artifactId>  
</dependency> 

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

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

关键配置

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

启动应用查看效果

image.png

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

image.png

正常服务注册效果比较

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

image.png

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

image.png

正常注册

image.png

优化

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

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

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如下

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如下

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.团队内部成员权限隔离

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据杂谈

Windows下安装python第三方包、模块汇总

Windows下安装python第三方包、模块汇总如下(部分方式同样适用于其他平台): 1. 直接安装 windows下最常见的*.exe,*.msi文件,直接...

27810
来自专栏cmazxiaoma的架构师之路

FastDFS蛋疼的集群和负载均衡(二)之tracker和stroage集群配置

2514
来自专栏静下来

通过nginx GeoIP模块 限制某些国家地区访问网站

image.png 通过nginx GeoIP模块来限制某些国家或者具体地区访问网站,在国内一般用于外贸站,因为很多外贸公司走货的价格关系,是不希望国内用户看见...

8556
来自专栏电光石火

gradle加载本地jar包

1416
来自专栏黑白安全

Red Hat Linux DHCP 客户端被曝远程命令注入漏洞

近日,Google 安全研究人员在Red Hat Linux 及其衍生工具(如 Fedora 操作系统) 的 DHCP 客户端(dhclient)软件包中发现了...

1102
来自专栏一个爱瞎折腾的程序猿

在 ubuntu 中愉快的安装 Jenkins

第一次安装的可以稍微看下jenkins 的安装文档 总之,如果没有安装 Java 需要安装一下。

1431
来自专栏Debian社区

CVE-2017-1000367:Sudo 本地提权漏洞

2017 年 5 月 30 日, 国外安全研究人员发现 Linux 环节下,可以通过 sudo 实现本地提权漏洞,漏洞编号为 CVE-2017-1000367,...

1292
来自专栏FreeBuf

Sickle:推荐一款优质ShellCode开发工具

Sickle是一个shellcode开发工具,用于加速创建正常运行的shellcode所需的各个步骤。 Sickle主要有以下功能: 识别可能会导致shellc...

2228
来自专栏butterfly100

Chris Richardson微服务翻译:微服务架构中的服务发现

Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现(...

3709
来自专栏用户2442861的专栏

ubuntu gcc(4.6/5.2)源码安装(version `CXXABI_1.3.8' not found)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

3323

扫码关注云+社区

领取腾讯云代金券