Automatizace obměně tajného klíče pro prostředky, které mají dvě sady přihlašovacích údajů pro ověřování
Nejlepším způsobem, jak se ověřit ve službách Azure, je použití spravované identity, ale existují některé scénáře, kdy to není možnost. V takových případech se používají přístupové klíče nebo hesla. Přístupové klíče a hesla byste měli často obměňovat.
V tomto kurzu se dozvíte, jak automatizovat pravidelnou obměnu tajných kódů pro databáze a služby, které používají dvě sady ověřovacích přihlašovacích údajů. Konkrétně tento kurz ukazuje, jak otočit klíče účtu služby Azure Storage uložené ve službě Azure Key Vault jako tajné kódy. Použijete funkci aktivovanou oznámením služby Azure Event Grid.
Poznámka:
Pro služby účtu úložiště se k autorizaci požadavků doporučuje použití ID Microsoft Entra. Další informace naleznete v tématu Autorizace přístupu k objektům blob pomocí Microsoft Entra ID. Existují služby, které vyžadují připojovací řetězec účtu úložiště s přístupovými klíči. Pro tento scénář doporučujeme toto řešení.
Toto je řešení obměně popsané v tomto kurzu:
V tomto řešení azure Key Vault ukládá jednotlivé přístupové klíče účtu úložiště jako verze stejného tajného kódu, které se v následujících verzích střídají mezi primárním a sekundárním klíčem. Když je jeden přístupový klíč uložený v nejnovější verzi tajného kódu, vygeneruje se alternativní klíč a přidá se do služby Key Vault jako nová nejnovější verze tajného kódu. Řešení poskytuje celý cyklus obměna aplikace, aby se aktualizoval na nejnovější znovu vygenerovaný klíč.
- Třicet dní před datem vypršení platnosti tajného kódu služba Key Vault publikuje událost blížící se vypršení platnosti do event Gridu.
- Event Grid zkontroluje odběry událostí a používá HTTP POST k volání koncového bodu aplikace funkcí, který je přihlášený k odběru události.
- Aplikace funkcí identifikuje alternativní klíč (nikoli nejnovější klíč) a zavolá účet úložiště, který ho znovu vygeneruje.
- Aplikace funkcí přidá nový znovu vygenerovaný klíč do služby Azure Key Vault jako novou verzi tajného kódu.
Požadavky
- Předplatné Azure. Vytvořte si ho zdarma.
- Azure Cloud Shell. Tento kurz používá portál Cloud Shell s prostředím PowerShell env.
- Azure Key Vault.
- Dva účty úložiště Azure.
Poznámka:
Obměna klíče sdíleného účtu úložiště odvolá na základě tohoto klíče sdílený přístupový podpis (SAS) na úrovni účtu. Po obměně klíčů účtu úložiště musíte znovu vygenerovat tokeny SAS na úrovni účtu, abyste se vyhnuli přerušení aplikací.
Tento odkaz pro nasazení můžete použít, pokud nemáte existující trezor klíčů a existující účty úložiště:
V části Skupina prostředků vyberte Vytvořit novou. Pojmenujte rotaci trezoru skupiny a pak vyberte OK.
Vyberte Zkontrolovat a vytvořit.
Vyberte Vytvořit.
Teď budete mít trezor klíčů a dva účty úložiště. Toto nastavení můžete ověřit v Azure CLI nebo Azure PowerShellu spuštěním tohoto příkazu:
az resource list -o table -g vaultrotation
Výsledek bude vypadat přibližně takto:
Name ResourceGroup Location Type Status
----------------------- -------------------- ---------- --------------------------------- --------
vaultrotation-kv vaultrotation westus Microsoft.KeyVault/vaults
vaultrotationstorage vaultrotation westus Microsoft.Storage/storageAccounts
vaultrotationstorage2 vaultrotation westus Microsoft.Storage/storageAccounts
Vytvoření a nasazení funkce obměně klíčů
Dále vytvoříte aplikaci funkcí s identitou spravovanou systémem a dalšími požadovanými komponentami. Také nasadíte funkci obměně klíčů účtu úložiště.
Funkce obměně aplikace funkcí vyžaduje následující komponenty a konfiguraci:
- Plán služby Aplikace Azure
- Účet úložiště pro správu triggerů aplikace funkcí
- Zásady přístupu pro přístup k tajným kódům ve službě Key Vault
- Role Operátor klíče účtu úložiště přiřazená k aplikaci funkcí, aby mohl přistupovat k přístupovým klíčům účtu úložiště
- Funkce rotace klíčů s triggerem události a triggerem HTTP (obměnou na vyžádání)
- Odběr události Event Gridu pro událost SecretNearExpiry
Vyberte odkaz nasazení šablony Azure:
V seznamu skupin prostředků vyberte trezor.
Do pole RG účtu úložiště zadejte název skupiny prostředků, ve které se nachází váš účet úložiště. Ponechte výchozí hodnotu [resourceGroup().name], pokud už je váš účet úložiště umístěný ve stejné skupině prostředků, ve které nasadíte funkci obměna klíčů.
Do pole Název účtu úložiště zadejte název účtu úložiště, který obsahuje přístupové klíče, které chcete otočit. Pokud používáte účet úložiště vytvořený v požadavcích, ponechte výchozí hodnotu [concat(resourceGroup().name; 'storage')].
Do pole RG služby Key Vault zadejte název skupiny prostředků, ve které se nachází váš trezor klíčů. Pokud váš trezor klíčů již existuje ve stejné skupině prostředků, ve které nasadíte funkci obměny klíčů, ponechte výchozí hodnotu [resourceGroup().name].
Do pole Název trezoru klíčů zadejte název trezoru klíčů. Pokud používáte trezor klíčů vytvořený v požadavcích, ponechte výchozí hodnotu [concat(resourceGroup().name; '-kv').
V poli Typ plánu služby App Service vyberte plán hostování. Plán Premium je potřeba jenom v případě, že je váš trezor klíčů za bránou firewall.
Do pole Název aplikace funkcí zadejte název aplikace funkcí.
Do pole Název tajného kódu zadejte název tajného kódu, do kterého budete ukládat přístupové klíče.
Do pole Adresa URL úložiště zadejte umístění kódu funkce na GitHubu. V tomto kurzu můžete použít https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .
Vyberte Zkontrolovat a vytvořit.
Vyberte Vytvořit.
Po dokončení předchozích kroků budete mít účet úložiště, serverovou farmu, aplikaci funkcí a Application Insights. Po dokončení nasazení se zobrazí tato stránka:
Poznámka:
Pokud dojde k selhání, můžete výběrem možnosti Znovu nasadit nasazení komponent.
Šablony nasazení a kód pro funkci rotace najdete v ukázkách Azure.
Přidání přístupových klíčů účtu úložiště k tajným kódům služby Key Vault
Nejprve nastavte zásady přístupu tak, aby udělily oprávnění ke správě tajných kódů instančnímu objektu uživatele:
az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list
Teď můžete vytvořit nový tajný klíč s přístupovým klíčem účtu úložiště jako jeho hodnotou. Budete také potřebovat ID prostředku účtu úložiště, dobu platnosti tajného klíče a ID klíče, aby funkce rotace mohl klíč vygenerovat v účtu úložiště.
Určete ID prostředku účtu úložiště. Tuto hodnotu najdete ve id
vlastnosti.
az storage account show -n vaultrotationstorage
Vytvořte seznam přístupových klíčů účtu úložiště, abyste mohli získat hodnoty klíčů:
az storage account keys list -n vaultrotationstorage
Přidejte do trezoru klíčů tajný klíč s dobou platnosti po dobu 60 dnů, ID prostředku účtu úložiště a pro demonstrační účely aktivujte obměnu okamžitě na zítra. Spusťte tento příkaz s použitím načtených hodnot pro key1Value
a storageAccountResourceId
:
tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey --vault-name vaultrotation-kv --value <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate
Tento tajný kód aktivuje SecretNearExpiry
událost během několika minut. Tato událost zase aktivuje funkci pro otočení tajného kódu s vypršením platnosti nastavenou na 60 dnů. V této konfiguraci by se událost SecretNearExpiry aktivovala každých 30 dnů (30 dní před vypršením platnosti) a funkce obměna se bude střídat mezi klíčem1 a klíčem2.
Ověření opětovného vygenerování přístupových klíčů můžete ověřit načtením klíče účtu úložiště a tajného klíče služby Key Vault a jejich porovnáním.
K získání tajných informací použijte tento příkaz:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey
Všimněte si, že CredentialId
se aktualizuje na alternativní a keyName
znovu value
se vygeneruje:
Načtení přístupových klíčů pro porovnání hodnot:
az storage account keys list -n vaultrotationstorage
Všimněte si, že value
klíč je stejný jako tajný klíč v trezoru klíčů:
Použití existující funkce obměně pro více účtů úložiště
Stejnou aplikaci funkcí můžete znovu použít k obměně klíčů pro více účtů úložiště.
Pokud chcete přidat klíče účtu úložiště do existující funkce pro obměnu, potřebujete:
- Role Operátor klíče účtu úložiště přiřazená k aplikaci funkcí, aby mohl přistupovat k přístupovým klíčům účtu úložiště.
- Odběr události Event Gridu pro událost SecretNearExpiry .
Vyberte odkaz nasazení šablony Azure:
V seznamu skupin prostředků vyberte trezor.
Do pole RG účtu úložiště zadejte název skupiny prostředků, ve které se nachází váš účet úložiště. Ponechte výchozí hodnotu [resourceGroup().name], pokud už je váš účet úložiště umístěný ve stejné skupině prostředků, ve které nasadíte funkci obměna klíčů.
Do pole Název účtu úložiště zadejte název účtu úložiště, který obsahuje přístupové klíče, které chcete otočit.
Do pole RG služby Key Vault zadejte název skupiny prostředků, ve které se nachází váš trezor klíčů. Pokud váš trezor klíčů již existuje ve stejné skupině prostředků, ve které nasadíte funkci obměny klíčů, ponechte výchozí hodnotu [resourceGroup().name].
Do pole Název trezoru klíčů zadejte název trezoru klíčů.
Do pole Název aplikace funkcí zadejte název aplikace funkcí.
Do pole Název tajného kódu zadejte název tajného kódu, do kterého budete ukládat přístupové klíče.
Vyberte Zkontrolovat a vytvořit.
Vyberte Vytvořit.
Přidání přístupového klíče účtu úložiště k tajným kódům služby Key Vault
Určete ID prostředku účtu úložiště. Tuto hodnotu najdete ve id
vlastnosti.
az storage account show -n vaultrotationstorage2
Vytvořte seznam přístupových klíčů účtu úložiště, abyste získali hodnotu key2:
az storage account keys list -n vaultrotationstorage2
Přidejte do trezoru klíčů tajný klíč s dobou platnosti po dobu 60 dnů, ID prostředku účtu úložiště a pro demonstrační účely aktivujte obměnu okamžitě na zítra. Spusťte tento příkaz s použitím načtených hodnot pro key2Value
a storageAccountResourceId
:
tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey2 --vault-name vaultrotation-kv --value <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate
K získání tajných informací použijte tento příkaz:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey2
Všimněte si, že CredentialId
se aktualizuje na alternativní a keyName
znovu value
se vygeneruje:
Načtení přístupových klíčů pro porovnání hodnot:
az storage account keys list -n vaultrotationstorage
Všimněte si, že value
klíč je stejný jako tajný klíč v trezoru klíčů:
Zakázání obměně tajných kódů
Obměně tajného kódu můžete zakázat jednoduše odstraněním odběru služby Event Grid pro tento tajný klíč. Použijte rutinu Remove-AzEventGridSubscription azure PowerShellu nebo příkaz Azure CLI az event grid event--subscription delete.
Funkce obměny služby Key Vault pro dvě sady přihlašovacích údajů
Šablona funkcí otáčení pro dvě sady přihlašovacích údajů a několik připravených k použití funkcí:
Poznámka:
Tyto funkce rotace vytvářejí člen komunity, nikoli Microsoft. Funkce komunity nejsou podporovány v rámci žádného programu nebo služby podpory Společnosti Microsoft a jsou zpřístupněny jako is bez jakékoli záruky.
Další kroky
- Kurz: Obměně tajných kódů pro jednu sadu přihlašovacích údajů
- Přehled: Monitorování služby Key Vault pomocí služby Azure Event Grid
- Postupy: Vytvoření první funkce na webu Azure Portal
- Postupy: Příjem e-mailů při změně tajného kódu služby Key Vault
- Referenční informace: Schéma událostí Azure Event Gridu pro Azure Key Vault