Terraform verifiëren met beheerde identiteit voor Azure-services
Terraform maakt de definitie, preview en implementatie van de cloudinfrastructuur mogelijk. Met Behulp van Terraform maakt u configuratiebestanden met behulp van de HCL-syntaxis. Met de HCL-syntaxis kunt u de cloudprovider opgeven, zoals Azure, en de elementen waaruit uw cloudinfrastructuur bestaat. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van uw infrastructuurwijzigingen kunt bekijken voordat ze worden geïmplementeerd. Zodra u de wijzigingen hebt gecontroleerd, past u het uitvoeringsplan toe om de infrastructuur te implementeren.
Beheerde identiteiten voor Azure-resources worden gebruikt voor verificatie bij Azure Active Directory. HashiCorp raadt u aan een service-principal of beheerde identiteit te gebruiken als u Terraform op een niet-interactieve manier uitvoert. Er zijn twee typen beheerde identiteiten: door het systeem toegewezen en door de gebruiker toegewezen. In dit artikel leert u hoe u door het systeem toegewezen identiteiten gebruikt.
Een door het systeem toegewezen beheerde identiteit definiëren
Als u een door het systeem toegewezen beheerde identiteit wilt gebruiken, gebruikt u de volgende stappen:
Geef het
identity
blok op en stel deze intype
opSystemAssigned
.resource "azurerm_linux_virtual_machine" "example" { # ... identity { type = "SystemAssigned" } }
Verdeel de
Contributor
rol aan de identiteit.data "azurerm_subscription" "current" {} data "azurerm_role_definition" "contributor" { name = "Contributor" } resource "azurerm_role_assignment" "example" { scope = data.azurerm_subscription.current.id role_definition_name = "Contributor" principal_id = azurerm_linux_virtual_machine.example.identity[0].principal_id }
Configureer met omgevingsvariabelen en geef uw Azure-referenties op.
export ARM_USE_MSI=true export ARM_SUBSCRIPTION_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx export ARM_TENANT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Voorbeeld: Een virtuele machine maken met een beheerde identiteit
Maak een map waarin u de Terraform-voorbeeldcode wilt testen en de huidige map kunt maken.
Maak een bestand met de naam
providers.tf
en voeg de volgende code in.terraform { required_version = ">=0.12" required_providers { azapi = { source = "azure/azapi" version = "~>1.5" } azurerm = { source = "hashicorp/azurerm" version = "~>2.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Maak een bestand met de naam
main.tf
en voeg de volgende code in:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } data "azurerm_subscription" "current" {} resource "azurerm_virtual_network" "example" { name = "myVnet" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name } resource "azurerm_subnet" "example" { name = "mySubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.example.name address_prefixes = ["10.0.2.0/24"] } resource "azurerm_network_interface" "example" { name = "myNic" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name ip_configuration { name = "internal" subnet_id = azurerm_subnet.example.id private_ip_address_allocation = "Dynamic" } } resource "azurerm_linux_virtual_machine" "example" { name = "myVm" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location size = "Standard_F2" network_interface_ids = [ azurerm_network_interface.example.id, ] computer_name = "hostname" admin_username = var.username admin_ssh_key { username = var.username public_key = azapi_resource_action.ssh_public_key_gen.output.publicKey } identity { type = "SystemAssigned" } os_disk { caching = "ReadWrite" storage_account_type = "Standard_LRS" } source_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-jammy" sku = "22_04-lts" version = "latest" } } data "azurerm_role_definition" "contributor" { name = "Contributor" } resource "azurerm_role_assignment" "example" { scope = data.azurerm_subscription.current.id role_definition_name = "Contributor" principal_id = azurerm_linux_virtual_machine.example.identity[0].principal_id }
Maak een bestand met de naam
ssh.tf
en voeg de volgende code in.resource "random_pet" "ssh_key_name" { prefix = "ssh" separator = "" } resource "azapi_resource_action" "ssh_public_key_gen" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" resource_id = azapi_resource.ssh_public_key.id action = "generateKeyPair" method = "POST" response_export_values = ["publicKey", "privateKey"] } resource "azapi_resource" "ssh_public_key" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" name = random_pet.ssh_key_name.id location = azurerm_resource_group.rg.location parent_id = azurerm_resource_group.rg.id } output "key_data" { value = azapi_resource_action.ssh_public_key_gen.output.publicKey } ```
Maak een bestand met de naam
variables.tf
en voeg de volgende code in:variable "resource_group_location" { type = string description = "Location of the resource group." 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 "username" { type = string description = "The username for the local account that will be created on the new VM." default = "azureadmin" }
Maak een bestand met de naam
outputs.tf
en voeg de volgende code in:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "azurerm_linux_virtual_machine_name" { value = azurerm_linux_virtual_machine.example.name }