Rychlý start: Vytvoření trezoru klíčů Azure a klíče pomocí Terraformu
Azure Key Vault je cloudová služba, která poskytuje zabezpečené úložiště tajných kódů, jako jsou klíče, hesla a certifikáty. Tento článek se zaměřuje na proces nasazení souboru Terraformu pro vytvoření trezoru klíčů a klíče.
Terraform umožňuje definici, verzi Preview a nasazení cloudové infrastruktury. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe HCL umožňuje určit poskytovatele cloudu, například Azure, a prvky, které tvoří vaši cloudovou infrastrukturu. Po vytvoření konfiguračních souborů vytvoříte plán provádění , který vám umožní zobrazit náhled změn infrastruktury před jejich nasazením. Po ověření změn použijete plán spuštění k nasazení infrastruktury.
V tomto článku získáte informace o těchto tématech:
- Vytvořte náhodnou hodnotu pro název skupiny prostředků Azure pomocí random_pet
- Vytvoření skupiny prostředků Azure pomocí azurerm_resource_group
- Vytvoření náhodné hodnoty pomocí random_string
- Vytvoření trezoru klíčů Azure pomocí azurerm_key_vault
- Vytvoření klíče trezoru klíčů Azure pomocí azurerm_key_vault_key
Požadavky
Implementace kódu Terraformu
Poznámka
Ukázkový kód pro tento článek se nachází v úložišti Azure Terraform GitHub. Můžete zobrazit soubor protokolu obsahující výsledky testů z aktuální a předchozí verze Terraformu.
Projděte si další články a ukázkový kód, který ukazuje, jak používat Terraform ke správě prostředků Azure.
Vytvořte adresář, ve kterém otestujete a spustíte ukázkový kód Terraformu a nastavíte ho jako aktuální adresář.
Vytvořte soubor s názvem
providers.tf
a vložte následující kód:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Vytvořte soubor s názvem
main.tf
a vložte následující kód:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { name = random_pet.rg_name.id location = var.resource_group_location } data "azurerm_client_config" "current" {} resource "random_string" "azurerm_key_vault_name" { length = 13 lower = true numeric = false special = false upper = false } locals { current_user_id = coalesce(var.msi_id, data.azurerm_client_config.current.object_id) } resource "azurerm_key_vault" "vault" { name = coalesce(var.vault_name, "vault-${random_string.azurerm_key_vault_name.result}") location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name tenant_id = data.azurerm_client_config.current.tenant_id sku_name = var.sku_name soft_delete_retention_days = 7 access_policy { tenant_id = data.azurerm_client_config.current.tenant_id object_id = local.current_user_id key_permissions = var.key_permissions secret_permissions = var.secret_permissions } } resource "random_string" "azurerm_key_vault_key_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_key_vault_key" "key" { name = coalesce(var.key_name, "key-${random_string.azurerm_key_vault_key_name.result}") key_vault_id = azurerm_key_vault.vault.id key_type = var.key_type key_size = var.key_size key_opts = var.key_ops rotation_policy { automatic { time_before_expiry = "P30D" } expire_after = "P90D" notify_before_expiry = "P29D" } }
Vytvořte soubor s názvem
variables.tf
a vložte následující kód:variable "resource_group_location" { type = string description = "Location for all resources." default = "eastus" } variable "resource_group_name_prefix" { type = string description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." default = "rg" } variable "vault_name" { type = string description = "The name of the key vault to be created. The value will be randomly generated if blank." default = "" } variable "key_name" { type = string description = "The name of the key to be created. The value will be randomly generated if blank." default = "" } variable "sku_name" { type = string description = "The SKU of the vault to be created." default = "standard" validation { condition = contains(["standard", "premium"], var.sku_name) error_message = "The sku_name must be one of the following: standard, premium." } } variable "key_permissions" { type = list(string) description = "List of key permissions." default = ["List", "Create", "Delete", "Get", "Purge", "Recover", "Update", "GetRotationPolicy", "SetRotationPolicy"] } variable "secret_permissions" { type = list(string) description = "List of secret permissions." default = ["Set"] } variable "key_type" { description = "The JsonWebKeyType of the key to be created." default = "RSA" type = string validation { condition = contains(["EC", "EC-HSM", "RSA", "RSA-HSM"], var.key_type) error_message = "The key_type must be one of the following: EC, EC-HSM, RSA, RSA-HSM." } } variable "key_ops" { type = list(string) description = "The permitted JSON web key operations of the key to be created." default = ["decrypt", "encrypt", "sign", "unwrapKey", "verify", "wrapKey"] } variable "key_size" { type = number description = "The size in bits of the key to be created." default = 2048 } variable "msi_id" { type = string description = "The Managed Service Identity ID. If this value isn't null (the default), 'data.azurerm_client_config.current.object_id' will be set to this value." default = null }
Vytvořte soubor s názvem
outputs.tf
a vložte následující kód:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "azurerm_key_vault_name" { value = azurerm_key_vault.vault.name } output "azurerm_key_vault_id" { value = azurerm_key_vault.vault.id }
Inicializace Terraformu
Spuštěním příkazu terraform init inicializujete nasazení Terraformu. Tento příkaz stáhne poskytovatele Azure potřebného ke správě prostředků Azure.
terraform init -upgrade
Klíčové body:
- Parametr
-upgrade
upgraduje potřebné moduly plug-in poskytovatele na nejnovější verzi, která vyhovuje omezením verzí konfigurace.
Vytvoření plánu provádění Terraformu
Spuštěním plánu terraformu vytvořte plán provádění.
terraform plan -out main.tfplan
Klíčové body:
- Příkaz
terraform plan
vytvoří plán provádění, ale nespustí ho. Místo toho určí, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provedete jakékoli změny skutečných prostředků. - Volitelný
-out
parametr umožňuje zadat výstupní soubor pro plán. Použití parametru-out
zajistí, že plán, který jste zkontrolovali, je přesně ten, který se použije. - Další informace o trvalých plánech provádění a zabezpečení najdete v části upozornění zabezpečení.
Použití plánu spuštění Terraformu
Spuštěním příkazu terraform apply použijte plán spuštění pro vaši cloudovou infrastrukturu.
terraform apply main.tfplan
Klíčové body:
- Ukázkový
terraform apply
příkaz předpokládá, že jste dříve spustiliterraform plan -out main.tfplan
příkaz . - Pokud jste pro parametr zadali
-out
jiný název souboru, použijte stejný název souboru ve voláníterraform apply
. - Pokud jste parametr nepoužíli, zavolejte
terraform apply
ho-out
bez jakýchkoli parametrů.
Ověření výsledků
Získejte název trezoru klíčů Azure.
azurerm_key_vault_name=$(terraform output -raw azurerm_key_vault_name)
Spuštěním příkazu az keyvault key list zobrazte informace o klíčích trezoru klíčů.
az keyvault key list --vault-name $azurerm_key_vault_name
Vyčištění prostředků
Pokud už prostředky vytvořené prostřednictvím Terraformu nepotřebujete, proveďte následující kroky:
Spusťte plán terraformu
destroy
a zadejte příznak.terraform plan -destroy -out main.destroy.tfplan
Klíčové body:
- Příkaz
terraform plan
vytvoří plán provádění, ale nespustí ho. Místo toho určí, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provedete jakékoli změny skutečných prostředků. - Volitelný
-out
parametr umožňuje zadat výstupní soubor pro plán. Použití parametru-out
zajistí, že plán, který jste zkontrolovali, je přesně ten, který se použije. - Další informace o trvalých plánech provádění a zabezpečení najdete v části upozornění zabezpečení.
- Příkaz
Spuštěním příkazu terraform apply použijte plán provádění.
terraform apply main.destroy.tfplan
Řešení potíží s Terraformem v Azure
Řešení běžných problémů při používání Terraformu v Azure