output/20260723_081532/govviz/ALZ_20260723_081601/Enterprise-Scale/src/resources/Microsoft.Authorization/policyDefinitions/Deny-MachineLearning-ComputeCluster-Scale.json

{
  "name": "Deny-MachineLearning-ComputeCluster-Scale",
  "type": "Microsoft.Authorization/policyDefinitions",
  "apiVersion": "2021-06-01",
  "scope": null,
  "properties": {
    "policyType": "Custom",
    "mode": "Indexed",
    "displayName": "Enforce scale settings for Azure Machine Learning compute clusters",
    "description": "Enforce scale settings for Azure Machine Learning compute clusters.",
    "metadata": {
      "version": "1.0.0",
      "category": "Budget",
      "source": "https://github.com/Azure/Enterprise-Scale/",
      "alzCloudEnvironments": [
        "AzureCloud"
      ]
    },
    "parameters": {
      "effect": {
        "type": "String",
        "metadata": {
          "displayName": "Effect",
          "description": "Enable or disable the execution of the policy"
        },
        "allowedValues": [
          "Audit",
          "Disabled",
          "Deny"
        ],
        "defaultValue": "Deny"
      },
      "maxNodeCount": {
        "type": "Integer",
        "metadata": {
          "displayName": "Maximum Node Count",
          "description": "Specifies the maximum node count of AML Clusters"
        },
        "defaultValue": 10
      },
      "minNodeCount": {
        "type": "Integer",
        "metadata": {
          "displayName": "Minimum Node Count",
          "description": "Specifies the minimum node count of AML Clusters"
        },
        "defaultValue": 0
      },
      "maxNodeIdleTimeInSecondsBeforeScaleDown": {
        "type": "Integer",
        "metadata": {
          "displayName": "Maximum Node Idle Time in Seconds Before Scaledown",
          "description": "Specifies the maximum node idle time in seconds before scaledown"
        },
        "defaultValue": 900
      }
    },
    "policyRule": {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.MachineLearningServices/workspaces/computes"
          },
          {
            "field": "Microsoft.MachineLearningServices/workspaces/computes/computeType",
            "equals": "AmlCompute"
          },
          {
            "anyOf": [
              {
                "field": "Microsoft.MachineLearningServices/workspaces/computes/scaleSettings.maxNodeCount",
                "greater": "[[parameters('maxNodeCount')]"
              },
              {
                "field": "Microsoft.MachineLearningServices/workspaces/computes/scaleSettings.minNodeCount",
                "greater": "[[parameters('minNodeCount')]"
              },
              {
                "value": "[[int(last(split(replace(replace(replace(replace(replace(replace(replace(field('Microsoft.MachineLearningServices/workspaces/computes/scaleSettings.nodeIdleTimeBeforeScaleDown'), 'P', '/'), 'Y', '/'), 'M', '/'), 'D', '/'), 'T', '/'), 'H', '/'), 'S', ''), '/')))]",
                "greater": "[[parameters('maxNodeIdleTimeInSecondsBeforeScaleDown')]"
              }
            ]
          }
        ]
      },
      "then": {
        "effect": "[[parameters('effect')]"
      }
    }
  }
}