authorize如何控制多个角色权限】_云架构的多个区域实现了资源隔离和权限控制,这种能力能否延伸?...

e1403502e9da2195741aa4b181da3edc.png

随着云计算技术的出现,采用云计算进行大数据信息处理,有效提高了数据资源的处理速度和容量,在云计算环境下,对多个网格区域的数据资源进行混合调度,采用云计算的网格技术执行资源的优化配置,在有效降低云计算的 CPU 的工作负荷,提高云计算的计算能力方面具有积极作用,同样,通过对多区域资源的混合调度,在平衡网络负载,提高资源利用率和响应时间等方面具有重要意义。

以阿里云为例,其 “地域”是指在同一地理地区下,电力、网络相互隔离的物理区域,而“可用区”是指一个地域中多个互通互联的逻辑层面的隔离空间,他们之间内网互通,不同可用区之间故障隔离。如果我们需要提高应用的高可用性,则实例应该创建在不同的可用区内。

地域通常按照数据中心所在的城市进行划分,而同一地域下的多个数据中心又进一步按照可用区进行划分。如果把数据中心比作住宅,那地域就是城市,可用区就是小区。购买服务器时选择地域与可用区,就如购房时选择城市与小区。结合上述理解,我们选择地域时一般需要注意2个问题:

1. 不同地域之间的服务器内网是不通的,若要进行网络通信只能走公网,不仅网络延迟大,而且要支付额外的带宽费用。

2. 离用户越近的地域,网络延迟越小。所以要根据网站访问用户的地区分布进行选择。

在可用区的概念里,可以实现跨机房的容错能力,比如1个SLB(Server Load Balance)下面挂2台服务器,分别放在不同的可用区(机房),假如其中1台服务器所在的整个机房出现故障,由于另外一个可用区下的服务器不受影响,所以网站依然能正常运行。也就是通过可用区可以实现跨机房的负载均衡与热备。当然,为此要付出的代价是不同可用区的服务器之间内网通信的延迟会有一些增加,(2-5ms)通常是能接受的。所以,对于性能要求不是非常苛刻的应用场景,将服务器部署在不同可用区是一个“不把鸡蛋放在一个篮子里”的更好选择。另外,由于一个机房能容纳的服务器数量毕竟是有限的,即使你现在刻意将服务器放在同一个可用区。但当这个可用区“车位已满”时(服务器都被占用),你后续增加的服务器也将不得不放在不同的可用区。

由此可见,地域(Region)与可用区(Availability Zone)是云服务商划分自己所拥有的物理计算资源(数据中心)的一种方法,就如城市与小区是房地产开发商划分自己房产的一种方法。地域的选择虽然简单,但很重要。一旦选定了地域,后续的服务器就应该归属于这个地域。而可用区的选择却让不少人困惑,可用区就像是一个机房,不同可用区之间就是不同的机房环境,选择可用区,就是选择服务器(ECS)放在哪个机房。

另一方面,系统的资源管理也是非常重要的。资源通常包括cpu,mem,io,net几大类,为了管理和分配好资源有很多方法。比如重量级的虚拟化技术,虚拟化技术是当前非常热门的一门技术。比如主要面向桌面应用如云桌面,云主机等,常见的分类有:操作系统虚拟化、应用程序虚拟化、桌面虚拟化等,上面这些技术是在计算机上模拟多个操作系统平台,也是常说的狭义理解的虚拟化技术。这些技术的特点都是讲一个大的资源分成小粒度的多个资源给应用使用,也是裂变的方式。这些技术在大数据计算这种混杂形态的应用支撑中并不见得适合,今天主流的资源管理有YARN、Mesos等,这些都是专注领域甚至比较大型的资源管理方案,同时也少不了Linux Container(LXC)的运用。说白了,轻量级的虚拟化能够更好的隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。

关于权限控制,长期以来一直是云计算系统在应用过程中急需解决的核心问题。在目前的网络系统应用环境下,用户往往将数据处理和存储的任务交给大型的数据云服务提供商进行处理维护,用户的数据不再受用户本身的掌控,起而代之的是数据云服务提供商的统一管控,因此,数据云服务商对数据的非法访问或者恶意用户的非法窃取问题变得尤为棘手。同时,虚拟化、多租户技术作为目前云计算领域中主要应用的两项关键技术,同时也造成数据资源能够进行动态伸缩的主要原因。通过虚拟化技术能够使不同用户可以共享相同硬件存储资源,通过多租户技术能够将不同用户数据存储于同一张数据库表中,通过标签技术即可完成数据隔离,共享相同数据资源,通过以上技术构成的多租户环境,对云计算访问控制任务提出了较高的技术要求。云计算数据访问流程如图1所示,身份认证和访问控制技术是数据访问的核心。

关于云身份验证,传统的计算和数据访问模式是企业的人力资源管理部门根据公司员工的岗位信息划分不同级别的用户账号,用户根据自己的账号进行数据访问,此过程发生在可信任的边界内部,身份认证和身份同步过程较为简单。在以上应用情况下,一旦将云计算融入到可控信任域内,不同域环境中的身份验证和同步过程将会成为难题,如果由云域与企业域同时通过身份认证,身份同步过程较难实现,用户数据的隐私性也会被破坏。从用户的角度来说,云计算环境目前主要通过自主供应的方式进行身份供应,用户的隐私信息存在泄漏的风险,由于云计算环境中的资源是用户共同拥有的,是可以用户间共享的,隐私保护问题必然成为需要特别关注的问题。

关于身份认证,传统网络数据访问系统中通过“用户名+口令”的形式进行身份认证,这种方式虽然相对容易,但是其安全性比较低,因此属于弱认证方式,其安全威胁主要由可信域内部产生,但均位于可信边界之内部,因此系统安全性能够得到一定程度的保证,但是此类认证方式的安全性仍然无法完全应用于所有接人的外部终端。在此类认证方式的基础上引人多种更加安全的多因子强认证策略,并且根据不同安全级别的服务应用提供不同力度的认证方式。将云计算服务引入企业系统内部后,从保护用户隐私的角度出发,企业往往不会为云计算服务提供商传输用户的基本身份信息,因此,云计算供应商不能对用户身份进行确认,必须将身份认证委托给享受云服务的企业本身,此时企业在使用云计算服务时,需要通过可信、可管控方式对用户身份信息进行认证,企业需要克服身份认证管理、委托认证以及强认证等一系列问题。

关于访问授权,要完成数据的授权访问必须选择选择合理的访问控制模型。由于云计算本身具备多种特点,并不是所有模型在云计算环境中具备良好的适用性。云计算环境下选择何种访问控制模型,不同的服务提供商应该选择何种访问控制模型都是需要详细设计和考虑的问题。如果将策略决定点和执行点部署在云端或云服务提供商处,则云计算平台端的用户基本信息与策略信息必须与其他企业信息保持同步,这是最难实现的,一旦无法实现,数据访问授权就会被阻断。如果在企业内部进行策略决定点的部署,那么需要将策略执行点部署在云端,这样就规避了信息同步的难题,但同样会遭遇到授权、应用分离的问题,而这个问题是目前技术无法克服的。

综上所述,云计算访问控制研究是目前云计算安全领域中比较关键的一个环节,云计算访问控制技术也绝不单单是技术层面的问题,同时也包括行业标准制定以及标准化的推行工作等。因此,通过安全可靠的访问控制技术构造安全的云计算环境是十分有必要的。我们能做的就是持续钻研技术,为未来的云计算架构体系提供技术支撑,对云服务器中所有数据与信息进行管理和保护,确保各项计算任务能够稳定执行。

云架构的多个区域实现了资源隔离和权限控制,这种能力能否延伸?


分析世界讲方案,为您带来精彩的一页;

——垂直领域、专注原创;

——感谢阅读、感谢共鸣。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以给您一个例子。 首先,在Spring Boot中实现接口权限控制,通常需要使用Spring Security框架。Spring Security是一个功能强大的框架,可以为您的应用程序提供各种安全性功能,包括身份验证、授权、加密等。 其次,您可以自定义权限控制规则,以适应不同的角色权限需求。下面是一个简单的例子: 假设您的应用程序有三种角色:管理员、普通用户和游客。管理员具有最高权限,可以访问所有接口;普通用户只能访问一部分接口;游客只能访问一些公共接口。 首先,您需要定义角色权限的枚举类: ```java public enum Role { ADMIN, USER, GUEST } public enum Permission { READ, WRITE, DELETE } ``` 然后,您需要实现自定义的授权规则。具体来说,您可以创建一个实现`AccessDecisionVoter`接口的类,该类将根据用户的角色和请求的URL路径来判断是否有权限访问: ```java @Component public class CustomAccessDecisionVoter implements AccessDecisionVoter<Object> { @Override public boolean supports(ConfigAttribute attribute) { return true; } @Override public boolean supports(Class<?> clazz) { return true; } @Override public int vote(Authentication authentication, Object object, Collection<ConfigAttribute> attributes) { if (authentication == null || !authentication.isAuthenticated()) { return ACCESS_DENIED; } for (ConfigAttribute attribute : attributes) { String role = attribute.getAttribute(); if (Role.ADMIN.name().equals(role)) { if (isAdmin(authentication)) { return ACCESS_GRANTED; } } else if (Role.USER.name().equals(role)) { if (isUser(authentication)) { return ACCESS_GRANTED; } } else if (Role.GUEST.name().equals(role)) { if (isGuest(authentication)) { return ACCESS_GRANTED; } } } return ACCESS_DENIED; } private boolean isAdmin(Authentication authentication) { return authentication.getAuthorities().stream() .anyMatch(a -> a.getAuthority().equals(Role.ADMIN.name())); } private boolean isUser(Authentication authentication) { return authentication.getAuthorities().stream() .anyMatch(a -> a.getAuthority().equals(Role.USER.name())); } private boolean isGuest(Authentication authentication) { return authentication.getAuthorities().stream() .anyMatch(a -> a.getAuthority().equals(Role.GUEST.name())); } } ``` 最后,您需要在Spring Security的配置类中使用自定义的授权规则。具体来说,您需要为每个URL路径指定相应的角色权限: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomAccessDecisionVoter voter; @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin/**").hasAuthority(Role.ADMIN.name()) .antMatchers("/user/**").hasAuthority(Role.USER.name()) .antMatchers("/public/**").hasAuthority(Role.GUEST.name()) .anyRequest().authenticated() .accessDecisionManager(accessDecisionManager()) .and() .formLogin(); } private AccessDecisionManager accessDecisionManager() { List<AccessDecisionVoter<?>> voters = new ArrayList<>(); voters.add(voter); return new AffirmativeBased(voters); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("admin").password("{noop}admin").authorities(Role.ADMIN.name()) .and() .withUser("user").password("{noop}user").authorities(Role.USER.name()) .and() .withUser("guest").password("{noop}guest").authorities(Role.GUEST.name()); } } ``` 上述示例中,`CustomAccessDecisionVoter`类实现了自定义的授权规则。`SecurityConfig`类是Spring Security的配置类,其中指定了每个URL路径对应的角色权限。`accessDecisionManager()`方法返回一个`AccessDecisionManager`对象,该对象负责使用自定义的授权规则来进行授权判断。`configure(AuthenticationManagerBuilder auth)`方法配置了认证信息,这里使用了内存认证方式。 这是一个简单的例子,您可以根据实际需求来自定义更复杂的授权规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值