诊断并排查 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 防火墙。
- 服务终结点:配置从虚拟网络访问 Azure Cosmos DB。 考虑一下,如果你希望使用服务终结点,但请求是从公共 Internet 发往 Azure Cosmos DB 的。 这种情况可能表明客户端运行的子网未启用 Azure Cosmos DB 的服务终结点。
- 专用终结点:为 Azure Cosmos DB 帐户配置 Azure 专用链接。 再考虑一下,如果你希望使用专用终结点,但请求是从公共 Internet 发往 Azure Cosmos DB 的。 这种情况可能表明,虚拟机上的域名服务器 (DNS) 未配置为将帐户终结点解析为专用而不是公共 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 标识可阻止任何非数据操作,例如创建租用容器。