針對 Azure Cosmos DB 禁止的例外狀況進行診斷和疑難排解
適用於:NoSQL
HTTP 狀態碼 403 表示禁止要求完成。
防火牆封鎖要求
資料平面要求可透過下列三個路徑傳送至 Azure Cosmos DB。
- 公用網際網路 (IPv4)
- 服務端點
- 私人端點
當數據平面要求遭到 403 禁止封鎖時,錯誤訊息會指定透過前三個路徑,要求來到 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 中設定 IP 防火牆。
- 服務端點: 設定從虛擬網路存取 Azure Cosmos DB。 請考慮您是否預期使用服務端點,但要求來自公用因特網的 Azure Cosmos DB。 這種情況可能表示客戶端執行中的子網未啟用 Azure Cosmos DB 的服務端點。
- 私人端點:設定 Azure Cosmos DB 帳戶的 Azure Private Link。 也請考慮您是否預期使用私人端點,但要求來自公用因特網的 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 身分識別來執行非數據作業時,就會發生此案例。 在此案例中,通常會看到類似此處的錯誤:
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 Resource Manager、Azure 入口網站、Azure CLI 或 Azure PowerShell 來執行此作業。
如果您使用 Azure Functions Azure Cosmos DB 觸發程式,請確定 CreateLeaseContainerIfNotExists
觸發程式的 屬性未設定為 true
。 使用 Microsoft Entra 身分識別會封鎖任何非數據作業,例如建立租用容器。