简介
我们在过去成功地创建了一个私有端点,以在以下场景中访问Azure SQL Server示例:
- 交叉订阅(创建专用终结点的订阅 Subscription-A 和拥有Azure SQL Server示例的订阅 Subscription-SQL)
- 跨租户(Subscription-A 和 Subscription-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个结果(其中没有一个解释错误的含义)
1条答案
按热度按时间rdrgkggo1#
**TL:DR;**您需要在创建专用端点的订阅上注册
Microsoft.Sql
资源提供程序(以及Microsoft.Network
)我们比较了我们的订阅,最终发现我们需要在 Subscription-B(see docs)上注册
Microsoft.Sql
资源提供程序这是一个可以在in the Microsoft docs中找到的东西:
Microsoft.Network和您要部署的特定资源提供程序(例如Microsoft.Sql)必须在订阅级别注册
Azure门户中缺乏反馈可能是一个错误