跳到主要内容

Sentinel 授权规则

Sentinel是阿里巴巴开源的一款轻量级流量控制框架,广泛应用于微服务架构中。除了流量控制,Sentinel还提供了强大的授权规则功能,用于控制资源的访问权限。本文将详细介绍Sentinel授权规则的概念、使用场景以及如何通过代码实现资源访问控制。

什么是Sentinel授权规则?

Sentinel授权规则是一种基于规则的访问控制机制,允许开发者定义哪些调用方(例如应用、服务或用户)可以访问特定的资源。通过授权规则,您可以限制某些调用方对敏感资源的访问,从而增强系统的安全性。

授权规则的核心思想是:根据调用方的身份或属性,决定是否允许其访问某个资源。Sentinel支持多种授权策略,例如白名单、黑名单等。

授权规则的基本结构

Sentinel的授权规则由以下几个关键部分组成:

  1. 资源名(Resource):需要保护的资源名称。
  2. 调用方(LimitApp):调用方的标识,可以是应用名称、IP地址等。
  3. 策略(Strategy):授权策略,例如白名单(WHITE)或黑名单(BLACK)。

以下是一个授权规则的示例:

java
AuthorityRule rule = new AuthorityRule();
rule.setResource("myResource");
rule.setLimitApp("appA,appB");
rule.setStrategy(RuleConstant.AUTHORITY_WHITE);
  • Resource:资源名为myResource
  • LimitApp:允许appAappB访问该资源。
  • Strategy:使用白名单策略,只有appAappB可以访问。

授权策略详解

Sentinel支持两种授权策略:

  1. 白名单(WHITE):只有指定的调用方可以访问资源,其他调用方均被拒绝。
  2. 黑名单(BLACK):指定的调用方被禁止访问资源,其他调用方可以访问。

白名单示例

假设我们有一个资源/api/data,只允许appAappB访问,其他应用均被拒绝。可以通过以下代码实现:

java
AuthorityRule rule = new AuthorityRule();
rule.setResource("/api/data");
rule.setLimitApp("appA,appB");
rule.setStrategy(RuleConstant.AUTHORITY_WHITE);
AuthorityRuleManager.loadRules(Collections.singletonList(rule));

黑名单示例

假设我们希望禁止appC访问资源/api/data,其他应用可以正常访问。可以通过以下代码实现:

java
AuthorityRule rule = new AuthorityRule();
rule.setResource("/api/data");
rule.setLimitApp("appC");
rule.setStrategy(RuleConstant.AUTHORITY_BLACK);
AuthorityRuleManager.loadRules(Collections.singletonList(rule));

实际应用场景

场景1:保护敏感接口

假设您的系统中有一个敏感接口/api/admin,只有管理员应用adminApp可以访问。可以通过白名单策略实现:

java
AuthorityRule rule = new AuthorityRule();
rule.setResource("/api/admin");
rule.setLimitApp("adminApp");
rule.setStrategy(RuleConstant.AUTHORITY_WHITE);
AuthorityRuleManager.loadRules(Collections.singletonList(rule));

场景2:限制恶意调用

假设某个IP地址192.168.1.100频繁调用您的服务,您希望禁止该IP访问。可以通过黑名单策略实现:

java
AuthorityRule rule = new AuthorityRule();
rule.setResource("/api/service");
rule.setLimitApp("192.168.1.100");
rule.setStrategy(RuleConstant.AUTHORITY_BLACK);
AuthorityRuleManager.loadRules(Collections.singletonList(rule));

总结

Sentinel授权规则是一种强大的访问控制机制,可以帮助您保护系统中的敏感资源,防止未授权的访问。通过白名单和黑名单策略,您可以灵活地控制哪些调用方可以访问特定资源。

提示

在实际项目中,建议结合Sentinel的流量控制功能,全面保护您的系统。

附加资源

练习

  1. 尝试为您的项目配置一个白名单规则,只允许特定应用访问某个资源。
  2. 使用黑名单规则,禁止某个IP地址访问您的服务。