将服务主要客户ID和密码传递给ARM模板

时间:2019-08-20 08:12:37

标签: azure azure-active-directory azure-keyvault arm-template service-principal

我有一个ARM模板,该模板创建一个Azure密钥保管库,然后创建一个Azure Kubernetes服务。问题在于,Azure Kubernetes服务需要在我首次创建时传递的服务原则的客户端ID和客户端密钥。因此,我运行application.json文件中没有kubernetes_servicePrincipalClientIdkubernetes_servicePrincipalClientSecret参数的production.parameters.json

application.json

{
  "comments": "Kubernetes Service Principal Client ID",
  "type": "Microsoft.KeyVault/vaults/secrets",
  "name": "[concat(parameters('key_vault_name'), '/KubernetesServicePrincipalClientId')]",
  "apiVersion": "2018-02-14",
  "properties": {
    "contentType": "text/plain",
    "value": "[parameters('kubernetes_servicePrincipalClientId')]"
  }
},
{
  "comments": "Kubernetes Service Principal Client Secret",
  "type": "Microsoft.KeyVault/vaults/secrets",
  "name": "[concat(parameters('key_vault_name'), '/KubernetesServicePrincipalClientSecret')]",
  "apiVersion": "2018-02-14",
  "properties": {
    "contentType": "text/plain",
    "value": "[parameters('kubernetes_servicePrincipalClientSecret')]"
  }
}

第二次运行ARM模板时,将以下几行添加到我的production.parameters.json文件中,以便从我第一次运行存储库的Azure Key Vault中检索客户端ID和客户端密钥。 ARM模板。

production.parameters.json

"kubernetes_servicePrincipalClientId": {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/[Subscription Id]/resourcegroups/[Resource Group Name]/providers/Microsoft.KeyVault/vaults/[Vault Name]"
    },
    "secretName": "KubernetesServicePrincipalClientId"
  }
},
"kubernetes_servicePrincipalClientSecret": {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/[Subscription Id]/resourcegroups/[Resource Group Name]/providers/Microsoft.KeyVault/vaults/[Vault Name]"
    },
    "secretName": "KubernetesServicePrincipalClientSecret"
  }
}

不幸的是,您似乎无法在ARM模板中创建服务主体。是否有更好的方法来自动配置所有这些,以便无论我是第一次还是第二次运行模板,都不必执行任何手动步骤?

1 个答案:

答案 0 :(得分:3)

不,这些API不会公开,无法使用ARM模板管理服务主体。但是,您可以创建一个脚本来配置服务主体并将其详细信息传递给arm模板,或者可以使用某种工具为您处理所有这些工作(pulumi \ terraform \ ansible)