首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Azure devops平台管道生成客户端id和密钥

Azure devops平台管道生成客户端id和密钥
EN

Stack Overflow用户
提问于 2019-03-27 19:38:45
回答 3查看 1.8K关注 0票数 0

我正在使用这个平台清单在Azure上部署AKS。我可以通过命令行很好地完成这项工作,它可以工作,因为我在我的机器上配置了azure cli来生成客户端id和密钥。

https://github.com/anubhavmishra/terraform-azurerm-aks

但是,我现在正在Azure Devops管道上构建此应用程序

到目前为止,我已经成功地在Azure上运行了terraform init并规划了后端存储,使用Azure Devops并使用此扩展

https://marketplace.visualstudio.com/items?itemName=charleszipp.azure-pipelines-tasks-terraform

问:如何在Azure devops管道上获取客户端id和密钥,并将其设置为terraform的环境变量?我尝试在管道中创建一个bash az命令

代码语言:javascript
运行
复制
> az ad sp create-for-rbac --role="Contributor"
> --scopes="/subscriptions/YOUR_SUBSCRIPTION_ID"

但是失败了,并出现此错误

代码语言:javascript
运行
复制
> 2019-03-27T10:41:58.1042923Z 
2019-03-27T10:41:58.1055624Z Setting AZURE_CONFIG_DIR env variable to: /home/vsts/work/_temp/.azclitask
2019-03-27T10:41:58.1060006Z Setting active cloud to: AzureCloud
2019-03-27T10:41:58.1069887Z [command]/usr/bin/az cloud set -n AzureCloud
2019-03-27T10:41:58.9004429Z [command]/usr/bin/az login --service-principal -u *** -p *** --tenant ***
2019-03-27T10:42:00.0695154Z [
2019-03-27T10:42:00.0696915Z   {
2019-03-27T10:42:00.0697522Z     "cloudName": "AzureCloud",
2019-03-27T10:42:00.0698958Z     "id": "88bfee03-551c-4ed3-98b0-be68aee330bb",
2019-03-27T10:42:00.0704752Z     "isDefault": true,
2019-03-27T10:42:00.0705381Z     "name": "Visual Studio Enterprise",
2019-03-27T10:42:00.0706362Z     "state": "Enabled",
2019-03-27T10:42:00.0707434Z     "tenantId": "***",
2019-03-27T10:42:00.0716107Z     "user": {
2019-03-27T10:42:00.0717485Z       "name": "***",
2019-03-27T10:42:00.0718161Z       "type": "servicePrincipal"
2019-03-27T10:42:00.0718675Z     }
2019-03-27T10:42:00.0719185Z   }
2019-03-27T10:42:00.0719831Z ]
2019-03-27T10:42:00.0728173Z [command]/usr/bin/az account set --subscription 88bfee03-551c-4ed3-98b0-be68aee330bb
2019-03-27T10:42:00.8569816Z [command]/bin/bash /home/vsts/work/_temp/azureclitaskscript1553683312219.sh
2019-03-27T10:42:02.4431342Z ERROR: Directory permission is needed for the current user to register the application. For how to configure, please refer 'https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal'. Original error: Insufficient privileges to complete the operation.
2019-03-27T10:42:02.5271752Z [command]/usr/bin/az account clear
2019-03-27T10:42:03.3092558Z ##[error]Script failed with error: Error: /bin/bash failed with return code: 1
2019-03-27T10:42:03.3108490Z ##[section]Finishing: Azure CLI 
EN

回答 3

Stack Overflow用户

发布于 2019-03-28 00:07:23

下面是我如何使用Azure Pipeline来做这件事。

在管道

  • ARM_CLIENT_ID
  • ARM_CLIENT_SECRET
  • ARM_SUBSCRIPTION_ID
  • ARM_TENANT_ID

中为Terraform.

  • Create创建
  1. 服务主体以下变量

如果您选择将ARM_CLIENT_SECRET作为秘密存储在Azure DevOps中,您将需要在任务的环境变量部分下执行以下操作来解密它,以便terraform可以读取它。

票数 1
EN

Stack Overflow用户

发布于 2019-03-27 19:43:15

您只需授予您的服务连接权限即可创建服务主体。但我一般不建议这样做,只要预先创建一个服务主体并在您的管道中使用它即可。在每次运行时创建一个新的服务主体似乎是多余的。

您可以使用build\release变量,并使用客户端id\secret填充这些变量

票数 0
EN

Stack Overflow用户

发布于 2019-12-21 12:55:15

在post https://medium.com/@maninder.bindra/creating-a-single-azure-devops-yaml-pipeline-to-provision-multiple-environments-using-terraform-e6d05343cae2中定义的方法?也可以考虑。这里的Keyvault任务用于从Azure Vault获取秘密(包括terraform后端访问秘密以及aks sp秘密):

代码语言:javascript
运行
复制
#KEY VAULT TASK
- task: AzureKeyVault@1
  inputs:
    azureSubscription: '$(environment)-sp'
    KeyVaultName: '$(environment)-pipeline-secrets-kv'
    SecretsFilter: 'tf-sp-id,tf-sp-secret,tf-tenant-id,tf-subscription-id,tf-backend-sa-access-key,aks-sp-id,aks-sp-secret'
  displayName: 'Get key vault secrets as pipeline variables'

然后,您可以将这些秘密用作管道的其余部分中的变量。FOr实例aks-sp-id可以称为$(aks-sp-id)。因此,bash/azure-cli任务可以类似于

代码语言:javascript
运行
复制
# AZ LOGIN USING TERRAFORM SERVICE PRINCIPAL
- script: |
    az login --service-principal -u $(tf-sp-id) -p $(tf-sp-secret) --tenant $(tf-tenant-id)
    cd $(System.DefaultWorkingDirectory)/tf-infra-provision

紧随其后的是terraform init和plan (如下所示的plan,完整的管道细节见post )

代码语言:javascript
运行
复制
# TERRAFORM PLAN    
    echo '#######Terraform Plan########'
    terraform plan -var-file=./tf-vars/$(tfvarsFile) -var="client_id=$(tf-sp-id)" -var="client_secret=$(tf-sp-secret)" -var="tenant_id=$(tf-tenant-id)" -var="subscription_id=$(tf-subscription-id)" -var="aks_sp_id=$(aks-sp-id)" -var="aks_sp_secret=$(aks-sp-secret)" -out="out.plan"

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55376295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档