# 大量 ACL 拒绝告警处理指南

大量 ACL 拒绝告警表示在部署中，客户端在短时间内访问主题时，未通过 ACL 权限校验而被拒绝。该告警在以下条件下触发：

- 过去 30 分钟内**授权总次数 ≥ 1800**，且  
- 过去 30 分钟内**授权失败比例 > 0.5**。

该情况通常意味着客户端访问行为存在异常，可能影响正常的业务接入。常见问题包括 ACL 规则配置错误、客户端访问了未授权的主题、大量非法访问尝试，或外部授权服务异常。

## 客户端访问未授权主题

### 问题描述

在部署中，如果某些客户端在订阅或发布消息时频繁触发 ACL 拒绝，且失败行为集中在固定的主题范围内，则可能是客户端访问了未被 ACL 规则允许的主题。

### 常见原因

- ACL 规则未放行客户端实际使用的业务主题。  
- ACL 策略发生变更后，客户端侧未按要求同步修改配置。  

### 处理方法

- 检查 ACL 规则配置，确认合法客户端所需的订阅和发布主题已被正确放行。  
- 在发布或调整 ACL 策略前，先进行灰度发布或测试验证，避免策略变更对业务造成集中影响。  

## 非法客户端访问尝试

### 问题描述

如果在短时间内出现大量 ACL 授权失败请求，且这些请求来自异常客户端或非业务来源，则可能存在非法客户端访问尝试。

在 ACL 授权失败日志中，若发现来源 IP 高度集中且不属于业务访问范围，或出现大量陌生 Client ID 尝试访问随机主题，则通常符合此类情况。

### 常见原因

- 恶意客户端尝试接入 EMQX 部署。  
- 使用无权限的 Client ID 或凭证，频繁尝试订阅或发布主题。  

### 处理方法

- 查看部署日志，定位触发 ACL 拒绝的客户端 ID、来源 IP 和用户名等信息。  
- 基于 Client ID 或 IP 配置黑名单，阻断异常来源的客户端访问。  
- 结合实际安全需求，调整和加强认证机制（如用户名密码、JWT、TLS 双向认证），进一步提升整体安全性。  

## 外部授权服务异常

### 问题描述

当使用 HTTP API、数据库或 LDAP 等外部 ACL 授权服务时，如果外部服务出现延迟或故障，可能导致原本合法的客户端授权失败，从而触发大量 ACL 拒绝告警。

在监控中，如果 ACL 授权失败率的上升与外部服务超时或错误率上升同步发生，则通常可以判断为外部授权服务异常。

### 常见原因

- 外部 ACL 授权服务不可用或响应异常。  
- 外部服务负载过高，导致请求超时或失败。  

### 处理方法

- 检查外部 ACL 授权服务的运行状态和相关日志，确认是否存在异常。  
- 在 EMQX 中配置合理的超时与重试策略，降低瞬时波动对授权结果的影响。  
- 调整外部 ACL 服务的连接池大小，提高并发处理能力和整体吞吐性能。  

## 排查步骤

1. 登录 EMQX Cloud 控制台，进入部署**日志**页面，查看 ACL 相关日志，确认是哪些客户端、哪些主题触发了授权失败。

2. 进入部署**告警**页面，确认 ACL 拒绝告警的触发时间范围及其影响范围。

3. 使用 MQTTX 等客户端工具，模拟一个或多个客户端的订阅和发布行为，尝试复现 ACL 授权失败问题。

4. 如果使用了外部 ACL 授权服务，检查该服务的运行日志和健康状态，确认是否存在延迟或异常。

## 告警影响说明

- 大量 ACL 拒绝告警不会导致部署停止或产生计费变化。  
- 如果告警持续触发，说明客户端访问逻辑或 ACL 策略可能存在问题，可能影响正常业务消息的收发。  
- 建议在告警触发后及时排查并修复 ACL 配置或客户端接入逻辑，以保障业务的稳定性。  