Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Key Vault , anahtarlar, parolalar ve sertifikalar gibi gizli diziler için güvenli bir depo sağlayan bir bulut hizmetidir. Bu makale, anahtar kasası ve anahtar oluşturmak için Terraform dosyası dağıtma işlemine odaklanır.
Terraform , bulut altyapısının tanımlanmasını, önizlemesini ve dağıtımını sağlar. Terraform kullanarak HCL söz dizimlerini kullanarak yapılandırma dosyaları oluşturursunuz. HCL söz dizimi, Azure gibi bulut sağlayıcısını ve bulut altyapınızı oluşturan öğeleri belirtmenize olanak tanır. Yapılandırma dosyalarınızı oluşturduktan sonra, altyapı değişikliklerinizin dağıtılmadan önce önizlemesini görüntülemenizi sağlayan bir yürütme planı oluşturursunuz. Değişiklikleri doğruladıktan sonra, altyapıyı dağıtmak için yürütme planını uygularsınız.
Bu makalede şunların nasıl yapılacağını öğreneceksiniz:
- random_pet kullanarak Azure kaynak grubu adı için rastgele bir değer oluşturma
- azurerm_resource_group kullanarak Azure kaynak grubu oluşturma
- random_string kullanarak rastgele bir değer oluşturma
- azurerm_key_vault kullanarak Azure anahtar kasası oluşturma
- azurerm_key_vault_key kullanarak Azure anahtar kasası anahtarı oluşturma
Önkoşullar
Terraform kodunu uygulama
Uyarı
Bu makalenin örnek kodu Azure Terraform GitHub deposunda bulunur. Terraform'un geçerli ve önceki sürümlerinden test sonuçlarını içeren günlük dosyasını görüntüleyebilirsiniz.
Örnek Terraform kodunu test etmek ve çalıştırmak için bir dizin oluşturun. Geçerli dizin yapın.
providers.tfadlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }main.tfadlı bir dosya oluşturun ve aşağıdaki kodu ekleyin: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" } }variables.tfadlı bir dosya oluşturun ve aşağıdaki kodu ekleyin: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 }outputs.tfadlı bir dosya oluşturun ve aşağıdaki kodu ekleyin: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 }
Terraform'u başlatma
Terraform dağıtımını başlatmak için terraform init komutunu çalıştırın. Bu komut, Azure kaynaklarınızı yönetmek için gereken Azure sağlayıcısını indirir.
terraform init -upgrade
Önemli noktalar:
-
-upgradeparametresi, gerekli sağlayıcı eklentilerini yapılandırmanın sürüm kısıtlamalarına uygun en yeni sürüme yükseltir.
Terraform için bir yürütme planı oluşturun
Terraform planını çalıştırarak yürütme planı oluşturun.
terraform plan -out main.tfplan
Önemli noktalar:
-
terraform plankomutu bir yürütme planı oluşturur, ancak onu yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar. - İsteğe bağlı
-outparametresi, plan için bir çıkış dosyası belirtmenize olanak tanır.-outparametresinin kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
Terraform yürütme planını uygula
Yürütme planını bulut altyapınıza uygulamak için terraform apply komutunu çalıştırın.
terraform apply main.tfplan
Önemli noktalar:
- Örnek
terraform applykomutu, daha önceterraform plan -out main.tfplankomutunu çalıştırmış olduğunuzu varsayar. -
-outparametresi için farklı bir dosya adı belirttiyseniz,terraform applyçağrısında aynı dosya adını kullanın. - parametresini
-outkullanmadıysanız, parametresiz olarak çağırınterraform apply.
Sonuçları doğrulama
Azure anahtar kasası adını alın.
azurerm_key_vault_name=$(terraform output -raw azurerm_key_vault_name)Az keyvault key list komutunu çalıştırarak anahtar kasasının anahtarları hakkındaki bilgileri görüntüleyin.
az keyvault key list --vault-name $azurerm_key_vault_name
Kaynakları temizle
Terraform aracılığıyla oluşturulan kaynaklara artık ihtiyacınız kalmadığında aşağıdaki adımları uygulayın:
terraform plan çalıştırın ve
destroyadlı bayrağı belirtin.terraform plan -destroy -out main.destroy.tfplanÖnemli noktalar:
-
terraform plankomutu bir yürütme planı oluşturur, ancak onu yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar. - İsteğe bağlı
-outparametresi, plan için bir çıkış dosyası belirtmenize olanak tanır.-outparametresinin kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
-
Yürütme planını uygulamak için terraform apply komutunu çalıştırın.
terraform apply main.destroy.tfplan
Azure'da Terraform sorunlarını giderme
Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme.