ServicePrincipalNotFound в клиенте Active Directory *** - передача безопасных переменных в Powershell из Azure DevOps

Я выполняю шаблон ARM, который создает службу Azure Kubernetes и другие ресурсы из задачи развертывания группы ресурсов Azure.

Мой шаблон ARM имеет в качестве параметров servicePrincipalClientId и servicePrincipalClientSecret конфиденциальные данные, которые используются для создания кластера Azure Kubernetes, просто прямо здесь. (Эта ссылка - мой полный шаблон ARM)

Итак, я делаю следующее:

  • Я создал servicePrincipalClientId и servicePrincipalClientSecret как переменные конвейера

введите здесь описание изображения

  • Я ранее создал субъект-службу и его данные servicePrincipalClientId и servicePrincipalClientSecret, я использую их для создания подключения к службе, чтобы подключиться к облаку Azure следующим образом:

введите здесь описание изображения

  • У меня есть задача PowerShell для преобразования значений переменных servicePrincipalClientId и servicePrincipalClientSecret в безопасные строки следующим образом:
$env:secretServicePrincipalClientId = ConvertTo-SecureString '$($env:servicePrincipalClientId)' -AsPlainText -Force

$env:secretServicePrincipalClientSecret = ConvertTo-SecureString '$($env:servicePrincipalClientSecret)' -AsPlainText -Force
  • Чтобы развернуть ресурсы, определенные в шаблоне ARM, я создал задачу развертывания группы ресурсов Azure со следующими параметрами:

  • Я использую сервисное соединение, созданное для взаимодействия с моей подпиской.

  • Необходимое действие: создайте или обновите группу ресурсов.
  • Шаблон, путь к шаблону ARM, указанный выше.

  • Переопределить параметры шаблона Я включил сюда все значения параметров шаблона ARM и хочу подчеркнуть, как я ссылаюсь на значения переменных servicePrincipalClientId и servicePrincipalClientSecret:

Здесь я ссылаюсь на переменные secretServicePrincipalClientId и secretServicePrincipalClientSecret, которые я использовал для преобразования значений переменных servicePrincipalClientId и servicePrincipalClientSecret в качестве защищенных строк выше в моей первой задаче azure DevOps.

-servicePrincipalClientId $($secretServicePrincipalClientId) 
-servicePrincipalClientSecret $($secretServicePrincipalClientSecret) 
   .
   .
-serviceCidr "100.0.0.0/16" 
-dnsServiceIP "100.0.0.10" 
-dockerBridgeCidr "172.17.0.1/16" 
   .
   .

Итак, когда я выполняю конвейер выпуска, я получил эту ошибку в задаче развертывания группы ресурсов Azure.

2019-10-26T20:05:13.3246017Z The detected encoding for file 'd:\a\r1\a\Project\Deployments\ARMTemplates\Infrastructure\AzResourceGroupDeploymentApproach\testing.json' is 'utf-8'
2019-10-26T20:05:13.3410693Z Starting Deployment.
2019-10-26T20:05:13.3412081Z Deployment name is AzureDevOpsDeployment


2019-10-26T20:05:18.1729784Z There were errors in your deployment. Error code: InvalidTemplateDeployment.
2019-10-26T20:05:18.1730624Z ##[error]The template deployment 'AzureDevOpsDeployment' is not valid according to the validation procedure. The tracking id is 'xxxxxxx'. See inner errors for details.
2019-10-26T20:05:18.1731223Z ##[error]Details:


2019-10-26T20:05:18.1732062Z ##[error]ServicePrincipalNotFound: Provisioning of resource(s) for container service KubernetesCluster-aks in resource group testing failed. Message: {
  "code": "ServicePrincipalNotFound",
  "message": "Service principal clientID: $($secretServicePrincipalClientId) not found in Active Directory tenant ***, Please see https://aka.ms/aks-sp-help for more details."
 }. Details: 

2019-10-26T20:05:18.1733305Z ##[error]Task failed while creating or updating the template deployment.
2019-10-26T20:05:18.1765718Z ##[section]Finishing: Azure Deployment:Create Or Update Resource Group action on testing

Похоже, субъекта-службы, который я использую для подключения к облаку Azure, не существует, но это неправда. Этот субъект службы существует.

Если я включу прямо в задачу в виде обычного текста значения servicePrincipalClientId и servicePrincipalClientSecret

-servicePrincipalClientId <servicePrincipalClientId-value> 
-servicePrincipalClientSecret <servicePrincipalClientSecret-value> 

Задача группы ресурсов Azure работает, и ресурсы в шаблоне ARM развертываются в облаке Azure из Azure DevOps.

  • В чем проблема?

Согласно этой ссылке AKS нужна услуга основной, который будет создан.

  • Также, когда мы создаем службу Azure Kubernetes с использованием az cli, субъект-служба создается автоматически.

  • То же самое происходит, когда мы создаем службу Azure Kubernetes на портале Azure.

Итак, я создаю службу Azure Kubernetes из Azure Devops, выполняя шаблон ARM через задачу развертывания группы ресурсов, используя существующие учетные данные субъекта-службы в задаче и в соединении службы.

  • Почему мой принципал обслуживания не распознается?

Я пробую эту опцию устранить неполадки и решить проблему, но я боюсь, что проблема не в самом субъекте службы, вместо этого, я думаю, мне нужно было бы сослаться на - servicePrincipalClientId $($secretServicePrincipalClientId) и
-servicePrincipalClientSecret $($secretServicePrincipalClientSecret) особым образом.

Как я могу это сделать?

Если кто-то может указать мне правильное направление, я был бы признателен


person bgarcial    schedule 26.10.2019    source источник
comment
Спасибо за то, что поделились решением, вы можете принять его как ответ. Это может быть полезно для других членов сообщества, читающих эту ветку. meta.stackexchange.com/questions/5234/   -  person Frank Wang-MSFT    schedule 29.10.2019


Ответы (1)


Я решил упростить выполнение шаблона ARM, удалив безопасную задачу, в которой я преобразовывал значения в безопасные строки.

Итак, в конце у меня есть переменные конвейера, определенные обычным образом, с administratorLogin в качестве незашифрованной переменной:

введите здесь описание изображения

И в задаче Развертывание группы ресурсов Azure я выполняю:

  • Шаблон: я выбираю свой шаблон ARM.

  • # P6 #
    # P7 #

Я выбрал этот режим, чтобы иметь представление обо всех ресурсах, созданных на платформе, взятых из шаблона ARM, чтобы получить журнал ресурсов или изменений, внесенных в инфраструктуру из шаблона ARM. Попытка применить инфраструктуру как кодовый подход

  • Параметры переопределения. Я решил включить все значения параметров, которые я получил из шаблона ARM, включая переменные servicePrincipalClientId и servicePrincipalClientSecret следующим образом:
-administratorLogin "my-username" 
-administratorLoginPassword $(administratorLoginPassword)  
-environmentName "dev" 
-location "West Europe" 
-servicePrincipalClientId $(servicePrincipalClientId) 
-servicePrincipalClientSecret $(servicePrincipalClientSecret) 
         .
         .    
-serviceCidr "100.0.0.0/16" 
-dnsServiceIP "100.0.0.10" 
-dockerBridgeCidr "172.17.0.1/16" 
         .
         .

И окончательный результат выполнения был:

введите здесь описание изображения

2019-10-27T15:58:18.3523334Z ##[section]Starting: Azure Deployment:Create Or Update Resource Group action on sentia-assessment-testing
2019-10-27T15:58:18.3886841Z ==============================================================================
2019-10-27T15:58:18.3887055Z Task         : Azure resource group deployment
2019-10-27T15:58:18.3887210Z Description  : Deploy an Azure Resource Manager (ARM) template to a resource group and manage virtual machines
2019-10-27T15:58:18.3887334Z Version      : 2.157.4
2019-10-27T15:58:18.3887438Z Author       : Microsoft Corporation
2019-10-27T15:58:18.3887559Z Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-resource-group-deployment
2019-10-27T15:58:18.3887710Z ==============================================================================


### WE CAN SEE HERE THAT AZ RESOURCE GROUP TASK CREATE THE RESOURCE GROUP
### IF IT DOES NOT EXIST. 

2019-10-27T15:58:19.3677672Z Checking if the following resource group exists: resource-group.
2019-10-27T15:58:19.6898000Z Resource group exists: false.
2019-10-27T15:58:19.6900439Z Creating resource Group: resource-group
2019-10-27T15:58:20.1586233Z Resource Group created successfully.
2019-10-27T15:58:20.1589727Z Creating deployment parameters.

############### THIS IS THE ARM TEMPLATE EXECUTED ##################

2019-10-27T15:58:20.1681560Z The detected encoding for file 'd:\a\r1\a\Github\Deployments\ARMTemplates\Infrastructure\AzResourceGroupDeploymentApproach\testing.json' is 'utf-8'

############### THIS IS THE ARM TEMPLATE EXECUTED END ##################

2019-10-27T15:58:20.1864884Z Starting Deployment.
2019-10-27T15:58:20.1866605Z Deployment name is AzureDevOpsDeployment_91
2019-10-27T16:13:20.7707558Z Successfully deployed the template.
2019-10-27T16:13:20.7834983Z ##[section]Finishing: Azure Deployment:Create Or Update Resource Group action on resource-group

Это хороший и более простой подход, но, возможно, идеальным сценарием могло бы быть использование упомянутых выше переменных в качестве защищенных строк и совместное использование их значений для различных задач в конвейере выпуска.

person bgarcial    schedule 27.10.2019