Wilfried Woivré

Cloud Solution Architect - MVP Microsoft Azure

Azure Policy - L'enfer des versions d'API

Categories : Azure Azure   Policy Policy


Azure est un produit qui évolue tous les jours, un peu comme les besoins en sécurité des utilisateurs. Malheureusement ces évolutions sont tellement rapide qu’il est parfois compliqué de toute les partager, mais aussi de les suivre.

L’interaction avec Azure se fait toujours via des REST API qui sont bien visible si vous faîtes de l’ARM ou du bicep, et malheureusement très souvent ignoré si vous utilisez Azure uniquement via AzCli ou Azure Powershell.

Prenons l’exemple d’EventHub avec les versions d’api 2017-04-01 et 2024-01-01, on peut voir qu’un bon nombre de propriété se sont ajouter au fur et à mesure du temps.

2024-01-01 Disponible en 2017-04-01
id oui
identity.principalId non
identity.tenantId non
identity.type non
identity.userAssignedIdentities non
location oui
name oui
properties.alternateName non
properties.clusterArmId non
properties.createdAt oui
properties.disableLocalAuth non
properties.encryption.keySource non
properties.encryption.keyVaultProperties non
properties.encryption.requireInfrastructureEncryption non
properties.isAutoInflateEnabled oui
properties.kafkaEnabled oui
properties.maximumThroughputUnits oui
properties.metricId oui
properties.minimumTlsVersion non
properties.privateEndpointConnections non
properties.provisioningState oui
properties.publicNetworkAccess non
properties.serviceBusEndpoint oui
properties.status non
properties.updatedAt oui
properties.zoneRedundant non
sku oui
systemData non
tags oui
type oui

Je n’ai qu’une chose à dire

alt text

Si vous avez lu mon précédent article sur Azure Policy vous êtes en droit de vous demander comment cela marche-t-il avec la propriété minimumTLSVersion. Et si vous ne vous posez pas la question, on va quand même y répondre ici.

On va donc créer 2 resources groups le premier avec deux policy Deny et Append comme suit:

Deny

{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.EventHub/namespaces"
      },
      {
        "field": "Microsoft.EventHub/namespaces/minimumTlsVersion",
        "exists": true
      },
      {
        "field": "Microsoft.EventHub/namespaces/minimumTlsVersion",
        "notEquals": "1.2"
      }
    ]
  },
  "then": {
    "effect": "deny"
  }
}

Append:

{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.EventHub/namespaces"
      },
      {
        "field": "Microsoft.EventHub/namespaces/minimumTlsVersion",
        "exists": false
      }
    ]
  },
  "then": {
    "effect": "append",
    "details": [
      {
        "field": "Microsoft.EventHub/namespaces/minimumTlsVersion",
        "value": "1.2"
      }
    ]
  }
}

On va ensuite déployer notre bicep suivant avec la plus vieille version de l’API

resource eventhub 'Microsoft.EventHub/namespaces@2017-04-01' = {
  name: 'wwo${deployment().name}${uniqueString(resourceGroup().id)}'
  location: resourceGroup().location
  sku: {
    name: 'Basic'
    capacity: 1
  }
}

Cela nous donne donc cela:

New-AzrRsourceGroupDeployment -name test -ResourceGroupName eventhub-denyappendpolicy-rg -TemplateFile .\main.bicep | Out-Null
(Get-AzEventHubNamespace -ResourceGroupName eventhub-denyappendpolicy-rg).minimumTLSVersion

1.0

On peut voir ici que malgré nos Azure Policy, notre Event Hub est toujours avec un TLS minimal en 1.0. Mais bon selon Azure tout s’est bien passé lors du déploiement

alt text

Maintenant on va tenter de faire la même chose avec la policy Modify suivante:

{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.EventHub/namespaces"
      }
    ]
  },
  "then": {
    "effect": "modify",
    "details": {
      "operations": [
        {
          "operation": "addOrReplace",
          "field": "Microsoft.EventHub/namespaces/minimumTlsVersion",
          "value": "1.2"
        }
      ],
      "roleDefinitionIds": [
        "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
      ]
    }
  }
}

On lance donc la même commande powershell

New-AzResourceGroupDeploymen -name test -ResourceGroupName eventhub-modifypolicy-rg -TemplateFile .\main.bicep | Out-Null (Get-AzEventHubNamespace -ResourceGroupName eventhub-modifypolicy-rg).minimumTLSVersion

New-AzResourceGroupDeployment: 3:26:51 PM - Error: Code=InvalidTemplateDeployment; Message=The template deployment failed because of policy violation. Please see details for more information.
New-AzResourceGroupDeployment: 3:26:51 PM - Error: Code=NonModifiablePolicyAlias; Message=The aliases: 'Microsoft.EventHub/namespaces/minimumTlsVersion' are not modifiable in requests using API version: '2017-04-01'. This can happen in requests using API versions for which the aliases do not support the 'modify' effect, or support the 'modify' effect with a different token type.
New-AzResourceGroupDeployment: 3:26:51 PM - Error: Code=PolicyViolation; Message=Unable to apply 'modify' operation using the alias: 'Microsoft.EventHub/namespaces/minimumTlsVersion'. This alias is not modifiable in requests using API versions: '2021-11-01,2021-06-01-preview,2021-01-01-preview,2018-01-01-preview,2017-04-01,2015-08-01,2014-09-01'. See https://aka.ms/policy-modify-conflicts for details. Policies: '{"policyAssignment":{"name":"eventhub-modify-tls","id":"/subscriptions/9d854bbf-c6b3-4b03-a3de-cc4dc16cad0f/resourceGroups/eventhub-modifypolicy-rg/providers/Microsoft.Authorization/policyAssignments/9a2a2c2a500740c69c10bb47"},"policyDefinition":{"name":"eventhub-modify-tls","id":"/subscriptions/9d854bbf-c6b3-4b03-a3de-cc4dc16cad0f/providers/Microsoft.Authorization/policyDefinitions/9ea2d44b-9311-4896-8c2d-dd0cd7907e8f"}}'
New-AzResourceGroupDeployment: The deployment validation failed

Alors certes le déploiement ne fonctionne pas, mais on nous dit clairement que l’alias n’est pas supporté par l’api version que nous utilisons. Il ne nous reste qu’à update notre API Version dans notre template bicep.

Comments

Post comment
Loading...