Azure Cosmos DB 数据资源管理器无法连接

有时,Azure Cosmos DB 数据资源管理器无法连接到帐户或针对资源或项执行操作。 本文介绍此问题的潜在原因和解决方案。

重要

Azure Cosmos DB 数据资源管理器不适用于适用于 PostgreSQL 的 API 或 vCore API。

先决条件

现有的 Azure Cosmos DB for NoSQL、MongoDB RU、Apache Cassandra、Apache Gremlin 或表帐户

现象

即使启用“允许从 Azure 门户访问”选项后,也无法连接到数据资源管理器。

原因

即使在配置正确的基于角色的访问控制和门户权限之后,也必须根据所选 API 配置额外的网络访问要求。

  • 某些服务(如 API for NoSQL、用于 Apache Gremlin 的 API 和用于表的 API)使用客户端 JavaScript SDK 来执行操作,并需要一组解决方案。

  • 其他服务(如用于 MongoDB RU 的 API 和 Apache Cassandra 的 API)使用特定于协议的中间件,并需要替代解决方案。

适用于 NoSQL、Apache Gremlin 或 Table 的 API 的解决方案

数据库、容器、图形和表(控制平面)操作是通过使用 Azure Cosmos DB 资源提供程序调用 Azure 资源管理器控制平面来执行的。 网络配置不会影响这些操作。

项(数据平面)操作是在浏览器上下文中使用 JavaScript SDK 执行的。 当前正在使用的设备必须具有对帐户的直接网络访问权限。

  • 对于配置有 公共访问(所有网络)的帐户,数据平面操作不应有任何与网络相关的连接问题。

  • 对于配置有 公共访问的帐户(所选网络),必须创建防火墙规则,以允许从当前设备访问帐户。 Azure 门户服务页面中的网络功能具有“添加当前 IP”(...)超链接,可以自动添加 IP 地址。

  • 如果帐户没有防火墙规则,则数据资源管理器会引发错误,该错误可在通知中观察到数据资源管理器。 此错误消息包含类似于以下示例的文本:

    API 错误
    NoSQL Request originated from IP XXX.XXX.XXX.XXX through public internet. This is blocked by your Cosmos DB account firewall settings.
    Apache Gremlin Failure in submitting query: g.V(): Request originated from IP XXX.XXX.XXX.XXX through public internet. This is blocked by your Cosmos DB account firewall settings.
    Error while refreshing databases: Request originated from IP XXX.XXX.XXX.XXX through public internet. This is blocked by your Cosmos DB account firewall settings.
  • 对于配置为 禁用公共访问的帐户,设备必须连接到连接到帐户的虚拟网络,才能运行数据平面操作。

用于 MongoDB RU 或 Apache Cassandra 的 API 的解决方案

分别查看控制平面和数据平面解决方案。

数据库、密钥空间和集合(控制平面)操作通过使用 Azure Cosmos DB 资源提供程序调用 Azure 资源管理器控制平面来执行。 网络配置不会影响这些操作。

项(数据平面)操作使用 API 中间件中的代理服务执行。 此服务有助于在项操作和查询中使用服务本机(MongoDB、Cassandra)协议。 代理服务需要对帐户进行直接网络访问。

  • 对于配置有 公共访问(所有网络)的帐户,数据平面操作不应有任何与网络相关的连接问题。

  • 对于配置有公共访问的帐户(所选网络),必须在Azure 门户的服务页面的网络功能中选择允许从 Azure 门户访问”。 此选项添加包含中间件服务的一系列 IP 地址。 无需添加当前设备的 IP 地址。

  • 如果帐户没有防火墙规则,则数据资源管理器会引发可在浏览器开发人员工具中观察到的错误。 此错误消息包含中间件服务生成的泛型 Error querying documentsFailed to establish connection with cassandra node 消息。 扩展的错误消息包含在计算网关日志中,类似于以下示例:

    Request originated from IP XXX.XXX.XXX.XXX through public internet. This is blocked by your Cosmos DB account firewall settings.