如何自动批准来自前门的专用终结点请求?

How do I automatically approve a private endpoint request from front door?

提问人:Don Chambers 提问时间:10/11/2023 最后编辑:Don Chambers 更新时间:10/14/2023 访问量:97

问:

我正在使用基础结构即代码创建应用服务,并使用专用终结点创建前门终结点。我使用二头肌模板执行此操作。

创建后,我必须批准 UI 中的专用终结点链接。

如何自动批准此专用终结点请求? 有没有办法通过 bicep 部署执行此操作?

我使用此二头肌创建带有终结点的源。

resource appService 'Microsoft.Web/sites@2022-09-01' existing = {
  name: applicationName
  scope: resourceGroup(resourceGroup)
}

resource fdOrigin 'Microsoft.Cdn/profiles/originGroups/origins@2021-06-01' = {
  name: 'fd-origin'
  parent: fdOriginGroup
  properties: {
    hostName: '${applicationName}.azurewebsites.net'
    httpPort: 80
    httpsPort: 443
    originHostHeader: '${applicationName}.azurewebsites.net'
    priority: 1
    weight: 1000
    sharedPrivateLinkResource: {
      groupId: 'sites'
      privateLinkLocation: 'EastUS2'
      requestMessage: 'Created by Deployment Pipeline'
      status: 'Approved'
      privateLink: {
        id: appService.id
      }
    }
  }
}

我尝试在sharedPrivateLinkResource部分中将状态设置为已批准,但它没有批准它。它不会引发错误,但链接仍处于“待处理”状态。

我可以用下面的二头肌批准它,但我必须对专用链接名称进行硬编码。我找不到从上面的二头肌获取专用链接名称的方法。

resource privateEndpointConnection 'Microsoft.Web/sites/privateEndpointConnections@2022-09-01' = {
  name: 'MyAppService/ecc50509-75b1-xxxx-92c9-62bebcececf3-13f6a331-6472-4497-bf94-67adda467e22'
  properties: {
      privateLinkServiceConnectionState: {
          status: 'Approved' 
          description: 'Approved by pipeline'
      }
  }
}
azure-bicep azure-front-door azure-private-link

评论

0赞 Jahnavi 10/11/2023
可以使用 PowerShell 命令 Approve-AzPrivateEndpointConnection 批准它。@Don钱伯斯
0赞 Jahnavi 10/11/2023
这对你有用吗?@DonChambers
0赞 Thomas 10/12/2023
你能分享你的BICEP文件吗?您可以在 上设置自动批准。此外,还可以使用此模板批准 privateEndpointConnections learn.microsoft.com/en-us/azure/templates/microsoft.web/sites/...。您只需将状态设置为已批准privateLinkServices
1赞 Don Chambers 10/14/2023
@Thomas,我确实在创建源时定义了端点。创建终结点时,我无法批准它。我已经用二头肌更新了帖子。
1赞 Don Chambers 10/15/2023
@thomas,我在下面添加了它作为答案。

答:

2赞 Thomas 10/14/2023 #1

完成前门部署后,专用终结点连接信息将在 Web 应用属性本身上提供。您可以通过运行以下命令来验证这一点:

az rest --method get --uri <webapp-resource-id>?api-version=2022-09-01

您将看到以下部分:

"privateEndpointConnections": [
  {
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx/resourceGroups/front-door-test/providers/Microsoft.Web/sites/myapp-bckwiz6zgci7k/privateEndpointConnections/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    ...
  }
]

您可以创建一个模块来获取端点名称:

// fetch-private-endpoint.bicep
param appName string
resource app 'Microsoft.Web/sites@2020-06-01' existing = {
  name: appName
}
output name string = last(split(first(app.properties.privateEndpointConnections).id,'/'))

然后使用第二个模块来批准连接:

// approve-private-endpoint.bicep
param appName string
param endPointName string

resource app 'Microsoft.Web/sites@2022-09-01' existing = {
  name: appName
}

resource privateEndpointConnection 'Microsoft.Web/sites/privateEndpointConnections@2022-09-01' = {
  parent: app
  name: endPointName
  properties: {
    privateLinkServiceConnectionState: {
      status: 'Approved'
      description: 'Approved by pipeline'
    }
  }
}

然后,在主模板中,您可以添加以下内容:

// Need to wait for front door deployment to be completed
module fetchPrivateEdnpointName 'modules/fetch-private-endpoint.bicep' = {
  name: 'fetch-private-endpoint'
  dependsOn: [
    fdOrigin
  ]
  params: {
    appName: appName
  }
}

module approvePrivateEndpoint 'modules/approve-private-endpoint.bicep' = {
  name: 'approve-private-endpoint'
  params: {
    appName: appName
    endPointName: fetchPrivateEdnpointName.outputs.name
  }
}