使用CLI为服务应用程序创建Azure服务主体

使用CLI为服务应用程序创建Azure服务主体,azure,azure-devops,azure-web-app-service,Azure,Azure Devops,Azure Web App Service,我正在尝试创建Azure DevOps服务端点以连接到Azure资源管理器并将我的应用部署到应用服务中 当我转到Azure DevOps>Project Properties并使用UI自动对话框创建服务端点时,它工作正常,我的应用程序可以从yaml管道部署到应用程序服务,但是,当我尝试通过Azure CLI复制它时,它不工作,构建无法部署,抱怨服务主体 这是我的代码: az_account=$(az account show) az_subscription_id=$(echo $az_acco

我正在尝试创建Azure DevOps服务端点以连接到Azure资源管理器并将我的应用部署到应用服务中

当我转到Azure DevOps>Project Properties并使用UI自动对话框创建服务端点时,它工作正常,我的应用程序可以从yaml管道部署到应用程序服务,但是,当我尝试通过Azure CLI复制它时,它不工作,构建无法部署,抱怨服务主体

这是我的代码:

az_account=$(az account show)
az_subscription_id=$(echo $az_account |jq -r '.id')
az_subscription_name=$(echo $az_account |jq -r '.name')
az_tenant_id=$(echo $az_account |jq -r '.tenantId')
az_service_principal=$(az ad sp create-for-rbac -n "my-app-service-principal")
az_service_principal_password=$(echo $az_service_principal|jq -r '.password')
az_service_principal_id=$(az ad sp list --all | jq -c '.[] | select( .appDisplayName | contains("my-app-service-principal"))'| jq -r '.objectId')
export AZURE_DEVOPS_EXT_AZURE_RM_SERVICE_PRINCIPAL_KEY=$az_service_principal_password
az devops service-endpoint azurerm create --azure-rm-service-principal-id $az_service_principal_id --azure-rm-subscription-id $az_subscription_id --azure-rm-subscription-name $az_subscription_name --azure-rm-tenant-id $az_tenant_id --name my-app-service-endpoint
我应该如何使用Azure CLI以编程方式创建此服务Enpoint

已更新Azure DevOps错误:

您的脚本只是创建服务主体,但没有向SP授予任何权限。 我会添加一些类似的行来创建一个资源组和它的作用域权限

az_service_principal_appid = $(echo $az_service_principal|jq -r '.appId')
az group create --name myrg --location westeurope
az role assignment create --role Contributor --assignee $az_service_principal_appid --resource-group myrg

显然,您需要考虑如何安排您的资源和SP:根据您的体系结构,您可能需要这两者中的许多。

运行构建时会出现什么错误?添加到opIt中不起作用。如果我转到服务端点和azure devops并按Verify connection,它会显示:无法使用服务主体客户端ID获取Json Web令牌JWT。异常消息:AADSTS700016:在目录“0cf92556-5b1c-405b-99cf-XXXXXXXXX”中找不到标识符为“a9fd87a4-c0b5-46f6-b4a1-XXXXXXXXX”的应用程序。如果应用程序尚未由租户的管理员安装或租户中的任何用户同意,则可能发生这种情况。您可能向错误的租户发送了身份验证请求。跟踪ID:0abb8f63-8e9c-416c-b084-XXXXXXXXX相关ID:b6f0445e-5718-40cb-8594-XXXXXXXXX时间戳:2019-10-03 08:21:51Z只是为了让您知道资源组服务应用程序服务计划等已与terraform一起部署。唯一的问题是自动化azure devops服务端点创建和/或服务主体。如果我使用ui和自动对话框从azure devops服务端点页面部署这两个东西,那么其余的都可以正常工作。在目录中找不到标识符为的错误应用程序在我看来,您传递的id是错误的,它们都是相似的,很遗憾我更新了我的答案,以防它有所帮助。顺便说一句,我经常将Terraform与管道结合使用,我建议使用Azure Portal作为检查ID和权限的调试工具