Terraform Backend in Azure einrichten
Wer Terraform produktiv einsetzt, sollte den State nicht lokal speichern, sondern in einem zentralen Backend ablegen. In Azure bietet sich dafür ein Storage Account mit Blob Container an. In diesem Artikel zeige ich, wie man das Backend mit wenigen Azure-CLI-Befehlen einrichtet.
Voraussetzungen
- Azure CLI ist installiert und konfiguriert (
az login) - Eine aktive Azure-Subscription (hier:
sandbox) - Terraform ist lokal installiert
Subscription auswählen
Falls mehrere Subscriptions vorhanden sind, zuerst die richtige auswählen:
az account set --subscription "sandbox"
Resource Group erstellen
Der Storage Account wird in einer gemeinsam genutzten Resource Group (rg-sandbox-shared) abgelegt. So bleibt er unabhängig von den einzelnen Projekten und Umgebungen (dev, stage, prod), deren State er verwaltet.
az group create \
--name rg-sandbox-shared \
--location germanywestcentralStorage Account erstellen
Azure Storage Account Namen müssen global eindeutig sein, dürfen nur Kleinbuchstaben und Zahlen enthalten und maximal 24 Zeichen lang sein.
az storage account create \
--name cabesandboxtfstate \
--resource-group rg-sandbox-shared \
--location germanywestcentral \
--sku Standard_LRS \
--kind StorageV2 \
--min-tls-version TLS1_2 \
--allow-shared-key-access false \
--allow-blob-public-access falseEinige Hinweise zu den gewählten Parametern:
- Standard_LRS reicht für Terraform State völlig aus — der State wird bei jedem Apply ohnehin neu geschrieben, Georedundanz ist nicht nötig.
- TLS 1.2 ist der empfohlene Mindeststandard.
- allow-shared-key-access false deaktiviert die Storage Account Keys vollständig — der Zugriff ist damit ausschließlich über Entra ID (RBAC) möglich. Kein Godmode Key mehr!
- allow-blob-public-access false stellt sicher, dass kein Container versehentlich öffentlich zugänglich gemacht werden kann.
RBAC-Berechtigung zuweisen
Da Shared Key Access deaktiviert ist, benötigt dein eigener User die Rolle Storage Blob Data Contributor auf dem Storage Account. Ohne diese Berechtigung schlagen sowohl das Erstellen des Containers als auch der spätere Terraform-Zugriff fehl. Für das Role Assignment benötigen wir deine User ID und die ID des Storage Accounts.
# User Id ermitteln
# Output: 5*******-****-****-****-******2b46be
USER_ID=$(az ad signed-in-user show --query id -o tsv)
# Storage Account Id ermitteln
# Output: /subscriptions/../resourceGroups/../../cabesandboxtfstate
STORAGE_ACCOUNT_ID=$(az storage account show \
--name cabesandboxtfstate \
--resource-group rg-sandbox-shared \
--query id -o tsv)
# Anschließend die Rolle zuweisen
az role assignment create \
--role "Storage Blob Data Contributor" \
--assignee $USER_ID \
--scope $STORAGE_ACCOUNT_IDBlob Container erstellen
az storage container create \
--name tfstate \
--account-name cabesandboxtfstate \
--auth-mode loginDer Parameter --auth-mode login sorgt dafür, dass die Authentifizierung über die aktive Azure CLI Session (Entra ID) läuft und kein Storage Account Key benötigt wird. 😉
Soweit ist nun alles für das Terraform Backend vorbereitet.
Terraform Backend konfigurieren
Im Terraform-Projekt wird das Backend im terraform-Block definiert:
terraform {
backend "azurerm" {
resource_group_name = "rg-sandbox-shared"
storage_account_name = "cabesandboxtfstate"
container_name = "tfstate"
key = "meinprojekt.tfstate"
use_azuread_auth = true
}
}Durch use_azuread_auth = trueauthentifiziert sich Terraform über Entra ID statt über den Storage Account Key, wodurch diese Lösung viel sicherer wird.
Anschließend das Backend initialisieren:
terraform initFertig 🎉
Der State liegt damit zentral und geschützt in Azure — bereit für die Zusammenarbeit im Team oder einfach als saubere Grundlage für dein Projekt.
Kein Spam, keine Weitergabe an Dritte. Nur du und ich.
Mitgliederdiskussion