如何使用 Azure AD 身份验证在 Azure Web 应用程序中流式传输 kudu 日志?

ins*_*itu 2 azure azure-web-app-service

我正在尝试使用 kudu 流端点来流式传输 Azure Web 应用程序公开的日志,例如。curl https://my-webapp.scm.azurewebsites.net/api/logstream。当然,这不起作用并返回 401,因为我没有通过身份验证。我在网上找到了有关如何使用 BasicAuth 进行身份验证的参考资料(例如https://github.com/projectkudu/kudu/wiki/REST-API),但不使用 Azure AD 提供令牌。如果我尝试使用身份验证,az account get-access-token --resource=...我不知道要传递什么资源:使用 web 应用程序的资源 URL 不起作用。

我希望能够做的只是:

curl -H "Authorization: Bearer $(... get somehow token ...)" https://my-webapp.scm.azurewebsites.net/logs/streaming
Run Code Online (Sandbox Code Playgroud)

并获取我的网络应用程序的实时日志流。

Joy*_*ang 7

恐怕你不能,你可以使用访问令牌调用受 Azure AD 保护的 API,但 Kudu API 不受 Azure AD 保护,如你所知,它使用基本身份验证。

在您的情况下,如果您不想在命令中公开 Web 应用程序的发布配置文件(用户名和密码),我的解决方法是使用 Azure CLI 直接获取它们并将它们传递给命令curl。因此,即使有人获得了该脚本,未经您的网络应用程序许可,他也无法访问日志流。

username=$(az webapp deployment list-publishing-credentials --name joywebapp --resource-group <grou-name> --query publishingUserName -o tsv)
password=$(az webapp deployment list-publishing-credentials --name joywebapp --resource-group <grou-name> --query publishingPassword -o tsv)  
curl -u "$username:$password" https://joywebapp.scm.azurewebsites.net/api/logstream
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述