常见的配置中心:Apollo(三)-安全相关

配置中心作为基础服务,存储着公司非常重要的配置信息,所以安全因素需要大家重点关注,Apollo提供多方面的实践

1 认证

1.1 使用Apollo提供的Spring Security简单认证

可能很多公司并没有统一的登录认证系统,如果自己实现一套会比较麻烦。Apollo针对这种情况,从0.9.0开始提供了利用Spring Security实现的Http Basic简单认证版本。

从0.9.0版开始之后执行完Apollo的sql脚本之后,能使用apollo/admin登录Apollo管理界面。

1.2 使用SSO方式登录

在官方文档中说道

  1. SSO会提供一个jar包,需要配置一个filter
  2. filter会拦截所有请求,检查是否已经登录
  3. 如果没有登录,那么就会跳转到SSO的登录页面
  4. 在SSO登录页面登录成功后,会跳转回apollo的页面,带上认证的信息
  5. 再次进入SSO的filter,校验认证信息,把用户的信息保存下来,并且把用户凭证写入cookie或分布式session,以免下次还要重新登录
  6. 进入Apollo的代码,Apollo的代码会调用UserInfoHolder.getUser获取当前登录用户

注意,以上1-5这几步都是SSO的代码,不是Apollo的代码,Apollo的代码只需要你实现第6步。

其实当执行UserInfoHolder.getUser的时候已经完成了Spring Security登录的过滤链,通过查看代码AuthConfiguration可知Apollo通过不同的profile来实现登录方法的初始化,因此可以通过在代码中追加自定义的SSO逻辑链路来支持SSO登录,由于篇幅较大,日后时间会写另外一遍博文进行阐述。

除此之外Apollo还提供了LDAP和OIDC的登录,鉴于作者目前碰到的系统少有使用,所以就不做讨论。

2 授权

2.1 用户管理

http://127.0.0.1:8070/user-manage.html中新增访问系统的用户

2.2 项目管理员权限

创建项目时填写的应用负责人默认会成为项目的管理员之一,如果还需要其他人也成为项目管理员,可以按照下面步骤操作:

进入管理项目页面

追加用户到管理员当中

2.3 编辑、发布权限授权

项目管理员拥有细分权限的赋权权限,因此如果只允许其只有发布或编辑某个权限,那么就在对应配置上面给予对应账号权限即可

没有发布权限

没有编辑权限

2.4 查看权限

从1.1.0版本开始,apollo-portal增加了查看权限的支持,可以支持配置某个环境只允许项目成员查看私有Namespace的配置。 这里的项目成员是指: 项目的管理员 具备该私有Namespace在该环境下的修改或发布权限 

通过追加环境来禁止人员查看配置,在管理员工具-》系统参数的configView.memberOnly.envs

没有查看权限的时候

拥有查看权限的时候

3 系统访问

3.1 敏感配置访问

Apollo从1.6.0版本开始增加访问密钥机制,从而只有经过身份验证的客户端才能访问敏感配置。如果应用开启了访问密钥,客户端需要配置密钥,否则无法获取配置。

在管理秘钥页面启用秘钥

所有尝试拉取该环境配置的服务将会被拒绝

reason: java.io.IOException: Server returned HTTP response code: 401 for URL

需要在客户端进行配置,方能正常拉取配置

apollo:
  accesskey:
    secret: 098f6bcd4621d373cade4e832627b4f6 #在portal中的环境秘钥

3.2 admin-service访问控制

1.7.1及以上版本可以考虑为apollo-adminservice开启访问控制,从而只有受控的apollo-portal才能访问对应接口,增强安全性

admin-service.access.control.enabled默认为fale,当设置为true的时候并且同时设置admin-service.access.tokens将可以设置admin-service访问控制

portal的日志和界面都会提示无法访问

org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://172.16.0.5:8090/health": Connect to 172.16.0.5:8090 [/172.16.0.5] failed: Connection refused (Connection refused); nested exception is org.apache.http.conn.HttpHostConnectException: Connect to 172.16.0.5:8090 [/172.16.0.5] failed: Connection refused (Connection refused)

通过在数据库设置对应的token来进行访问

{"dev" : "098f6bcd4621d373cade4e832627b4f6"}

引用:https://www.apolloconfig.com/#/zh/usage/apollo-user-guide?id=_71-安全相关

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值