如何从ARM模板

时间:2017-02-21 08:19:03

标签: azure azure-keyvault azure-pipelines-release-pipeline arm-template azure-resource-manager

重复问题?

我不相信它。如上所述,这是在本地部署中使用我的用户,并且所有(据我所知)权限已授予服务主体和本地也失败的测试用户。

我有一个ARM模板,用于配置和部署Web应用程序,其中一部分是将证书绑定应用于Web应用程序。模板的那部分看起来像这样:

{
  "type": "Microsoft.Web/sites",
  "kind": "api",
  "name": "[parameters('name')]",
  "apiVersion": "2015-08-01",
  "location": "[resourceGroup().location]",
  "properties": {
    "name": "[parameters('name')]",
    "serverFarmId": "[resourceId(parameters('servicePlanGroup'), 'Microsoft.Web/serverFarms', parameters('servicePlanName'))]"
  },
  "resources": [
    {
      "name": "[parameters('certificateName')]",
      "apiVersion": "2014-04-01",
      "type": "Microsoft.Web/certificates",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/Sites', parameters('name'))]"
      ],
      "properties": {
        "keyVaultId": "[parameters('keyVaultId')]",
        "keyVaultSecretName": "[parameters('keyVaultSecretName')]"
      }
    }
   ]
  }

当我从我的PC本地运行它时它工作正常,当我从VSTS运行它时部署失败,看起来像这样:

enter image description here

错误在哪里:

"operationName": {
    "localizedValue": "Microsoft.Web/certificates/write",
    "value": "Microsoft.Web/certificates/write"
},
"properties": {
    "statusCode": "Unauthorized",
    "statusMessage": "{\"error\":{\"code\":\"BadRequest\",\"message\":\"\"}}"
}

SSL证书和KeyVault都为VSTS为此版本运行的服务主体添加了权限。

Release Principal用户对KeyVault中的密钥和机密有Read,List,并且在订阅中是Contributor。我在本地工作的帐户是co-admin

有关需要添加哪些权限的任何想法?

更新

我添加了另一个用户testuser,该用户与服务主体具有相同的权限,现在它在本地失败。我想添加权限并查看哪些有效会有一些试验和错误。

1 个答案:

答案 0 :(得分:1)

这不是一个重复的问题 - 正如所提到的那样,即使设置了权限,它也指向了帐户之间的奇怪权限问题。事实证明,出于某种原因,尽管存在以下问题,共同管理员仍然可以工作 - 可能是ARM /权限基础设施中的潜在错误?

这适用于共同管理员用户,但不适用于其他任何人。

enter image description here

虽然这适用于较低特权的用户/委托人。

enter image description here

请注意架构版本更改。 public class MeButton : Button { List<TextBox> m_DependantOn = new List<Control>(); [Browsable(true)] public List<TextBox> DependantOn { get { return m_DependantOn; } set { RemoveEvents(); m_DependantOn = value; AssignEvents(); } } void RemoveEvents() { foreach(TextBox ctrl in m_DependantOn) ctrl.TextChanged -= WhenTextChanged; } void AssignEvents() { foreach(TextBox.ctrl in m_DependantOn) ctrl.TextChanged += WhenTextChanged; } void WhenTextChanged(object sender, TextChangedEventArgs e) { this.Enabled = true; } } 的原始架构实际上并未包含有关2014-04-01的任何内容,而更新的架构Microsoft.Web/Certificates确实包含此信息。

使用具有与VSTS服务主体相同权限的2015-08-01的本地测试可以正常进行此更改。

对于试图实现SSL绑定的其他人的旁注:

我的示例中的资源位置完全相同。我怀疑如果保险库位于不同的位置,那么它的资源组也可能需要指定为同样的工作 - 我还没有测试过这个理论。