Compartir a través de

诊断并排查 Azure Cosmos DB 的“禁止访问异常”问题

HTTP 状态代码 403 表示已禁止完成请求。

防火墙阻止请求

数据平面请求可通过以下 3 个路径到达 Azure Cosmos DB。

  • 公共 Internet (IPv4)
  • 服务终结点
  • 专用端点

当数据平面请求被阻止并出现“403 禁止访问”错误时,错误消息会详述请求已通过前面 3 个路径中的哪一个到达 Azure Cosmos DB。

  • Request originated from client IP {...} through public internet.
  • Request originated from client VNET through service endpoint.
  • Request originated from client VNET through private endpoint.

解决方案

了解请求预期通过哪个路径到达 Azure Cosmos DB。

  • 如果错误消息显示请求未通过预期路径到达 Azure Cosmos DB,则问题可能与客户端设置有关。 请根据文档再次检查您的客户端设置。
  • 如果请求通过预期路径到达了 Azure Cosmos DB,则系统会阻止请求,因为未为帐户配置源网络标识。 请根据请求到达 Azure Cosmos DB 的路径检查帐户的设置。
    • 公共 Internet:检查帐户的公用网络访问和 IP 范围筛选器配置。
    • 服务终结点:检查帐户的公用网络访问和虚拟网络筛选器配置。
    • 专用终结点:检查帐户的专用终结点配置和客户端的专用 DNS 配置。 存在此问题的原因可能是访问帐户所使用的专用终结点是为其他帐户设置的。

如果最近更新了帐户的防火墙配置,请记住应用更改最多需要 15 分钟。

分区键超过了存储容量

在这种情况下,通常会看到如下错误:

Response status code does not indicate success: Forbidden (403); Substatus: 1014
Partition key reached maximum size of {...} GB

解决方案

此错误表示当前分区设计和工作负载尝试存储超过给定分区键值的允许数据量。 容器中的逻辑分区数没有限制,但每个逻辑分区可以存储的数据大小有限。 可以联系支持人员了解具体情况。

不允许非数据操作

尝试使用 Microsoft Entra ID 标识执行非数据操作时,会出现这种情况。 在这种情况下,通常会看到如下错误:

Operation 'POST' on resource 'calls' is not allowed through Azure Cosmos DB endpoint
Forbidden (403); Substatus: 5300; The given request [PUT ...] cannot be authorized by AAD token in data plane.

解决方案

通过 Azure 资源管理器、Azure 门户、Azure CLI 或 Azure PowerShell 执行该操作。

如果在使用数据层 SDK 方法(例如对数据库或容器执行 create*createIfNotExistsreplacedelete 操作)时,您使用 Microsoft Entra 身份验证收到此错误,则这些方法会失败,因为它们需要控制层访问。 如果您只能通过 Microsoft Entra 基于角色的访问控制(RBAC)访问数据平面,则无法执行控制平面的操作。 将管理平面 SDK 与相应的Microsoft Entra RBAC 角色(如参与者或 Cosmos DB 帐户参与者)配合使用来完成这些任务。

如果使用 Azure Functions Azure Cosmos DB 触发器,请确保触发器的 CreateLeaseContainerIfNotExists 属性未设置为 true。 使用 Microsoft Entra 标识可阻止任何非数据操作,例如创建租用容器。