Terraform verifiëren bij Azure

Als u Terraform-opdrachten wilt gebruiken voor uw Azure-abonnement, moet u Eerst Terraform verifiëren bij dat abonnement. In dit artikel worden enkele veelvoorkomende scenario's voor de authenticatie bij Azure beschreven.

In dit artikel leert u het volgende:

  • Algemene terraform- en Azure-verificatiescenario's begrijpen
  • Verifiëren via een Microsoft-account van Cloud Shell (met behulp van Bash of PowerShell)
  • Verifiëren via een Microsoft-account van Windows (met behulp van Bash of PowerShell)
  • Een service-principal maken met de Azure CLI
  • Een service-principal maken met Azure PowerShell
  • Referenties voor de service-principal opgeven in omgevingsvariabelen
  • Referenties voor de service-principal opgeven in een Terraform-providerblok

1. Uw omgeving configureren

  • Azure-abonnement: Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.

2. Terraform verifiëren bij Azure

Terraform- en Azure-verificatiescenario's

Terraform biedt alleen ondersteuning voor de authenticatie bij Azure via de Azure CLI. Authenticeren met Azure PowerShell wordt niet ondersteund. Hoewel u de module Azure PowerShell gebruiken kunt bij het uitvoeren van uw Terraform-werk, moet u zich dus eerst verifiëren bij Azure met behulp van de Azure CLI.

In dit artikel wordt uitgelegd hoe u Terraform verifieert bij Azure voor de volgende scenario's. Zie Authenticating using the Azure CLI(Verifiëren met behulp van de Azure CLI) voor meer informatie over opties voor het verifiëren van Terraform bij Azure.

Verifiëren bij Azure via een Microsoft-account

Een Microsoft-account is een gebruikersnaam (gekoppeld aan een e-mailbericht en de bijbehorende referenties) die wordt gebruikt om u aan te melden bij Microsoft-services, zoals Azure. Een Microsoft-account kan worden gekoppeld aan een of meer Azure-abonnementen, en een van deze abonnementen is de standaardinstelling.

In de volgende stappen ziet u hoe u zich interactief aanmeldt bij Azure met behulp van een Microsoft-account, de gekoppelde Azure-abonnementen van het account vermeldt (inclusief de standaardinstelling) en het huidige abonnement in stelt.

  1. Open een opdrachtregel die toegang heeft tot de Azure CLI.

  2. Voer az login uit zonder parameters en volg de instructies om u aan te melden bij Azure.

    az login
    

    Belangrijkste punten:

    • Als de aanmelding is geslaagd, wordt een lijst weergegeven met de Azure-abonnementen die zijn gekoppeld aan de aangemelde Microsoft-account, met az login inbegrip van het standaardabonnement.
  3. Voer az account show uit om het huidige Azure-abonnement te bevestigen.

    az account show
    
  4. Voer az account list uit om alle azure-abonnementsnamen en -Microsoft-account voor een specifieke lijst weer te geven.

    az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
    

    Belangrijkste punten:

    • Vervang de <microsoft_account_email> tijdelijke aanduiding door het Microsoft-account mailadres waarvan u de Azure-abonnementen wilt toevoegen.
    • Met een live-account, zoals een hotmail of outlook, moet u mogelijk het volledig gekwalificeerde e-mailadres opgeven. Als uw e-mailadres bijvoorbeeld is, moet u mogelijk admin@hotmail.com de tijdelijke aanduiding vervangen door live.com#admin@hotmail.com .
  5. Voer az account set uit om een specifiek Azure-abonnement te gebruiken.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Belangrijkste punten:

    • Vervang de <subscription_id_or_subscription_name> tijdelijke aanduiding door de id of naam van het abonnement dat u wilt gebruiken.
    • Bij az account set het aanroepen worden de resultaten van het overschakelen naar het opgegeven Azure-abonnement niet weergegeven. U kunt echter gebruiken om az account show te bevestigen dat het huidige Azure-abonnement is gewijzigd.
    • Als u de opdracht uit de vorige stap hebt uitgevoerd, ziet u dat het standaard Azure-abonnement is gewijzigd in het abonnement dat az account list u hebt opgegeven met az account set .

Een service-principal maken

Geautomatiseerde hulpprogramma's die Azure-services implementeren of gebruiken, zoals Terraform, moeten altijd beperkte machtigingen hebben. In plaats van toepassingen aan te melden als een gebruiker met volledige bevoegdheden, 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. Na de authenticatie 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.)

    export MSYS_NO_PATHCONV=1    
    

    Belangrijkste punten:

    • U kunt de MSYS_NO_PATHCONV omgevingsvariabele globaal instellen (voor alle terminalsessies) of lokaal (voor alleen de huidige sessie). Omdat het maken van een service-principal niet vaak gebeurt, 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
    

    Belangrijkste punten:

    • U kunt de <service-principal-name> vervangen door een aangepaste naam voor uw omgeving of de parameter volledig weglaten. Als u de parameter weglaten, wordt de naam van de service-principal gegenereerd op basis van de huidige datum en tijd.
    • Als de uitvoering is voltooid, az ad sp create-for-rbac worden verschillende waarden weergegeven. De appId waarden , en worden gebruikt in de volgende passwordtenant stap.
    • Het wachtwoord kan niet worden opgehaald als u het kwijt bent. Als zodanig moet u uw wachtwoord op een veilige plaats opslaan. 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 Role-Based Access Control (RBAC) en rollen.
    • De uitvoer van het maken van de service-principal bevat gevoelige referenties. Zorg ervoor dat u deze referenties niet in uw code op neem of controleer de referenties in uw broncodebeheer.
    • Zie het artikel Een Azure-service-principalmaken met de Azure CLI voor meer informatie over opties bij het maken van een service-principal met de Azure CLI.

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. Voer uit (of het verkorte equivalent ervan) om het ~/.bashrcsource ~/.bashrc script uit te . ~/.bashrc voeren. U kunt het script ook afsluiten Cloud Shell opnieuw openen om het script automatisch uit te voeren.

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

    printenv | grep ^ARM*
    

Belangrijkste punten:

  • Net als bij elke omgevingsvariabele gebruikt u de volgende syntaxis om vanuit een Terraform-script toegang te krijgen tot de waarde van een Azure-abonnement: ${env.<environment_variable>} . Als u bijvoorbeeld toegang wilt krijgen tot ARM_SUBSCRIPTION_ID de waarde, geeft u ${env.ARM_SUBSCRIPTION_ID} op.
  • Als u Terraform-uitvoeringsplannen maakt en toe passen, 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 naar een tweede Azure-abonnement wijzen. Laten we het volgende voorbeeld eens bekijken om dit uit te leggen. Stel dat u twee Azure-abonnementen hebt: SubA en SubB. Als het huidige Azure-abonnement SubA is (bepaald via ) terwijl de omgevingsvariabelen naar SubB wijzen, worden alle wijzigingen die door Terraform zijn aangebracht, op az account show SubB uitgevoerd. Daarom moet u zich aanmelden bij uw SubB-abonnement om Azure CLI-opdrachten uit te voeren of om Azure PowerShell om uw wijzigingen weer te geven.

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

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

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>2.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

Waarschuwing

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

3. De resultaten controleren

Controleer of u zich hebt geverifieerd bij het Azure-abonnement door het huidige abonnement weer te geven.

Voer az account show uit om het huidige Azure-abonnement te bevestigen via deAzure CLI.

az account show

Volgende stappen