Správa tajných kódů v šabloně ARM čtením z trezoru klíčů Azure Key Vault

Dokončeno

Infrastruktura jako kód (IaC) znamená popis požadavků na infrastrukturu v člověkem čitelných textových souborech. Šablony Azure Resource Manageru (ARM) jsou formou IaC.

Stejně jako v případě kódu aplikací můžete spravovat kód infrastruktury v systému pro správu verzí, jako je třeba Git. Díky tomu pak můžete spolupracovat s ostatními a sledovat změny požadavků na infrastrukturu tak, jak se postupně vyvíjejí.

Podobně jako u kódu aplikací byste neměli v šablonách ARM pevně kódovat citlivé informace, jako jsou hesla a klíče rozhraní API. Jinak bude mít kdokoli, kdo má přístup pro čtení k vašemu úložišti, přístup k těmto tajným informacím.

I když by k citlivým informacím měli mít přístup jenom oprávnění uživatelé ve vaší organizaci, vyžadují šablony ARM tyto informace také. Azure Key Vault je jedním ze způsobů, který pomáhá chránit citlivé informace.

Azure Key Vault pomáhá chránit citlivé informace

Služba Azure Key Vault funguje jako zabezpečené úložiště tajných kódů. Key Vault vám umožní vytvořit několik zabezpečených kontejnerů označovaných jako trezory. Tyto trezory využívají moduly hardwarového zabezpečení (HSM). Trezory pomáhají snížit riziko nechtěné ztráty informací o zabezpečení tím, že centralizují ukládání tajných kódů aplikací. Trezory také řídí a protokolují přístup k položkám, které jsou v nich uložené.

Key Vault dokáže ukládat klíče i tajné kódy. Díky jeho mnoha funkcím představuje vhodnou volbu pro správu tajných kódů, ale je také vhodný pro používání v procesu nasazování.

  • Řízení přístupu na základě role: Trezor klíčů můžete spravovat pomocí různých rolí, takže můžete zajistit, že ho budou moct používat aplikace i různé úrovně správců.

  • Povolení uživatelů a aplikací: Trezor klíčů je možné nakonfigurovat tak, aby k němu mohli mít přístup konkrétní uživatelé i aplikace. Pro aplikace vytvoříte instanční objekt. Ve skutečnosti můžete trezor klíčů nakonfigurovat tak, aby k němu měly přístup pouze instanční objekty.

    Poznámka:

    Instanční objekt je identita vytvořená pro používání s aplikacemi, hostovanými službami a automatizovanými nástroji, která umožňuje přístup k prostředkům Azure. Omezíte přístup k prostředkům tím, že se instančnímu objektu pouze přiřadí role nebo podmnožina rolí s omezenými přístupovými právy. Tento přístup umožňuje podrobnější kontrolu nad tím, k čemu a do jaké míry může něco přistupovat u vašich prostředků.

  • Interakce se šablonou ARM: Během nasazování šablony ARM můžete číst z trezoru klíčů. K tomu, aby to tak fungovalo, je potřeba systém trochu nakonfigurovat. Další podrobnosti obsahuje následující část.

Konfigurace oprávnění

Zvolili jste si Key Vault jako službu, ve které budete ukládat své přihlašovací údaje. Chcete mít možnost odtud číst tajné kódy během nasazování, abyste například mohli nastavit heslo virtuálního počítače.

Budete muset provést několik konfiguračních kroků a nastavit Key Vault tak, aby z něj bylo možné číst během nasazování. Postupujte takto:

  1. Povolte Key Vault pro nasazování: Musíte povolit čtení z Key Vaultu během nasazování. Toto nastavení můžete předat při vytváření nebo ho můžete později doplnit.

  2. Uživatel potřebuje oprávnění pro nasazení u skupiny prostředků: To se nijak neliší od jiných nasazení. Pokud jste však skupinu prostředků ještě nevytvořili, můžete přiřadit určitou roli, abyste zajistili, že do ní budete moct nasazovat.

  3. Uživatel potřebuje správný přístup do trezoru klíčů: Musíte zajistit, abyste měli správný přístup do trezoru klíčů, když z něj budete během nasazování číst. Když vytvoříte trezor klíčů, vytvoří tento trezor klíčů zásady přístupu, které přidělí uživatelská práva pro správu všech tajných kódů, klíčů a certifikátů.

Konfigurace trezoru klíčů Key Vault pro nasazování

Nakonfigurujete instanci trezoru klíčů Key Vault, aby z ní bylo možné číst přihlašovací údaje během nasazování šablony ARM.

Když budete chtít povolit Key Vault pro nasazování, můžete předat určité nastavení během vytváření instance trezoru klíčů Key Vault nebo toto nastavení můžete doplnit později. V PowerShellu k tomu slouží přepínač -EnabledForTemplateDeployment. V rozhraní Azure CLI k tomu slouží argument --enabled-for-template-deployment, u kterého je také potřeba předat hodnotu true.

Poznámka:

Azure CLI navíc vyžaduje, abyste předali logickou hodnotu s hodnotou true.

Uživatel potřebuje oprávnění pro nasazení u trezoru klíčů Key Vault a u skupiny prostředků

Než se pokusíte o nasazení a čtení tajných kódů z trezoru klíčů, musíte zajistit, abyste měli oprávnění pro nasazení. Toto oprávnění poskytují dvě role:

  • Owner: Pokud jste vytvořili trezor klíčů, máte tuto roli automaticky.
  • Contributor: Tato role vám uděluje přístup ke správě všech tajných kódů. Pokud jste trezor klíčů nevytvořili, je nejjednodušší, když si přidělíte roli Contributor.

Další možností je, že vytvoříte a přiřadíte vlastní roli a zajistíte, aby tato role obsahovala oprávnění Microsoft.KeyVault/vaults/deploy/action.

Konfigurace souboru parametrů nasazení

Místo určování všech parametrů a odpovídajících hodnot jako párů klíč-hodnota během nasazování můžete použít soubor parametrů.

V tomto souboru parametrů určíte, o který trezor klíčů a o který tajný kód v tomto trezoru klíčů se zajímáte. Provedete to tak, že upravíte parametr a pak aktualizujete šablonu nasazení, aby používala tento parametr.

Poznámka:

Šablona neobsahuje žádnou zmínku o trezoru klíčů ani jeho tajném kódu. Konfigurace, kterou provádíte, se odehrává v souboru parametrů.

Konfigurace trezoru klíčů a tajného kódu pro určitý parametr

V souboru parametrů a pro určitý parametr použijte odkaz na trezor klíčů, ke kterému máte oprávnění pro nasazení. Pak určete tajný kód, který vás zajímá. Na tajný kód se odkazujete pomocí názvu. Během nasazování se tato konfigurace přeloží na hodnotu tajného kódu. Tady je parametr s názvem myPassword nakonfigurovaný tak, aby používal konkrétní trezor klíčů a tajný kód s názvem databaseSecret.

"myPassword" : {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>",
      "secretName": "databaseSecret"
    }
  }
}

V předchozím kódu JSON určíte úplné ID trezoru klíčů a pak požádáte o tajný kód databaseSecret. Hodnota tohoto tajného kódu se pak extrahuje a přiřadí parametru myPassword.

Přiřazení parametru k heslu prostředku

Tento krok nesouvisí s trezorem klíčů. Zajišťuje, aby zamýšlený prostředek použil parametr nakonfigurovaný k přečtení hodnoty tajného kódu z trezoru klíčů. Níže je uvedený zkrácený fragment kódu z virtuálního počítače v souboru šablony znázorňující element adminPassword, který čte z parametru myPassword. Hodnota tajného kódu tak bude načtena z trezoru klíčů v době nasazování a bude přiřazena elementu adminPassword.

{
  "osProfile": {
    "adminPassword": "[parameters('myPassword')]"
  }
}