诊断并排查 Azure Cosmos DB 的“已禁止”异常的问题
适用范围: NoSQL
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,则问题可能与客户端设置有关。 请根据以下文档说明仔细检查客户端设置。
- 公共 Internet:在 Azure Cosmos DB 中配置 IP 防火墙。
- 服务终结点:配置从虚拟网络 (VNet) 访问 Azure Cosmos DB。 例如,如果你希望使用服务终结点,但请求通过公共 Internet 到达了 Azure Cosmos DB,则可能是客户端运行时所在的子网未启用 Azure Cosmos DB 的服务终结点。
- 专用终结点:为 Azure Cosmos DB 帐户配置 Azure 专用链接。 例如,如果你希望使用专用终结点,但请求通过公共 Internet 到达了 Azure Cosmos DB,则可能是 VM 上的 DNS 未配置为解析专用 IP 的帐户终结点,因此它改为通过帐户的公共 IP 进行传送。
- 如果请求通过预期路径到达了 Azure Cosmos DB,则系统会阻止请求,因为源网络标识未配置为允许用于此帐户。 请根据请求到达 Azure Cosmos DB 的路径检查帐户的设置。
如果最近更新了帐户的防火墙配置,请记住应用更改最多需要 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 执行该操作。
如果使用 Azure Functions Azure Cosmos DB 触发器,请确保触发器的 CreateLeaseContainerIfNotExists
属性未设置为 true
。 使用 Microsoft Entra 标识可阻止任何非数据操作,例如创建租用容器。