【发布时间】:2020-02-22 18:26:04
【问题描述】:
我正在执行一个 ARM 模板,该模板从 Azure 资源组部署任务创建 Azure Kubernetes 服务和其他资源。
我的 ARM 模板有 servicePrincipalClientId 和 servicePrincipalClientSecret 敏感数据作为参数,它们用于创建 Azure Kubernetes 集群,只是 right here。 (这个链接是我完整的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 变量,我在我的第一个天蓝色devops 任务中将servicePrincipalClientId 和servicePrincipalClientSecret 变量值转换为安全字符串
-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 DevOps 部署在 Azure 云中。
- 问题是什么?
据此link AKS 需要创建服务主体。
此外,当我们使用
az cli创建 Azure Kubernetes 服务时,服务主体也会自动创建。当我们从 Azure 门户创建 Azure Kubernetes 服务时也会发生同样的情况。
所以我从 Azure Devops 创建一个 Azure Kubernetes 服务,通过资源组部署任务使用任务和服务连接中的现有服务主体凭据执行 ARM 模板。
- 为什么我的服务主体无法识别?
我尝试troubleshoot and solve the problem这个选项,但我担心问题不是服务主体本身,而不是它,我想我需要参考
- servicePrincipalClientId $($secretServicePrincipalClientId) 和-servicePrincipalClientSecret $($secretServicePrincipalClientSecret)
一种特殊的方式。
我该怎么做?
如果有人能指出我正确的方向,我将不胜感激
【问题讨论】:
-
感谢分享解决方案,您可以接受它作为答案,这可能对阅读此主题的其他社区成员有所帮助。meta.stackexchange.com/questions/5234/…
标签: powershell azure-devops azure-active-directory azure-aks service-principal