Kurz: Vytvoření vlastní definice zásady

Vlastní definice zásad umožňuje zákazníkům definovat vlastní pravidla pro používání Azure. Tato pravidla často vynucují:

  • Postupy zabezpečení
  • Správa nákladů
  • Pravidla specifická pro organizaci (například pojmenování nebo umístění)

Bez ohledu na to, který obchodní ovladač pro vytváření vlastních zásad, jsou kroky pro definování nových vlastních zásad stejné.

Před vytvořením vlastních zásad zkontrolujte ukázky zásad a zkontrolujte, jestli už existuje zásada, která odpovídá vašim potřebám.

Přístup k vytváření vlastních zásad se řídí těmito kroky:

  • Identifikace obchodních požadavků
  • Mapování každého požadavku na vlastnost prostředku Azure
  • Mapování vlastnosti na alias
  • Určení efektu, který se má použít
  • Vytvoření definice zásady

Požadavky

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

Identifikace požadavků

Před vytvořením definice zásady je důležité porozumět záměru zásady. V tomto kurzu použijeme jako cíl běžný požadavek na zabezpečení podniku, který ilustruje následující kroky:

  • Pro každý účet úložiště musí být povolený protokol HTTPS.
  • Každý účet úložiště musí být pro protokol HTTP zakázaný.

Vaše požadavky by měly jasně identifikovat stavy prostředků "to be" a "not to be".

Přestože jsme definovali očekávaný stav prostředku, zatím jsme nedefinovali, co chceme s nekompatibilními prostředky dělat. Azure Policy podporuje mnoho efektů. V tomto kurzu definujeme obchodní požadavek tak, aby bránil vytvoření prostředků, pokud nevyhovují obchodním pravidlům. K dosažení tohoto cíle použijeme efekt Odepřít. Chceme také možnost pozastavit zásadu pro konkrétní přiřazení. Proto použijeme účinek Disabled a z tohoto efektu uděláme parametr v definici zásady.

Určení vlastností prostředku

Na základě firemních požadavků je prostředek Azure, který se má auditovat Azure Policy účtu úložiště. Neznáme ale vlastnosti, které se používají v definici zásady. Azure Policy se vyhodnocuje vzhledem k reprezentaci prostředku ve formátu JSON, takže budeme muset porozumět vlastnostem dostupným u tohoto prostředku.

Existuje mnoho způsobů, jak určit vlastnosti prostředku Azure. Na každý z nich se podíváme v tomto kurzu:

  • Rozšíření Azure Policy pro VS Code
  • Azure Resource Manager šablony (šablony ARM)
    • Export existujícího prostředku
    • Prostředí pro vytváření
    • Šablony pro rychlý start (GitHub)
    • Referenční dokumentace k šablonám
  • Průzkumník prostředků Azure

Zobrazení prostředků v VS Code rozšíření

Rozšíření VS Code můžete použít k procházení prostředků ve vašem prostředí a zobrazení Resource Manager vlastností jednotlivých prostředků.

Šablony ARM

Existuje několik způsobů, jak se podívat na šablonu ARM, která obsahuje vlastnost, kterou chcete spravovat.

Existující prostředek na portálu

Nejjednodušší způsob, jak najít vlastnosti, je podívat se na existující prostředek stejného typu. Prostředky, které jsou už nakonfigurované s nastavením, které chcete vynutit, také poskytují hodnotu, se kterou se má porovnat. Podívejte se na stránku Exportovat šablonu (v Nastavení) v části Azure Portal pro tento konkrétní prostředek.

Upozornění

Šablona ARM exportovaná Azure Portal nelze připojit přímo k vlastnosti šablony ARM v definici zásady deployment deployIfNotExists.

Snímek obrazovky se stránkou Exportovat šablonu u existujícího prostředku v Azure Portal

V případě účtu úložiště se zobrazí šablona podobná tomuto příkladu:

...
"resources": [{
    "comments": "Generalized from resource: '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount'.",
    "type": "Microsoft.Storage/storageAccounts",
    "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
    },
    "kind": "Storage",
    "name": "[parameters('storageAccounts_mystorageaccount_name')]",
    "apiVersion": "2018-07-01",
    "location": "westus",
    "tags": {
        "ms-resource-usage": "azure-cloud-shell"
    },
    "scale": null,
    "properties": {
        "networkAcls": {
            "bypass": "AzureServices",
            "virtualNetworkRules": [],
            "ipRules": [],
            "defaultAction": "Allow"
        },
        "supportsHttpsTrafficOnly": false,
        "encryption": {
            "services": {
                "file": {
                    "enabled": true
                },
                "blob": {
                    "enabled": true
                }
            },
            "keySource": "Microsoft.Storage"
        }
    },
    "dependsOn": []
}]
...

V části properties je hodnota s názvem supportsHttpsTrafficOnly nastavená na false. Tato vlastnost vypadá, jako by to byla hledaná vlastnost. Typ prostředku je také Microsoft.Storage/storageAccounts. Typ nám umožňuje omezit zásadu jenom na prostředky tohoto typu.

Vytvoření prostředku na portálu

Dalším způsobem, jak portálem procházet, je prostředí pro vytváření prostředků. Při vytváření účtu úložiště prostřednictvím portálu je na kartě Upřesnit možnost Požadováno přenos zabezpečení. Tato vlastnost má možnosti Zakázáno a Povoleno. Ikona informací obsahuje další text, který potvrzuje, že tato možnost je pravděpodobně požadovaná vlastnost. Portál nám ale nesídí název vlastnosti na této obrazovce.

Na kartě Zkontrolovat a vytvořit se v dolní části stránky zobrazí odkaz Na stažení šablony pro automatizaci. Výběrem odkazu se otevře šablona, která vytvoří prostředek, který jsme nakonfigurovali. V tomto případě vidíme dva klíčové údaje:

...
"supportsHttpsTrafficOnly": {
    "type": "bool"
}
...
"properties": {
    "accessTier": "[parameters('accessTier')]",
    "supportsHttpsTrafficOnly": "[parameters('supportsHttpsTrafficOnly')]"
}
...

Tyto informace nám říkají o typu vlastnosti a také potvrzují, že supportsHttpsTrafficOnly je hledaná vlastnost.

Šablony pro rychlý start v GitHub

Šablony Azure pro rychlý start na GitHub mají stovky šablon ARM sestavených pro různé prostředky. Tyto šablony mohou být skvělým způsobem, jak najít vlastnost prostředku, kterou hledáte. Některé vlastnosti se dají zdát jako to, co hledáte, ale řídí něco jiného.

Referenční dokumentace k prostředkům

Pokud chcete ověřit, že je správná vlastnost supportsHttpsTrafficOnly, zkontrolujte referenční informace k šabloně ARM pro prostředek účtu úložiště u poskytovatele úložiště. Objekt properties obsahuje seznam platných parametrů. Výběrem odkazu StorageAccountPropertiesCreateParameters-object se zobrazí tabulka přijatelných vlastností. Je k dispozici supportsHttpsTrafficOnly a popis odpovídá tomu, co hledáme, aby splňoval obchodní požadavky.

Průzkumník prostředků Azure

Dalším způsobem, jak prozkoumat prostředky Azure, je Azure Resource Explorer (Preview). Tento nástroj používá kontext vašeho předplatného, takže se na webu musíte ověřit pomocí svých přihlašovacích údajů Azure. Po ověření můžete procházet podle poskytovatelů, předplatných, skupin prostředků a prostředků.

Vyhledejte prostředek účtu úložiště a prohlédněte si vlastnosti. Vidíme tu také vlastnost supportsHttpsTrafficOnly. Když vybereme kartu Dokumentace, vidíme, že popis vlastnosti odpovídá tomu, co jsme našli v referenční dokumentaci dříve.

Vyhledání aliasu vlastnosti

Identifikovali jsme vlastnost prostředku, ale musíme ji namapovat na alias.

Existuje několik způsobů, jak určit aliasy pro prostředek Azure. Na každý z nich se podíváme v tomto kurzu:

  • Rozšíření Azure Policy pro VS Code
  • Azure CLI
  • Azure PowerShell

Získání aliasů v VS Code rozšíření

Rozšíření Azure Policy pro VS Code usnadňuje procházení prostředků a zjišťování aliasů.

Poznámka

Rozšíření VS Code zpřístupňuje pouze Resource Manager režimu a nezobrazuje žádné vlastnosti režimu poskytovatele prostředků.

Azure CLI

V Azure CLI se k hledání aliasů prostředků používá az provider skupina příkazů. Obor názvů Microsoft.Storage vyfiltrovat na základě podrobností o prostředku Azure, které jsme získali dříve.

# Login first with az login if not using Cloud Shell

# Get Azure Policy aliases for type Microsoft.Storage
az provider show --namespace Microsoft.Storage --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"

Ve výsledcích vidíme alias podporovaný účty úložiště s názvem supportsHttpsTrafficOnly. Tato existence tohoto aliasu znamená, že můžeme napsat zásadu, která vynutí naše obchodní požadavky.

Azure PowerShell

v Azure PowerShell Get-AzPolicyAlias rutina slouží k hledání aliasů prostředků. vyfiltrujeme obor názvů Microsoft. Storage na základě detailů, které jsme o prostředku Azure dostali dřív.

# Login first with Connect-AzAccount if not using Cloud Shell

# Use Get-AzPolicyAlias to list aliases for Microsoft.Storage
(Get-AzPolicyAlias -NamespaceMatch 'Microsoft.Storage').Aliases

Podobně jako Azure CLI zobrazuje výsledky aliasy podporované účty úložiště s názvem supportsHttpsTrafficOnly.

Určení efektu, který se má použít

Rozhodnutí o tom, co dělat s prostředky, které nedodržují předpisy, je skoro stejně důležité jako rozhodování, co vyhodnotit na prvním místě. Každá možná odpověď na prostředek, který nedodržuje předpisy, se nazývá efekt. Tento efekt řídí, jestli je prostředek, který nedodržuje předpisy, přihlášen, je blokovaný, má připojená data, nebo má přidružené nasazení pro uvedení prostředku zpátky do stavu kompatibility.

V našem příkladu je odepřený efekt, protože nepotřebujeme, aby byly prostředky, které nedodržují předpisy, vytvořené v prostředí Azure. Audit je vhodný první volbou pro účinek zásad, která určuje, jaký dopad zásad je před tím, než je nastavování zamítnuto. Jedním ze způsobů, jak změnit účinek na přiřazení, je parametrizovat efekt. Podrobnosti o tom, jak najdete v níže uvedených parametrech .

Vytvoření definice

Teď máme podrobnosti o vlastnosti a alias pro to, co plánujeme spravovat. V dalším kroku vytvoříte samotné pravidlo zásad. Pokud ještě neznáte jazyk zásad, strukturu definice referenčních zásad pro strukturu definice zásad. Tady je prázdná šablona toho, co definice zásad vypadá takto:

{
    "properties": {
        "displayName": "<displayName>",
        "description": "<description>",
        "mode": "<mode>",
        "parameters": {
                <parameters>
        },
        "policyRule": {
            "if": {
                <rule>
            },
            "then": {
                "effect": "<effect>"
            }
        }
    }
}

Metadata

První tři komponenty jsou metadata zásad. Tyto komponenty se dají snadno zadat, protože víme, pro které pravidlo vytváříme. Režim je primárně o značkách a umístění prostředků. Vzhledem k tomu, že nepotřebujeme omezit vyhodnocení na prostředky, které podporují značky, použijeme pro režim hodnotu All .

"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",

Parametry

Přestože jsme nepoužili parametr pro změnu hodnocení, chceme použít parametr a povolit změnu efektu pro řešení potíží. Definujeme parametr effectType a omezíme ho jenom na Deny a disabled. Tyto dvě možnosti odpovídají našim obchodním požadavkům. Blok dokončených parametrů vypadá jako v tomto příkladu:

"parameters": {
    "effectType": {
        "type": "string",
        "defaultValue": "Deny",
        "allowedValues": [
            "Deny",
            "Disabled"
        ],
        "metadata": {
            "displayName": "Effect",
            "description": "Enable or disable the execution of the policy"
        }
    }
},

Pravidlo zásad

Sestavování pravidla zásad je posledním krokem při sestavování vlastní definice zásad. Identifikovali jsme dva příkazy, které se mají testovat:

  • typ účtu úložiště je Microsoft. Storage/storageAccounts
  • SupportsHttpsTrafficOnly účtu úložiště není pravda .

Protože potřebujeme, aby oba tyto příkazy byly pravdivé, použijeme logický operátor allOf . Parametr effectType předáte k tomuto efektu namísto provedení statické deklarace. Naše dokončené pravidlo vypadá jako v tomto příkladu:

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
        },
        {
            "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
            "notEquals": "true"
        }
    ]
},
"then": {
    "effect": "[parameters('effectType')]"
}

Definice dokončena

Tady je naše dokončená definice se všemi třemi částmi definovaných zásad:

{
    "properties": {
        "displayName": "Deny storage accounts not using only HTTPS",
        "description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
        "mode": "all",
        "parameters": {
            "effectType": {
                "type": "string",
                "defaultValue": "Deny",
                "allowedValues": [
                    "Deny",
                    "Disabled"
                ],
                "metadata": {
                    "displayName": "Effect",
                    "description": "Enable or disable the execution of the policy"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Storage/storageAccounts"
                    },
                    {
                        "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
                        "notEquals": "true"
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effectType')]"
            }
        }
    }
}

K vytvoření nové zásady se dá použít dokončená definice. portál a každá sada SDK (Azure CLI, Azure PowerShell a REST API) přijímají definici různými způsoby, proto si projděte příkazy pro každý, abyste ověřili správné využití. Pak ji přiřaďte pomocí parametrizovaného efektu k odpovídajícím prostředkům pro správu zabezpečení účtů úložiště.

Vyčištění prostředků

Pokud jste dokončili práci s prostředky z tohoto kurzu, pomocí následujícího postupu odstraňte všechna přiřazení a definice, které jste vytvořili výše:

  1. Vyberte definice (nebo přiřazení , pokud se pokoušíte odstranit přiřazení) v části vytváření obsahu v levé části stránky Azure Policy.

  2. Vyhledejte novou definici iniciativy nebo zásady (nebo přiřazení), kterou chcete odebrat.

  3. Klikněte na řádek pravým tlačítkem nebo vyberte tři tečky na konci definice (nebo přiřazení) a pak vyberte Odstranit definici (nebo Odstranit přiřazení).

Opakování

V tomto kurzu jste úspěšně provedli následující úlohy:

  • Identifikujte vaše podnikové požadavky.
  • Namapovaný každý požadavek na vlastnost prostředku Azure
  • Namapována vlastnost na alias.
  • Zjistili efekt, který se má použít
  • Složená definice zásad

Další kroky

V dalším kroku vytvořte a přiřaďte zásadu pomocí vlastní definice zásad: