Autentisera till Azure med tjänstens huvudnamn
Den här artikeln beskriver hur du autentiserar Terraform till Azure med tjänstens huvudnamn.
I den här artikeln kan du se hur du:
- Skapa ett huvudnamn för tjänsten
- Ange autentiseringsuppgifter för tjänstens huvudnamn i miljövariabler
- Ange autentiseringsuppgifter för tjänstens huvudnamn i ett Terraform-providerblock
Skapa ett huvudnamn för tjänsten
Om du inte har åtkomst till ett huvudnamn för tjänsten fortsätter du med det här avsnittet för att skapa ett nytt huvudnamn för tjänsten. Om du har ett huvudnamn för tjänsten som du kan använda går du vidare till avsnittet Ange autentiseringsuppgifter för tjänstens huvudnamn.
Automatiserade verktyg som distribuerar eller använder Azure-tjänster , till exempel Terraform, bör alltid ha begränsade behörigheter. I stället för att låta program logga in som en fullt privilegierad användare erbjuder Azure huvudkonton för tjänsten.
Det vanligaste mönstret är att interaktivt logga in på Azure, skapa ett huvudnamn för tjänsten, testa tjänstens huvudnamn och sedan använda tjänstens huvudnamn för framtida autentisering (antingen interaktivt eller från dina skript).
Logga in på Azure för att skapa ett huvudnamn för tjänsten. När du har autentiserat till Azure via ett Microsoft-konto går du tillbaka hit.
Om du skapar ett huvudnamn för tjänsten från Git Bash anger du
MSYS_NO_PATHCONV
miljövariabeln. (Det här steget är inte nödvändigt om du använder Cloud Shell.)export MSYS_NO_PATHCONV=1
Viktiga punkter:
- Du kan ange
MSYS_NO_PATHCONV
miljövariabeln globalt (för alla terminalsessioner) eller lokalt (bara för den aktuella sessionen). Eftersom det inte är något du gör ofta när du skapar ett huvudnamn för tjänsten, anger exemplet värdet för den aktuella sessionen. Om du vill ange den här miljövariabeln globalt lägger du till inställningen i~/.bashrc
filen.
- Du kan ange
Om du vill skapa ett huvudnamn för tjänsten kör du az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Viktiga punkter:
- Du kan ersätta
<service-principal-name>
med ett anpassat namn för din miljö eller utelämna parametern helt. Om du utelämnar parametern genereras tjänstens huvudnamn baserat på aktuellt datum och tid. - När du har slutfört
az ad sp create-for-rbac
det visar flera värden. VärdenaappId
,password
ochtenant
används i nästa steg. - Lösenordet kan inte hämtas om det går förlorat. Därför bör du lagra ditt lösenord på en säker plats. Om du glömmer lösenordet kan du återställa autentiseringsuppgifterna för tjänstens huvudnamn.
- I den här artikeln används ett huvudnamn för tjänsten med rollen Deltagare . Mer information om rollbaserad åtkomstkontroll (RBAC) finns i RBAC: Inbyggda roller.
- Utdata från att skapa tjänstens huvudnamn innehåller känsliga autentiseringsuppgifter. Se till att du inte inkluderar dessa autentiseringsuppgifter i koden eller kontrollera autentiseringsuppgifterna i källkontrollen.
- Mer information om alternativ när du skapar ett huvudnamn för tjänsten med Azure CLI finns i artikeln Skapa ett Huvudnamn för Azure-tjänsten med Azure CLI.
- Du kan ersätta
Ange autentiseringsuppgifter för tjänstens huvudnamn
Det finns ett par sätt att ange autentiseringsuppgifterna för tjänstens huvudnamn. Av säkerhetsskäl rekommenderar vi dock att du inte lagrar autentiseringsuppgifter i providerblocket. Den tekniken visas endast i fullständighets- och testsyfte.
- Ange autentiseringsuppgifter för tjänstens huvudnamn i miljövariabler
- Ange autentiseringsuppgifter för tjänstens huvudnamn i ett Terraform-providerblock
Ange autentiseringsuppgifter för tjänstens huvudnamn i miljövariabler
När du har skapat ett huvudnamn för tjänsten kan du ange dess autentiseringsuppgifter för Terraform via miljövariabler.
~/.bashrc
Redigera filen genom att lägga till följande miljövariabler.export ARM_SUBSCRIPTION_ID="<azure_subscription_id>" export ARM_TENANT_ID="<azure_subscription_tenant_id>" export ARM_CLIENT_ID="<service_principal_appid>" export ARM_CLIENT_SECRET="<service_principal_password>"
Kör skriptet genom att
~/.bashrc
körasource ~/.bashrc
(eller dess förkortade motsvarighet. ~/.bashrc
). Du kan också avsluta och öppna Cloud Shell igen för att skriptet ska köras automatiskt.. ~/.bashrc
När miljövariablerna har angetts kan du verifiera deras värden på följande sätt:
printenv | grep ^ARM*
Viktiga punkter:
- Mer information om hur du arbetar med miljövariabler i Terraform HCL finns i Läsa och använda miljövariabler i Terraform-körningar.
- När du skapar och tillämpar Terraform-körningsplaner ändras den Azure-prenumeration som är associerad med tjänstens huvudnamn. Det här kan ibland vara förvirrande om du är inloggad i en Azure-prenumeration och miljövariablerna pekar på en andra Azure-prenumeration. Nu ska vi titta på följande exempel för att förklara. Anta att du har två Azure-prenumerationer: SubA och SubB. Om den aktuella Azure-prenumerationen är UnderA (bestäms via
az account show
) medan miljövariablerna pekar på UnderB finns alla ändringar som görs av Terraform på underb. Därför skulle du behöva logga in på din underb-prenumeration för att köra Azure CLI-kommandon eller Azure PowerShell-kommandon för att visa dina ändringar.
Hoppa till avsnittet Nästa steg
Ange autentiseringsuppgifter för tjänstens huvudnamn i ett Terraform-providerblock
Varning
Det kan vara praktiskt att ange dina autentiseringsuppgifter för Azure-prenumerationen i en Terraform-konfigurationsfil , särskilt när du testar. Det är dock inte lämpligt att lagra autentiseringsuppgifter i en klartextfil som kan visas av icke-betrodda personer.
Azure-providerblocket definierar syntax som gör att du kan ange autentiseringsinformation för din Azure-prenumeration.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
}
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
# Your code goes here