Megosztás a következőn keresztül:


ARM-sablonok tesztelési esetei

Ez a cikk az Azure Resource Manager-sablonokhoz (ARM-sablonokhoz) készült sablontesztelési eszközkészlettel futtatott teszteket ismerteti. Példákat tartalmaz a teszt sikeres vagy sikertelen végrehajtására , és tartalmazza az egyes tesztek nevét. A tesztek futtatásával vagy egy adott teszt futtatásával kapcsolatos további információkért tekintse meg a tesztparamétereket.

A megfelelő séma használata

Teszt neve: DeploymentTemplate-séma helyes

A sablonban érvényes sémaértéket kell megadnia.

Az alábbi példa meghiúsul , mert a séma érvénytelen.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-01-01/deploymentTemplate.json#",
}

Az alábbi példában figyelmeztetés jelenik meg, mert a sémaverzió 2015-01-01 elavult, és nincs karbantartva.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
}

Az alábbi példa érvényes sémát használ.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
}

A sablon tulajdonságát schema az alábbi sémák egyikére kell beállítani:

  • https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json

Deklarált paramétereket kell használni

Teszt neve: A paraméterekre hivatkozni kell

Ez a teszt olyan paramétereket keres, amelyeket nem használnak a sablonban, vagy olyan paramétereket, amelyeket nem használnak érvényes kifejezésben.

A sablon keveredésének csökkentése érdekében törölje a definiált, de nem használt paramétereket. A nem használt paraméterek kiküszöbölése leegyszerűsíti a sablontelepítéseket, mert nem kell felesleges értékeket megadnia.

A Bicep-ben használja a Linter-szabályt – nincsenek fel nem használt paraméterek.

Az alábbi példa meghiúsul, mert a paraméterre hivatkozó kifejezésből hiányzik a kezdő szögletes zárójel ([).

"resources": [
  {
    "location": " parameters('location')]"
  }
]

Az alábbi példa azért halad át , mert a kifejezés érvényes.

"resources": [
  {
    "location": "[parameters('location')]"
  }
]

A biztonságos paraméterek nem rendelkezhetnek alapértelmezetten rögzített kóddal

Teszt neve: A biztonságos sztringparaméterek nem lehetnek alapértelmezettek

Ne adjon meg egy rögzített alapértelmezett értéket a sablonban lévő biztonságos paraméterhez. A biztonságos paraméterek alapértelmezett értékként üres sztringet tartalmazhatnak, vagy használhatják a newGuid függvényt egy kifejezésben.

Azokat a típusokat secureString vagy secureObject paramétereket használja, amelyek bizalmas értékeket, például jelszavakat tartalmaznak. Ha egy paraméter biztonságos típust használ, a paraméter értéke nem naplózva vagy tárolva lesz az üzembe helyezési előzményekben. Ez a művelet megakadályozza, hogy egy rosszindulatú felhasználó felderítse a bizalmas értéket.

Ha alapértelmezett értéket ad meg, ezt az értéket bárki felfedezheti, aki hozzáfér a sablonhoz vagy az üzembe helyezési előzményekhez.

A Bicep-ben használja a Linter-szabályt – a biztonságos paraméter alapértelmezése.

Az alábbi példa sikertelen.

"parameters": {
  "adminPassword": {
    "defaultValue": "HardcodedPassword",
    "type": "secureString"
  }
}

A következő példa átmegy.

"parameters": {
  "adminPassword": {
    "type": "secureString"
  }
}

Az alábbi példa a függvény használata miatt newGuid halad át.

"parameters": {
  "secureParameter": {
    "type": "secureString",
    "defaultValue": "[newGuid()]"
  }
}

A környezeti URL-címek nem kódolhatók keményen

Teszt neve: A DeploymentTemplate nem tartalmazhat hardcoded URI-t

A sablonban ne kódoljon szigorú környezeti URL-címeket. Ehelyett használja a környezeti függvényt ezeknek az URL-címeknek a dinamikus lekérésére az üzembe helyezés során. A letiltott URL-gazdagépek listáját a tesztesetben találja.

A Bicep-ben használja a Linter-szabályt – nincs rögzített környezeti URL-cím.

Az alábbi példa meghiúsul , mert az URL-cím kódolt.

"variables":{
  "AzureURL":"https://management.azure.com"
}

A teszt akkor is meghiúsul, ha összefűzéssel vagy uri-val használják.

"variables":{
  "AzureSchemaURL1": "[concat('https://','gallery.azure.com')]",
  "AzureSchemaURL2": "[uri('gallery.azure.com','test')]"
}

Az alábbi példa áthalad.

"variables": {
  "AzureSchemaURL": "[environment().gallery]"
}

A hely paramétert használ

Teszt neve: A hely nem lehet hardcoded

Az erőforrás helyének beállításához a sablonoknak rendelkezniük kell egy paraméterrel location , amelynek típusa a következő string. A fő sablonban( azuredeploy.json vagy mainTemplate.json) ez a paraméter alapértelmezés szerint az erőforráscsoport helyére állítható be. Csatolt vagy beágyazott sablonokban a helyparaméternek nem lehet alapértelmezett helye.

A sablonfelhasználók korlátozott hozzáféréssel rendelkezhetnek azokhoz a régiókhoz, ahol erőforrásokat hozhatnak létre. A nehezen kódolt erőforrás-hely megakadályozhatja, hogy a felhasználók létrehoznak egy erőforrást. A "[resourceGroup().location]" kifejezés letilthatja a felhasználókat, ha az erőforráscsoport olyan régióban lett létrehozva, amelyhez a felhasználó nem fér hozzá. A letiltott felhasználók nem tudják használni a sablont.

Ha egy alapértelmezett paramétert location ad meg az erőforráscsoport helyére, a felhasználók kényelmesen használhatják az alapértelmezett értéket, de más helyet is megadhatnak.

A Bicep-ben használja a Linter-szabályt – a paraméter alapértelmezett értékein kívül nincs helykifejezés.

A következő példa meghiúsul , mert az erőforrás location értéke resourceGroup().location.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "[resourceGroup().location]",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ]
}

A következő példa egy paramétert location használ, de sikertelen, mert a paraméter alapértelmezés szerint egy rögzített helyre van beállítva.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "westus"
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "[parameters('location')]",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ],
  "outputs": {}
}

Az alábbi példa akkor halad át , ha a sablont használják fő sablonként. Hozzon létre egy alapértelmezett paramétert az erőforráscsoport helyére, de lehetővé teszi, hogy a felhasználók más értéket adjanak meg.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for the resources."
      }
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "[parameters('location')]",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ],
  "outputs": {}
}

Feljegyzés

Ha az előző példát csatolt sablonként használja, a teszt sikertelen lesz. Csatolt sablonként használva távolítsa el az alapértelmezett értéket.

Az erőforrásoknak helyüknek kell lennie

Teszt neve: Az erőforrásoknak helyük kell, hogy legyen

Az erőforrás helyét sablonkifejezésre vagy global. A sablonkifejezés általában a location Location paraméterben leírt paramétert használja.

A Bicep-ben használja a Linter-szabályt – nincsenek rögzített helyek.

Az alábbi példa meghiúsul, mert nem location kifejezés vagy global.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "functions": [],
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "westus",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ],
  "outputs": {}
}

Az alábbi példa azért halad át , mert az erőforrás location értéke globala következő.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "functions": [],
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "global",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ],
  "outputs": {}
}

A következő példa azért is átmegy , mert a location paraméter egy kifejezést használ. Az erőforrás location a kifejezés értékét használja.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for the resources."
      }
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "[parameters('location')]",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ],
  "outputs": {}
}

A virtuális gép mérete paramétert használ

Teszt neve: A virtuális gép méretének paraméternek kell lennie

Ne kódozza be az hardwareProfile objektumot vmSize. A teszt sikertelen lesz, ha a rendszer kihagyja, hardwareProfile vagy egy kódolt értéket tartalmaz. Adjon meg egy paramétert, hogy a sablon felhasználói módosíthassák az üzembe helyezett virtuális gép méretét. További információ: Microsoft.Compute virtualMachines.

Az alábbi példa meghiúsul , mert az hardwareProfile objektum vmSize egy kódolt érték.

"resources": [
  {
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2020-12-01",
    "name": "demoVM",
    "location": "[parameters('location')]",
    "properties": {
      "hardwareProfile": {
        "vmSize": "Standard_D2_v3"
      }
    }
  }
]

A példa akkor halad át , amikor egy paraméter megad egy értéket a következőhöz vmSize:

"parameters": {
  "vmSizeParameter": {
    "type": "string",
    "defaultValue": "Standard_D2_v3",
    "metadata": {
      "description": "Size for the virtual machine."
    }
  }
}

hardwareProfile Ezután egy kifejezéssel vmSize hivatkozhat a paraméter értékére:

"resources": [
  {
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2020-12-01",
    "name": "demoVM",
    "location": "[parameters('location')]",
    "properties": {
      "hardwareProfile": {
        "vmSize": "[parameters('vmSizeParameter')]"
      }
    }
  }
]

A minimális és a maximális értékek számok

Teszt neve: A minimális és a maximális érték szám

Amikor egy paramétert ad minValue meg, és maxValueszámként adja meg őket. Párként és maxValue párként kell használniaminValue, vagy a teszt meghiúsul.

Az alábbi példa meghiúsul, mert maxValue minValue sztringek.

"exampleParameter": {
  "type": "int",
  "minValue": "0",
  "maxValue": "10"
}

A következő példa meghiúsul, mert csak minValue a rendszer használja.

"exampleParameter": {
  "type": "int",
  "minValue": 0
}

Az alábbi példa azért halad át , mert minValue maxValue számok.

"exampleParameter": {
  "type": "int",
  "minValue": 0,
  "maxValue": 10
}

Az Összetevők paraméter helyesen van definiálva

Teszt neve: összetevők paramétere

Ha paramétereket _artifactsLocation ad meg és _artifactsLocationSasTokenhasznál, használja a megfelelő alapértelmezett értékeket és típusokat. A teszt elvégzéséhez a következő feltételeknek kell teljesülniük:

  • Ha egy paramétert ad meg, meg kell adnia a másikat.
  • _artifactsLocation a .-nak stringkell lennie.
  • _artifactsLocation A fő sablonban alapértelmezett értékkel kell rendelkeznie.
  • _artifactsLocation nem lehet alapértelmezett érték beágyazott sablonban.
  • _artifactsLocation az alapértelmezett értékhez vagy a nyers adattár URL-címével kell rendelkeznie "[deployment().properties.templateLink.uri]" .
  • _artifactsLocationSasToken a .-nak secureStringkell lennie.
  • _artifactsLocationSasToken az alapértelmezett értékhez csak üres sztring tartozhat.
  • _artifactsLocationSasToken nem lehet alapértelmezett érték beágyazott sablonban.

A Bicep-ben használja a Linter-szabályt – összetevők paramétereit.

Deklarált változókat kell használni

Teszt neve: A változókra hivatkozni kell

Ez a teszt olyan változókat keres, amelyeket nem használnak a sablonban, vagy nem használnak érvényes kifejezésben. A sablon keveredésének csökkentése érdekében törölje a definiált, de nem használt változókat.

Az értékek iterálására az copy elemet használó változókra kell hivatkozni. További információ: Változó iteráció ARM-sablonokban.

A Bicep-ben használja a Linter-szabályt – nincsenek fel nem használt változók.

Az alábbi példa meghiúsul , mert az elemet használó copy változóra nincs hivatkozás.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "itemCount": {
      "type": "int",
      "defaultValue": 5
    }
  },
  "variables": {
    "copy": [
      {
        "name": "stringArray",
        "count": "[parameters('itemCount')]",
        "input": "[concat('item', copyIndex('stringArray', 1))]"
      }
    ]
  },
  "resources": [],
  "outputs": {}
}

A következő példa meghiúsul, mert a változóra hivatkozó kifejezésből hiányzik a kezdő szögletes zárójel ([).

"outputs": {
  "outputVariable": {
    "type": "string",
    "value": " variables('varExample')]"
  }
}

Az alábbi példa azért halad át, mert a változóra hivatkozik a függvény.outputs

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "itemCount": {
      "type": "int",
      "defaultValue": 5
    }
  },
  "variables": {
    "copy": [
      {
        "name": "stringArray",
        "count": "[parameters('itemCount')]",
        "input": "[concat('item', copyIndex('stringArray', 1))]"
      }
    ]
  },
  "resources": [],
  "outputs": {
    "arrayResult": {
      "type": "array",
      "value": "[variables('stringArray')]"
    }
  }
}

Az alábbi példa azért halad át , mert a kifejezés érvényes.

"outputs": {
  "outputVariable": {
    "type": "string",
    "value": "[variables('varExample')]"
  }
}

A dinamikus változó nem használhat összefűzést

Teszt neve: A dinamikus változóhivatkozások nem használhatják az összefűzést

Néha dinamikusan kell létrehoznia egy változót egy másik változó vagy paraméter értéke alapján. Ne használja az összefűző függvényt az érték beállításakor. Ehelyett használjon egy objektumot, amely tartalmazza a rendelkezésre álló lehetőségeket, és dinamikusan kérje le az objektum egyik tulajdonságát az üzembe helyezés során.

Az alábbi példa áthalad. A currentImage változó dinamikusan van beállítva az üzembe helyezés során.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "osType": {
      "type": "string",
      "allowedValues": [
        "Windows",
        "Linux"
      ]
    }
  },
  "variables": {
    "imageOS": {
      "Windows": {
        "image": "Windows Image"
      },
      "Linux": {
        "image": "Linux Image"
      }
    },
    "currentImage": "[variables('imageOS')[parameters('osType')].image]"
  },
  "resources": [],
  "outputs": {
    "result": {
      "type": "string",
      "value": "[variables('currentImage')]"
    }
  }
}

Az API legújabb verziójának használata

Teszt neve: apiVersions Legyen friss

Az egyes erőforrások API-verziójának sztringként kódolt legutóbbi verziót kell használnia. A teszt kiértékeli a sablon API-verzióját az erőforrás-szolgáltatónak az eszközkészlet gyorsítótárában lévő verzióival. A teszt futtatásától számított két évnél régebbi API-verziót a rendszer frissnek tekinti. Ne használjon előzetes verziót, ha újabb verzió érhető el.

Figyelmeztetés, amely szerint az API-verzió nem található, csak azt jelzi, hogy a verzió nem szerepel az eszközkészlet gyorsítótárában. Az API legújabb, ajánlott verziójának használata létrehozhatja a figyelmeztetést.

További információ az eszközkészlet-gyorsítótárról.

A Bicep-ben használja a Linter-szabályt – használja a legutóbbi API-verziókat.

Az alábbi példa meghiúsul, mert az API-verzió több mint kétéves.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "storageaccount1",
    "location": "[parameters('location')]"
  }
]

Az alábbi példa meghiúsul, mert egy újabb verziójú verziót használ a rendszer.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2020-08-01-preview",
    "name": "storageaccount1",
    "location": "[parameters('location')]"
  }
]

Az alábbi példa azért halad át , mert az egy friss verzió, amely nem előzetes verzió.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2021-02-01",
    "name": "storageaccount1",
    "location": "[parameters('location')]"
  }
]

A kódolt API-verzió használata

Teszt neve: A szolgáltatók apiVersions nem engedélyezettek

Az erőforrástípus API-verziója határozza meg, hogy mely tulajdonságok érhetők el. Adjon meg egy kemény kóddal rendelkező API-verziót a sablonban. Ne kérje le az üzembe helyezés során meghatározott API-verziót, mert nem fogja tudni, hogy mely tulajdonságok érhetők el.

Az alábbi példa sikertelen.

"resources": [
  {
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "[providers('Microsoft.Compute', 'virtualMachines').apiVersions[0]]",
    ...
  }
]

Az alábbi példa áthalad.

"resources": [
  {
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2020-12-01",
    ...
  }
]

A tulajdonságok nem lehetnek üresek

Teszt neve: A sablon nem tartalmazhat üres elemet

Ne írja be a tulajdonságokat üres értékre. Az üres értékek közé tartoznak a null és üres sztringek, objektumok vagy tömbök. Ha egy tulajdonság üres értékre van állítva, távolítsa el a tulajdonságot a sablonból. A tulajdonságot az üzembe helyezés során üres értékre állíthatja be, például egy paraméteren keresztül.

A template beágyazott sablon tulajdonsága üres tulajdonságokat tartalmazhat. A beágyazott sablonokról további információt a Microsoft.Resources üzembe helyezései című témakörben talál.

Az alábbi példa meghiúsul , mert üres tulajdonságok vannak.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2021-01-01",
    "name": "storageaccount1",
    "location": "[parameters('location')]",
    "sku": {},
    "kind": ""
  }
]

Az alábbi példa azért halad át , mert a tulajdonságok értékeket tartalmaznak.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2021-01-01",
    "name": "storageaccount1",
    "location": "[parameters('location')]",
    "sku": {
      "name": "Standard_LRS",
      "tier": "Standard"
    },
    "kind": "Storage"
  }
]

Erőforrás-azonosító függvények használata

Teszt neve: Az azonosítókat resourceID-ekből kell származtatni

Erőforrás-azonosító megadásakor használja az erőforrás-azonosító egyik függvényét. Az engedélyezett függvények a következők:

Ne használja az összefűző függvényt erőforrás-azonosító létrehozásához.

A Bicep-ben használja a Linter-szabályt – használja az erőforrás-azonosító függvényeket.

Az alábbi példa sikertelen.

"networkSecurityGroup": {
    "id": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/networkSecurityGroups/', variables('networkSecurityGroupName'))]"
}

A következő példa átmegy.

"networkSecurityGroup": {
    "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}

A ResourceId függvény megfelelő paraméterekkel rendelkezik

Teszt neve: A ResourceIds nem tartalmazhat

Erőforrásazonosítók létrehozásakor ne használjon felesleges függvényeket az opcionális paraméterekhez. Alapértelmezés szerint a resourceId függvény az aktuális előfizetést és erőforráscsoportot használja. Ezeket az értékeket nem kell megadnia.

A következő példa meghiúsul , mert nem kell megadnia az előfizetés aktuális azonosítóját és erőforráscsoportnevét.

"networkSecurityGroup": {
    "id": "[resourceId(subscription().subscriptionId, resourceGroup().name, 'Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}

A következő példa átmegy.

"networkSecurityGroup": {
    "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}

Ez a teszt a következőkre vonatkozik:

list*Az reference erőforrás-azonosító létrehozásakor concat a teszt sikertelen lesz.

dependsOn ajánlott eljárások

Teszt neve: DependsOn – ajánlott eljárások

Az üzembehelyezési függőségek beállításakor ne használja az IF függvényt egy feltétel teszteléséhez. Ha egy erőforrás feltételesen üzembe helyezett erőforrástól függ, állítsa be a függőséget úgy, ahogyan bármely erőforrás esetében tenné. Ha egy feltételes erőforrás nincs üzembe helyezve, az Azure Resource Manager automatikusan eltávolítja azt a szükséges függőségekből.

Az dependsOn elem nem kezdődhet összefűző függvénnyel.

A Bicep-ben használja a Linter-szabályt – nincs szükségtelen dependsOn bejegyzés.

Az alábbi példa meghiúsul , mert egy függvényt if tartalmaz.

"dependsOn": [
  "[if(equals(parameters('newOrExisting'),'new'), variables('storageAccountName'), '')]"
]

A következő példa meghiúsul , mert a következővel concatkezdődik: .

"dependsOn": [
  "[concat(variables('storageAccountName'))]"
]

Az alábbi példa áthalad.

"dependsOn": [
  "[variables('storageAccountName')]"
]

A beágyazott vagy csatolt üzemelő példányok nem használhatnak hibakeresést

Teszt neve: Az üzembehelyezési erőforrások nem lehetnek hibakeresési hibák

Ha beágyazott vagy csatolt sablont definiál az erőforrástípussal, engedélyezheti a Microsoft.Resources/deployments hibakeresést. A hibakeresés akkor használatos, ha sablont kell tesztelnie, de bizalmas információkat tehet közzé. Mielőtt a sablont éles környezetben használná, kapcsolja ki a hibakeresést. Eltávolíthatja az debugSetting objektumot, vagy módosíthatja a detailLevel tulajdonságot none.

Az alábbi példa sikertelen.

"debugSetting": {
  "detailLevel": "requestContent"
}

Az alábbi példa áthalad.

"debugSetting": {
  "detailLevel": "none"
}

A rendszergazdai felhasználónevek nem lehetnek literálértékek

Tesztnév: adminUsername Nem lehet konstans

Ha beállít egy adminUserNameértéket, ne használjon literális értéket. Hozzon létre egy paramétert a felhasználónévhez, és használjon kifejezést a paraméter értékére való hivatkozáshoz.

A Bicep-ben használja a Linter-szabályt – a rendszergazdai felhasználónév nem lehet konstans.

Az alábbi példa literális értékkel meghiúsul .

"osProfile":  {
  "adminUserName": "myAdmin"
}

Az alábbi példa egy kifejezéssel halad át .

"osProfile": {
  "adminUsername": "[parameters('adminUsername')]"
}

A legújabb virtuálisgép-rendszerkép használata

Teszt neve: A virtuálisgép-rendszerképek a legújabb verziót használják

Ez a teszt le van tiltva, de a kimenet azt mutatja, hogy sikeres volt. Az ajánlott eljárás a következő feltételek ellenőrzése a sablonban:

Ha a sablon tartalmaz egy képpel rendelkező virtuális gépet, győződjön meg arról, hogy a rendszerkép legújabb verzióját használja.

A Bicep-ben használja a Linter-szabályt – használjon stabil virtuálisgép-rendszerképet.

Stabil virtuálisgép-rendszerképek használata

Teszt neve: A virtuális gépek nem tekinthetők meg előzetes verzióban

A virtuális gépek nem használhatnak előzetes verziójú képeket. A teszt ellenőrzi, storageProfile hogy a imageReference sztring nem használ-e előnézetet tartalmazó sztringet. És ez az előnézet nem használatos a imageReference tulajdonságokban offer, skuvagy version.

A tulajdonságról további információt a imageReference Microsoft.Compute virtualMachines és a Microsoft.Compute virtualMachineScaleSets című témakörben talál.

A Bicep-ben használja a Linter-szabályt – használjon stabil virtuálisgép-rendszerképet.

Az alábbi példa meghiúsul, mert imageReference egy előnézetet tartalmazó sztring.

"properties": {
  "storageProfile": {
    "imageReference": "latest-preview"
  }
}

Az alábbi példa nem működik, ha az előnézetet a ( vagy skuversion) fájlban offerhasználja.

"properties": {
  "storageProfile": {
    "imageReference": {
      "publisher": "Canonical",
      "offer": "UbuntuServer_preview",
      "sku": "16.04-LTS-preview",
      "version": "preview"
    }
  }
}

Az alábbi példa áthalad.

"storageProfile": {
  "imageReference": {
    "publisher": "Canonical",
    "offer": "UbuntuServer",
    "sku": "16.04-LTS",
    "version": "latest"
  }
}

Ne használja a ManagedIdentity bővítményt

Teszt neve: A ManagedIdentityExtension nem használható

Ne alkalmazza a bővítményt ManagedIdentity egy virtuális gépre. A bővítmény 2019-ben elavult, és a továbbiakban nem használható.

A kimenetek nem tartalmazhatnak titkos kulcsokat

Teszt neve: A kimenetek nem tartalmazhatnak titkos kulcsokat

Ne tartalmazzon olyan értékeket a outputs szakaszban, amelyek titkos kulcsokat fednek fel. Ilyenek például a biztonságos paraméterek, például listKeysa típus secureString vagy secureObjecta lista* függvények.

A sablon kimenete az üzembe helyezési előzményekben van tárolva, így egy rosszindulatú felhasználó megtalálhatja ezeket az információkat.

A Bicep-ben használja a Linter-szabályt – a kimenetek nem tartalmazhatnak titkos kódokat.

A következő példa meghiúsul , mert egy biztonsági paramétert tartalmaz egy kimeneti értékben.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "secureParam": {
      "type": "secureString"
    }
  },
  "functions": [],
  "variables": {},
  "resources": [],
  "outputs": {
    "badResult": {
      "type": "string",
      "value": "[concat('this is the value ', parameters('secureParam'))]"
    }
  }
}

Az alábbi példa meghiúsul, mert lista* függvényt használ a kimenetekben.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "type": "string"
    }
  },
  "functions": [],
  "variables": {},
  "resources": [],
  "outputs": {
    "badResult": {
      "type": "object",
      "value": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2021-02-01')]"
    }
  }
}

A protectedSettings használata a commandToExecute titkos kulcsokhoz

Teszt neve: A CommandToExecute-nek védett beállításokat kell használnia a titkos kódokhoz

A típussal CustomScriptrendelkező erőforrások esetében használja a titkosított protectedSettings kódot, ha commandToExecute titkos adatokat, például jelszót tartalmaz. A titkos adatok például használhatók olyan biztonságos secureString secureObjectparaméterekben, mint például a lista* függvények, például listKeysaz egyéni szkriptek.

Ne használjon titkos adatokat az settings objektumban, mert tiszta szöveget használ. További információ: Microsoft.Compute virtualMachines/extensions, Windows vagy Linux.

A Bicep-ben használja a Linter-szabályt – használja a protectedSettings parancsOtToExecute titkos kulcsokhoz.

Az alábbi példa meghiúsul, mert settings biztonságos paraméterrel használja commandToExecute .

"parameters": {
  "adminPassword": {
    "type": "secureString"
  }
}
...
"properties": {
  "type": "CustomScript",
  "settings": {
    "commandToExecute": "[parameters('adminPassword')]"
  }
}

Az alábbi példa meghiúsul, mert settings függvényt listKeys használcommandToExecute.

"properties": {
  "type": "CustomScript",
  "settings": {
    "commandToExecute": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2021-02-01')]"
  }
}

Az alábbi példa azért halad át , mert protectedSettings biztonságos paraméterrel használja commandToExecute .

"parameters": {
  "adminPassword": {
    "type": "secureString"
  }
}
...
"properties": {
  "type": "CustomScript",
  "protectedSettings": {
    "commandToExecute": "[parameters('adminPassword')]"
  }
}

Az alábbi példa azért halad át, mert protectedSettings függvényt listKeys használcommandToExecute.

"properties": {
  "type": "CustomScript",
  "protectedSettings": {
    "commandToExecute": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2021-02-01')]"
  }
}

A legutóbbi API-verziók használata referenciafüggvényekben

Tesztnév: apiVersionsnak frissnek kell lennie a referenciafüggvényekben

A referenciafüggvényekben használt API-verziónak frissnek és nem előzetes verziónak kell lennie. A teszt kiértékeli a sablon API-verzióját az erőforrás-szolgáltatónak az eszközkészlet gyorsítótárában lévő verzióival. A teszt futtatásától számított két évnél régebbi API-verziót a rendszer frissnek tekinti.

Figyelmeztetés, amely szerint az API-verzió nem található, csak azt jelzi, hogy a verzió nem szerepel az eszközkészlet gyorsítótárában. Az API legújabb, ajánlott verziójának használata létrehozhatja a figyelmeztetést.

További információ az eszközkészlet-gyorsítótárról.

Az alábbi példa meghiúsul, mert az API-verzió több mint kétéves.

"outputs": {
  "stgAcct": {
    "type": "string",
    "value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01')]"
  }
}

Az alábbi példa meghiúsul, mert az API-verzió egy előzetes verzió.

"outputs": {
  "stgAcct": {
    "type": "string",
    "value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2020-08-01-preview')]"
  }
}

Az alábbi példa azért halad át , mert az API-verzió kevesebb, mint kétéves, és nem előzetes verzió.

"outputs": {
  "stgAcct": {
    "type": "string",
    "value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-02-01')]"
  }
}

Típus és név használata a resourceId függvényekben

Teszt neve: Az erőforrások nem lehetnek kétértelműek

Ez a teszt le van tiltva, de a kimenet azt mutatja, hogy sikeres volt. Az ajánlott eljárás a következő feltételek ellenőrzése a sablonban:

A resourceId-nek tartalmaznia kell egy erőforrástípust és egy erőforrásnevet. Ez a teszt megkeresi a sablon összes függvényét resourceId , és ellenőrzi, hogy az erőforrás a megfelelő szintaxissal van-e használatban a sablonban. Ellenkező esetben a függvény nem egyértelmű.

Egy függvény például resourceId nem egyértelmű:

  • Ha nem található erőforrás a sablonban, és nincs megadva erőforráscsoport.
  • Ha egy erőforrás feltételt tartalmaz, és nincs megadva erőforráscsoport.
  • Ha egy kapcsolódó erőforrás tartalmaz néhány, de nem az összes névszegmenst. Egy gyermekerőforrás például egynél több névszegmenst tartalmaz. További információkért tekintse meg a resourceId megjegyzéseit.

Belső hatókör használata beágyazott üzembe helyezés biztonságos paramétereihez

Teszt neve: Biztonságos paramok beágyazott üzemelő példányokban

A beágyazott sablon objektumának hatókörrel való inner használatával kiértékelheti azokat a kifejezéseket, amelyek típus- secureString vagy secureObject listafüggvények, például listKeysbiztonságos paramétereket tartalmaznak.expressionEvaluationOptions Ha a hatókört használja, a outer kifejezéseket a rendszer tiszta szövegben értékeli ki a szülősablon hatókörén belül. A biztonságos érték ezután bárki számára látható lesz, aki hozzáfér az üzembe helyezési előzményekhez. Az alapértelmezett érték az expressionEvaluationOptions outer.

A beágyazott sablonokról további információt a Microsoft.Resources üzembe helyezései és a kifejezések kiértékelési hatóköre beágyazott sablonokban című témakörben talál.

A Bicep-ben használja a Linter-szabályt – biztonságos paramokat a beágyazott üzembe helyezésben.

Az alábbi példa meghiúsul, mert expressionEvaluationOptions hatókör használatával outer értékeli ki a biztonságos paramétereket vagy list* függvényeket.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2021-04-01",
    "name": "nestedTemplate",
    "properties": {
      "expressionEvaluationOptions": {
        "scope": "outer"
      }
    }
  }
]

Az alábbi példa azért halad át , mert expressionEvaluationOptions hatókör használatával inner értékeli ki a biztonságos paramétereket vagy list* függvényeket.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2021-04-01",
    "name": "nestedTemplate",
    "properties": {
      "expressionEvaluationOptions": {
        "scope": "inner"
      }
    }
  }
]

Következő lépések