【问题标题】:Authenticating Azure Web Job with MSI in Azure Data Factory在 Azure 数据工厂中使用 MSI 对 Azure Web 作业进行身份验证
【发布时间】:2019-08-15 16:28:44
【问题描述】:

通过 ADF 中的 Web 活动对 Azure Web 作业进行 MSI 身份验证给出错误 403 - 此 Web 应用程序已停止。 问题是通过基本身份验证调用同一个 Web 作业。

Web 作业作为手动触发托管在 Windows 应用服务上。

在 ADF V2 中,我创建了一个网络活动并提供了以下设置:
URL:https://<web app name>.scm.azurewebsites.net/api/triggeredwebjobs/<webjobname>/run
Method: POST
Headers: NA
Body: {}
Authentication: MSI with resource as https://management.azure.com/
  • 我已在部署 Web 作业的应用服务中启用了 MSI,并在 AAD 中确认了这一点。
  • ADF 上也启用了 MSI,并在 AAD 中确认。
  • 在应用服务中,我在 ACCESS CONTROL 中添加了我的 ADF,角色为 Contributor,并尝试了其他几个角色,例如 Managed Application Operator Role。

注意:在分配角色和启用 MSI 之后,我也重新启动了我的应用服务。

这是 adf 中网络活动的代码:

{
"name": "pipeline1",
"properties": {
    "activities": [
        {
            "name": "Web1",
            "type": "WebActivity",
            "dependsOn": [],
            "policy": {
                "timeout": "7.00:00:00",
                "retry": 0,
                "retryIntervalInSeconds": 30,
                "secureOutput": false,
                "secureInput": false
            },
            "userProperties": [],
            "typeProperties": {
                "url": "https://<webappname>.scm.azurewebsites.net/api/triggeredwebjobs/<webjobname>/run",
                "method": "POST",
                "authentication": {
                    "type": "MSI",
                    "resource": "https://management.azure.com/"
                }
            }
        }
    ],
    "annotations": []
},
"type": "Microsoft.DataFactory/factories/pipelines"
}

我希望身份验证成功并且应该触发 Web 作业,但实际上 Web 应用程序没有通过 MSI 身份验证调用,并且活动失败并输出为 错误 403 - 此 Web 应用程序已停止.

【问题讨论】:

    标签: azure factory webjob azure-managed-identity


    【解决方案1】:

    你需要把url改成https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/triggeredwebjobs/{webJobName}/run?api-version=2016-08-01,就可以正常使用了。

    参考 - Web Apps - Run Triggered Web Job

    测试结果

    【讨论】:

    • 感谢@Joy 的回答。虽然上述更改旨在成功调用具有 MSI 身份验证的 Web 作业,但代价是使用管理 URL 并且管理 URL 的响应与 KUDU API 不同。此外,使用管理 URL,它会创建一个依赖项来传递/硬编码 ADF 中的订阅 ID 和资源组。我当然希望使用 KUDU API 来实现这一点,因为响应对于 ADF 的进一步活动很重要。 KUDU API REFERENCE
    【解决方案2】:

    大多数 MSDN 文档都指出,为了对 SCM 站点进行身份验证,应使用基本身份验证。参考:https://github.com/projectkudu/kudu/wiki/WebJobs-API#invoke-a-triggered-job

    但我发现为了使用 MSI 验证 SCM 站点,资源应该是“https://management.core.windows.net/”而不是“https://management.azure.com”。

    所以要回答上述问题,只需将 Authentication 中的资源更改如下:

    Authentication: MSI with resource as https://management.azure.com/
    

    参考链接:https://github.com/projectkudu/kudu/issues/2957#issuecomment-477890719 说明

    在请求 MSI 令牌时,您必须定义 https://management.core.windows.net/ 作为资源不 https://management.azure.com/.

    我当然相信这可能有助于使用 MSI 身份验证访问 KUDU。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-01
      • 2017-04-08
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 2013-03-31
      相关资源
      最近更新 更多