Delen via


Verifiëren bij Azure met service-principal

In dit artikel wordt uitgelegd hoe u Terraform verifieert bij Azure met een service-principal.

In dit artikel leert u het volgende:

  • Een service-principal maken
  • Referenties voor de service-principal opgeven in omgevingsvariabelen
  • Referenties voor de service-principal opgeven in een Terraform-providerblok

Een service-principal maken

Als u geen toegang hebt tot een service-principal, gaat u verder met deze sectie om een nieuwe service-principal te maken. Als u een service-principal hebt die u kunt gebruiken, gaat u naar de sectie en geeft u referenties voor de service-principal op.

Geautomatiseerde hulpprogramma's die Azure-services implementeren of gebruiken, zoals Terraform, moeten altijd beperkte machtigingen hebben. In plaats van toepassingen zich te laten aanmelden als een gebruiker met volledige rechten, biedt Azure Service Principals.

Het meest voorkomende patroon is om u interactief aan te melden bij Azure, een service-principal te maken, de service-principal te testen en die service-principal vervolgens te gebruiken voor toekomstige verificatie (interactief of vanuit uw scripts).

  1. Meld u aan bij Azure om een service-principal te maken. Nadat u zich hebt geverifieerd bij Azure via een Microsoft-account, keert u hier terug.

  2. Als u een service-principal maakt vanuit Git Bash, stelt u de MSYS_NO_PATHCONV omgevingsvariabele in. (Deze stap is niet nodig als u Cloud Shell gebruikt.)

    export MSYS_NO_PATHCONV=1    
    

    Belangrijkste punten:

    • U kunt de MSYS_NO_PATHCONV omgevingsvariabele globaal instellen (voor alle terminalsessies) of lokaal (alleen voor de huidige sessie). Omdat u niet vaak een service-principal maakt, stelt het voorbeeld de waarde voor de huidige sessie in. Als u deze omgevingsvariabele globaal wilt instellen, voegt u de instelling toe aan het ~/.bashrc bestand.
  3. Voer az ad sp create-for-rbac uit om een service-principal te maken.

    az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
    

    Belangrijkste punten:

    • U kunt de <service-principal-name> parameter vervangen door een aangepaste naam voor uw omgeving of de parameter volledig weglaten. Als u de parameter weglaat, wordt de naam van de service-principal gegenereerd op basis van de huidige datum en tijd.
    • Wanneer de voltooiing is voltooid, az ad sp create-for-rbac worden verschillende waarden weergegeven. De appIdwaarden en waarden tenantpasswordworden gebruikt in de volgende stap.
    • Het wachtwoord kan niet worden opgehaald als het verloren gaat. Als zodanig moet u uw wachtwoord opslaan op een veilige plaats. Als u uw wachtwoord bent vergeten, kunt u de referenties van de service-principal opnieuw instellen.
    • Voor dit artikel wordt een service-principal met de rol Inzender gebruikt. Zie RBAC: Ingebouwde rollen voor meer informatie over rollen gebaseerd toegangsbeheer (RBAC).
    • De uitvoer van het maken van de service-principal bevat gevoelige referenties. Zorg ervoor dat u deze referenties niet in uw code opneemt of controleer de referenties in uw broncodebeheer.
    • Zie het artikel Een Azure-service-principal maken met de Azure CLI voor meer informatie over opties bij het maken van een service-principal met de Azure CLI.

Referenties voor service-principal opgeven

Er zijn een aantal manieren om uw referenties voor de service-principal op te geven. Om veiligheidsredenen raden we echter aan om referenties niet op te slaan in het providerblok. Deze techniek wordt alleen weergegeven voor volledigheid en testdoeleinden.

Referenties voor de service-principal opgeven in omgevingsvariabelen

Zodra u een service-principal hebt gemaakt, kunt u de referenties voor Terraform opgeven via omgevingsvariabelen.

  1. Bewerk het ~/.bashrc bestand door de volgende omgevingsvariabelen toe te voegen.

    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>"
    
  2. Als u het ~/.bashrc script wilt uitvoeren, voert u het script source ~/.bashrc uit (of het verkorte equivalent . ~/.bashrc). U kunt Cloud Shell ook afsluiten en opnieuw openen om het script automatisch uit te voeren.

    . ~/.bashrc
    
  3. Zodra de omgevingsvariabelen zijn ingesteld, kunt u de waarden als volgt controleren:

    printenv | grep ^ARM*
    

    Belangrijkste punten:

    • Net als bij elke omgevingsvariabele, gebruikt u de volgende syntaxis om toegang te krijgen tot een Azure-abonnementswaarde vanuit een Terraform-script: ${env.<environment_variable>} Als u bijvoorbeeld toegang wilt krijgen tot de ARM_SUBSCRIPTION_ID waarde, geeft u ${env.ARM_SUBSCRIPTION_ID}op.
    • Bij het maken en toepassen van Terraform-uitvoeringsplannen worden wijzigingen aangebracht in het Azure-abonnement dat is gekoppeld aan de service-principal. Dit kan soms verwarrend zijn als u bent aangemeld bij één Azure-abonnement en de omgevingsvariabelen verwijzen naar een tweede Azure-abonnement. Laten we eens kijken naar het volgende voorbeeld om het uit te leggen. Stel dat u twee Azure-abonnementen hebt: SubA en SubB. Als het huidige Azure-abonnement SubA is (bepaald via az account show) terwijl de omgevingsvariabelen verwijzen naar SubB, bevinden eventuele wijzigingen van Terraform zich in SubB. Daarom moet u zich aanmelden bij uw SubB-abonnement om Azure CLI-opdrachten of Azure PowerShell-opdrachten uit te voeren om uw wijzigingen weer te geven.
  4. Ga naar de sectie, Volgende stappen

Referenties voor de service-principal opgeven in een Terraform-providerblok

Let op

De mogelijkheid om uw Azure-abonnementsreferenties op te geven in een Terraform-configuratiebestand kan handig zijn, met name bij het testen. Het is echter niet raadzaam om referenties op te slaan in een bestand met duidelijke tekst dat kan worden bekeken door niet-vertrouwde personen.

Het Blok azure-provider definieert syntaxis waarmee u de verificatiegegevens van uw Azure-abonnement kunt opgeven.

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

Volgende stappen