azure (SQL)专用终结点即使在资源(SQL)所有者批准后仍停留在挂起状态“网络资源提供程序拒绝访问”

6vl6ewon  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(97)

简介

我们在过去成功地创建了一个私有端点,以在以下场景中访问Azure SQL Server示例:

  • 交叉订阅(创建专用终结点的订阅 Subscription-A 和拥有Azure SQL Server示例的订阅 Subscription-SQL
  • 跨租户(Subscription-ASubscription-SQL 连接到两个不同的租户)

为此:
1.我们在创建私有Enpoint时指向SQL Server示例的 Resource Id,它看起来像这样(请参见):
/subscriptions//resourceGroups//providers/Microsoft.Sql/servers/
1.然后,Subscription-SQL 的所有者将在 Security > Private endpoint connections 下解析Private Endpoint请求,如本教程所述
1.然后,专用端点的认证者可以看到专用端点的连接状态为 Approved,并且专用端点可以用于与SQL Server示例通信。
我们的问题是
当我们从另一个订阅 Subscription-B 执行完全相同的过程时,在第3步,专用端点的连接状态停留在“挂起”。
步骤2. * 似乎 * 如预期的那样进行,并向批准端点的人提供 Success

故障排除

我们尝试使用Azure CLI批准私有端点连接:

az network private-endpoint-connection approve --resource-group "<AzureSQL-resource-group-name>" --name "<Subscription-B-private-endpoint-name>-<some-guid>" --type Microsoft.Sql/servers --description "Approved" --resource-name "<AzureSQL-server-name>" --debug

字符串
运行4-5分钟后,显示以下错误:

cli.azure.cli.core.util: Response content:
cli.azure.cli.core.util:
{
    "properties": {
        "privateEndpoint": {
            "id": "/subscriptions/<Subscription-B-Guid>/resourceGroups/<Subscription-B-resource-group-name>/providers/Microsoft.Network/privateEndpoints/<Subscription-B-private-endpoint-name>
        },
        "groupIds": [
            "sqlServer"
        ],
        "privateLinkServiceConnectionState": {
            "status": "Approved",
            "description": "Approved",
            "actionsRequired": "None"
        },
        "provisioningState": "Failed"
    },
    "id": "/subscriptions/<Subscription-SQL-Guid>/resourceGroups/<AzureSQL-resource-group-name>/providers/Microsoft.Sql/servers/<AzureSQL-server-name>/privateEndpointConnections/<Subscription-B-private-endpoint-name>-<some-guid>",
    "name": "<Subscription-B-private-endpoint-name>-<some-guid>",
    "type": "Microsoft.Sql/servers/privateEndpointConnections"
}
cli.azure.cli.command_modules.network.private_link_resource_and_endpoint_connections.resource_providers: Cannot query the state of private endpoint connection. Please use `az network private-endpoint-connection show` command to check the status.


观察"provisioningState": "Failed"
然后运行az network private-endpoint-connection show

az network private-endpoint-connection show --resource-group "<AzureSQL-resource-group-name>" --name "<Subscription-B-private-endpoint-name>-<some-guid>" --type Microsoft.Sql/servers --resource-name "<AzureSQL-server-name>" --debug


结果如下:

cli.azure.cli.core.util: Response content:
cli.azure.cli.core.util:
{
    "properties": {
        "privateEndpoint": {
            "id": "/subscriptions/<Subscription-B-Guid>/resourceGroups/<Subscription-B-resource-group-name>/providers/Microsoft.Network/privateEndpoints/<Subscription-B-private-endpoint-name>"
        },
        "groupIds": [
            "sqlServer"
        ],
        "privateLinkServiceConnectionState": {
            "status": "Approved",
            "description": "Approved",
            "actionsRequired": "None"
        },
        "provisioningState": "Failed"
    },
    "id": "/subscriptions/<Subscription-SQL-Guid>/resourceGroups/<AzureSQL-resource-group-name>/providers/Microsoft.Sql/servers/<AzureSQL-resource-group-name>/privateEndpointConnections/<Subscription-B-private-endpoint-name>-<some-guid>",
    "name": "<Subscription-B-private-endpoint-name>-<some-guid>",
    "type": "Microsoft.Sql/servers/privateEndpointConnections"
}
cli.knack.cli: Event: CommandInvoker.OnFilterResult []
{
  "id": "/subscriptions/<Subscription-SQL-Guid>/resourceGroups/<AzureSQL-resource-group-name>/providers/Microsoft.Sql/servers/<AzureSQL-resource-group-name>/privateEndpointConnections/<Subscription-B-private-endpoint-name>-<some-guid>",
  "name": "<Subscription-B-private-endpoint-name>-<some-guid>",
  "properties": {
    "groupIds": [
      "sqlServer"
    ],
    "privateEndpoint": {
      "id": "/subscriptions/<Subscription-B-Guid>/resourceGroups/<Subscription-B-resource-group-name>/providers/Microsoft.Network/privateEndpoints/<Subscription-B-private-endpoint-name>",
      "resourceGroup": "<Subscription-B-resource-group-name>"
    },
    "privateLinkServiceConnectionState": {
      "actionsRequired": "None",
      "description": "Approved",
      "status": "Approved"
    },
    "provisioningState": "Failed"
  },
  "resourceGroup": "<AzureSQL-resource-group-name>",
  "type": "Microsoft.Sql/servers/privateEndpointConnections"
}


这给出了相同的"provisioningState": "Failed",但没有更多。
在那之后,我们意识到在批准端点后4-5分钟,Azure门户的事件记录器中会出现一条错误消息(无论是通过GUI还是CLI完成)。

Azure/Microsoft支持

我们有一个支持票打开与微软支持一个半月无济于事。
我们不得不重现这个问题并多次发送日志,他们会假装在内部检查,但总是带着同样可笑的建议回来,说问题是SQL所有者缺乏对私有端点的权限。
SQL所有者不应该需要对私有端点的权限,甚至在跨租户交叉订阅场景中也不可能实现(因此可以仅使用资源ID创建私有端点)。
最后,我们从支持中得到了以下错误消息:Network resource provider denied access: '%ls',到目前为止,在Google搜索中产生了3个结果(其中没有一个解释错误的含义)

rdrgkggo

rdrgkggo1#

**TL:DR;**您需要在创建专用端点的订阅上注册Microsoft.Sql资源提供程序(以及Microsoft.Network

我们比较了我们的订阅,最终发现我们需要在 Subscription-Bsee docs)上注册Microsoft.Sql资源提供程序
这是一个可以在in the Microsoft docs中找到的东西:
Microsoft.Network和您要部署的特定资源提供程序(例如Microsoft.Sql)必须在订阅级别注册
Azure门户中缺乏反馈可能是一个错误

相关问题