azure 如何检查ARM模板变量/参数中的多个条件

3z6pesqy  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(92)

我需要修改ARM模板,以便用户在部署过程中有3个选项可以选择参数,每个选项用于特定的Azure RBAC内置角色(所有者,贡献者或读者)。然后,我需要将每个角色与各自的角色ID相关联,这在Azure中是唯一的。我想避免用户必须从roleID中选择,因为它们显然没有描述性,但是在这种情况下,分配必须由roleID完成,仅仅角色定义的名称不足以直接进行分配。
下面的模板被简化了,只有我需要实现的逻辑,但是它只检查参数(Contributor)的一个值。所以我需要做同样的,但为3个不同的值。如果只有2个可能的值,我可以将“json('null')”更改为其他RoleID,但如果有3个值,则会变得更加复杂。

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/subscriptionDeploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "exampleParameter": {
            "defaultValue": "Contributor",
            "allowedValues": [
                "Contributor",
                "Owner",
                "Reader"
            ],
            "type": "String",
            "metadata": {
                "description": "Test parameter"
            }
        }
    },
    "variables": {
        "exampleVariable": "[if(equals(parameters('exampleParameter'), 'Contributor'), 'ContributorRoleID', json('null'))]"
    },
    "resources": [],
    "outputs": {
        "exampleOutput": {
            "type": "String",
            "value": "[variables('exampleVariable')]"
        }
    }
}

字符串
我从这个question中得到了一些引用,但我真的没有理解这个例子,因为即使它使用了OR条件,我也没有注意到如何传递true和false求值的值,就像上面的例子中的单个值一样。然后,我尝试了不同的方法来调整它,以满足我的需要,但我真的找不到一种方法来解决这个问题,因为我找不到任何有效的sintaxe使用这个相同的逻辑与多个值。
我很抱歉为此创造了一个新的主题,但我不能在原来的问题上发表评论。
注:如果有其他解决方案可以达到同样的效果,请随时提出建议。我的问题是关于变量/参数中的条件,因为这是我能想象到的唯一关联方式,但我不是ARM模板方面的Maven,也许我的用例有另一个简单的解决方案。
如果有人能帮我我很感激。谢谢你,谢谢

ojsjcaue

ojsjcaue1#

我需要将每个角色关联到各自的角色ID,这些角色ID在Azure中是唯一的。

  • 在ARM模板中,无法直接为特定资源分配**(基于角色的访问控制)**角色。Azure RBAC角色只能在管理组、订阅或资源组级别分配,而不能直接分配给虚拟网络等单个资源。
  • 若要为特定资源分配角色,您需要使用Azure策略,Azure策略允许您在资源上配置类似RBAC角色分配。

创建不应直接分配任何RBAC角色的资源。


的数据
创建一个Azure策略定义,以根据选定的角色名称和角色ID分配RBAC角色分配。

{
  "properties": {
    "displayName": "Enforce RBAC Role Assignment",
    "description": "Enforce RBAC role assignment based on the selected role name.",
    "mode": "Indexed",
    "policyRule": {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Authorization/roleAssignments"
          },
          {
            "field": "Microsoft.Authorization/roleAssignments/principalId",
            "equals": "[field('Microsoft.Network/virtualNetworks/identity/principalId')]"
          }
        ]
      },
      "then": {
        "effect": "DeployIfNotExists",
        "details": {
          "type": "Microsoft.Authorization/roleAssignments",
          "roleDefinitionId": "[variables('selectedRoleID')]",
          "principalId": "[field('Microsoft.Network/virtualNetworks/identity/principalId')]",
          "scope": "[field('Microsoft.Network/virtualNetworks/id')]"
        }
      }
    },
    "parameters": {}
  }
}

字符串
下面是用于处理角色名称与其各自的角色ID之间的相关性的模板。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/subscriptionDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "exampleParameter": {
      "defaultValue": "Contributor",
      "allowedValues": ["Contributor", "Owner", "Reader"],
      "type": "String",
      "metadata": {
        "description": "Select the role for the deployment."
      }
    }
  },
  "variables": {
    "roleMappings": {
      "Contributor": "b24988ac-6180-4783-ad44-20f7382dd24c", // Duplicate Contributor Role ID
      "Owner": "8s7hf657-a8ff-443c-a75c-2fe8c4cjve635",       // Duplicate Owner Role ID
      "Reader": "acvg80a7-3385-48ef-bd02-f685gda81ae7"      // Duplicate Reader Role ID
    },
    "selectedRoleID": "[variables('roleMappings')[parameters('exampleParameter')]]"
  },
  "resources": [],
  "outputs": {
    "exampleOutput": {
      "type": "String",
      "value": "[variables('selectedRoleID')]"
    }
  }
}

参数根据要求。


  • 在部署过程中,用户可以选择角色名称(Owner、Contributor或Reader)。

您需要将Azure策略定义与Azure策略的内置策略规则类型一起使用,特别是“基于角色的访问控制(RBAC)角色分配”策略。

相关问题