Erste Schritte: Konfigurieren von Terraform in Azure Cloud Shell mit Bash

Mit Terraform können Sie eine Cloudinfrastruktur definieren, eine Vorschau der Cloudinfrastruktur anzeigen und die Cloudinfrastruktur bereitstellen. Terraform ermöglicht das Erstellen von Konfigurationsdateien mit HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter (beispielsweise Azure) und die Elemente angeben, aus denen sich Ihre Cloudinfrastruktur zusammensetzt. Nach der Erstellung Ihrer Konfigurationsdateien erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau Ihrer Infrastrukturänderungen anzeigen können, bevor diese bereitgestellt werden. Nach der Überprüfung der Änderungen wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.

In diesem Artikel werden die Optionen für die Authentifizierung bei Azure für die Verwendung mit Terraform beschrieben.

In diesem Artikel werden folgende Vorgehensweisen behandelt:

  • Konfigurieren von Cloud Shell
  • Anzeigen des aktuellen Azure-Kontos
  • Informationen zu gängigen Terraform- und Azure-Authentifizierungsszenarien
  • Authentifizieren über ein Microsoft-Konto in Cloud Shell (mithilfe von Bash oder PowerShell)
  • Authentifizieren über ein Microsoft-Konto in Windows (mithilfe von Bash oder PowerShell)
  • Erstellen eines Dienstprinzipals mithilfe der Azure CLI
  • Erstellen eines Dienstprinzipals mit Azure PowerShell
  • Angeben der Anmeldeinformationen für den Dienstprinzipal in Umgebungsvariablen
  • Angeben der Anmeldeinformationen für den Dienstprinzipal in einem Terraform-Anbieterblock

1. Konfigurieren Ihrer Umgebung

  • Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

2. Öffnen von Cloud Shell

  1. Wenn bereits eine Cloud Shell-Sitzung geöffnet ist, können Sie mit dem nächsten Abschnitt fortfahren.

  2. Öffnen Sie das Azure-Portal.

  3. Melden Sie sich bei Bedarf bei Ihrem Azure-Abonnement an, und ändern Sie das Azure-Verzeichnis.

  4. Öffnen Sie Cloud Shell.

    Öffnen Sie Cloud Shell über das obere Menü des Azure-Portals.

  5. Falls Sie Cloud Shell bislang noch nicht verwendet haben, konfigurieren Sie die Umgebungs- und Speichereinstellungen.

  6. Wählen Sie die Befehlszeilenumgebung aus.

    Wählen Sie die Befehlszeilenschnittstelle aus, die Sie in Cloud Shell verwenden möchten.

3. Installieren der aktuellen Terraform-Version in Azure Cloud Shell

Cloud Shell wird innerhalb weniger Wochen nach der Veröffentlichung automatisch auf die neueste Version von Terraform aktualisiert. Wenn Sie die neueste Version jedoch früher benötigen, erfahren Sie in den folgenden Schritten, wie Sie die aktuelle Version von Terraform herunterladen und installieren.

  1. Bestimmen Sie die in Cloud Shell verwendete Terraform-Version:

    terraform version
    
  2. Ist die in Cloud Shell installierte Terraform-Version nicht die neueste Version, wird eine Meldung mit dem Hinweis angezeigt, dass die Terraform-Version veraltet ist.

  3. Wenn Sie die angegebene Version problemlos verwenden können, fahren Sie mit dem nächsten Abschnitt fort. Führen Sie andernfalls die folgenden Schritte aus.

  4. Navigieren Sie zur Downloadseite von Terraform.

  5. Scrollen Sie nach unten zu den Downloadlinks für Linux.

  6. Bewegen Sie den Mauszeiger über den Link 64-Bit. Dabei handelt es sich um den Link für die aktuelle 64-Bit-Version von Linux AMD, die sich für Cloud Shell eignet.

  7. Kopieren Sie die URL.

  8. Führen Sie curl aus, und ersetzen Sie dabei den Platzhalter durch die URL aus dem vorherigen Schritt.

    curl -O <terraform_download_url>
    
  9. Entzippen Sie die Datei.

    unzip <zip_file_downloaded_in_previous_step>
    
  10. Falls das Verzeichnis bin nicht vorhanden ist, erstellen Sie es.

    mkdir bin
    
  11. Verschieben Sie die Datei terraform in das Verzeichnis bin.

    mv terraform bin/    
    
  12. Vergewissern Sie sich, dass sich die heruntergeladene Version von Terraform an erster Stelle im Pfad befindet.

    terraform version
    

4. Überprüfen des Azure-Standardabonnements

Wenn Sie sich mit einem Microsoft-Konto beim Azure-Portal anmelden, wird das Azure-Standardabonnement für dieses Konto verwendet.

Terraform authentifiziert sich automatisch anhand von Informationen aus dem Azure-Standardabonnement.

Führen Sie zum Überprüfen des aktuellen Microsoft-Kontos und Azure-Abonnements den Befehl az account show aus.

az account show

Alle Änderungen, die Sie über Terraform vornehmen, werden für das angezeigte Azure-Abonnement vorgenommen. Wenn dies in Ordnung ist, überspringen Sie den Rest dieses Artikels.

5. Authentifizieren von Terraform bei Azure

Terraform- und Azure-Authentifizierungsszenarien

Terraform unterstützt für die Authentifizierung bei Azure nur die Azure-Befehlszeilenschnittstelle (Azure CLI). Die Authentifizierung mit Azure PowerShell wird nicht unterstützt. Obwohl Sie für Ihre Arbeit mit Terraform das Azure PowerShell-Modul verwenden können, müssen Sie sich daher zunächst mithilfe der Azure CLI bei Azure authentifizieren.

In diesem Artikel wird für die unten genannten Szenarien erläutert, wie Sie Terraform bei Azure authentifizieren. Weitere Informationen zu den Optionen für die Authentifizierung von Terraform bei Azure finden Sie unter Authentifizieren mithilfe der Azure CLI.

Authentifizieren bei Azure über ein Microsoft-Konto

Ein Microsoft-Konto ist ein Benutzername (mit einer zugeordneten E-Mail-Adresse und zugehörigen Anmeldeinformationen), der zum Anmelden bei Microsoft-Diensten wie z. B. Azure verwendet wird. Ein Microsoft-Konto kann mit einem oder mehreren Azure-Abonnements verknüpft werden, wobei eines davon das Standardabonnement ist.

In den folgenden Schritten wird beschrieben, wie Sie sich interaktiv mit einem Microsoft-Konto bei Azure anmelden, die zugeordneten Azure-Abonnements des Kontos (einschließlich des Standardabonnements) auflisten und das aktuelle Abonnement festlegen.

  1. Öffnen Sie eine Befehlszeile, die Zugriff auf die Azure CLI hat.

  2. Führen Sie az login ohne Parameter aus, und befolgen Sie die Anweisungen, um sich bei Azure anzumelden.

    az login
    

    Die wichtigsten Punkte:

    • Nach erfolgreicher Anmeldung zeigt az login eine Liste der Azure-Abonnements an, die mit dem angemeldeten Microsoft-Konto verknüpft sind (einschließlich des Standardabonnements).
  3. Führen Sie zum Überprüfen des aktuellen Azure-Abonnements az account show aus.

    az account show
    
  4. Führen Sie zum Anzeigen aller Azure-Abonnementnamen und -IDs für ein bestimmtes Microsoft-Konto az account list aus.

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

    Die wichtigsten Punkte:

    • Ersetzen Sie den Platzhalter <microsoft_account_email> durch die E-Mail-Adresse des Microsoft-Kontos, dessen Azure-Abonnements Sie auflisten möchten.
    • Bei einem Live-Konto (z. B. Hotmail oder Outlook) müssen Sie möglicherweise die vollqualifizierte E-Mail-Adresse angeben. Wenn Ihre E-Mail-Adresse admin@hotmail.com lautet, würden Sie den Platzhalter in diesem Fall z. B. durch live.com#admin@hotmail.com ersetzen.
  5. Führen Sie az account set aus, um ein bestimmtes Azure-Abonnement zu verwenden.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Die wichtigsten Punkte:

    • Ersetzen Sie den Platzhalter <subscription_id_or_subscription_name> durch die ID oder den Namen des gewünschten Abonnements.
    • Die Ergebnisse des Wechsels zum angegebenen Azure-Abonnement werden durch den Aufruf von az account set nicht angezeigt. Sie können sich jedoch mithilfe von az account show vergewissern, dass sich das aktuelle Azure-Abonnement geändert hat.
    • Wenn Sie den Befehl az account list im vorherigen Schritt ausführen, sehen Sie, dass das Azure-Standardabonnement in das Abonnement geändert wurde, das Sie mit az account set angegeben haben.

Erstellen eines Dienstprinzipals

Automatisierte Tools wie Terraform, die Azure-Dienste bereitstellen oder verwenden, sollten stets über eingeschränkte Berechtigungen verfügen. Azure bietet Dienstprinzipale, um zu vermeiden, dass sich Anwendungen als Benutzer mit uneingeschränkten Berechtigungen anmelden.

Das gängigste Muster für die interaktive Anmeldung bei Azure besteht darin, einen Dienstprinzipal zu erstellen, zu testen und dann für die zukünftige Authentifizierung (interaktiv oder über Ihre Skripts) zu verwenden.

  1. Melden Sie sich bei Azure an, um einen Dienstprinzipal zu erstellen. Führen Sie dazu die Schritte zum Authentifizieren bei Azure über ein Microsoft-Konto aus, und kehren Sie dann hierher zurück.

  2. Wenn Sie einen Dienstprinzipal über Git Bash erstellen, legen Sie die Umgebungsvariable MSYS_NO_PATHCONV fest. (Bei Verwendung von Cloud Shell ist dieser Schritt nicht erforderlich.)

    export MSYS_NO_PATHCONV=1    
    

    Die wichtigsten Punkte:

    • Sie können die Umgebungsvariable MSYS_NO_PATHCONV global (für alle Terminalsitzungen) oder lokal (nur für die aktuelle Sitzung) festlegen. Da Sie nur selten einen Dienstprinzipal erstellen müssen, wird der Wert im Beispiel für die aktuelle Sitzung festgelegt. Um diese Umgebungsvariable global festzulegen, fügen Sie die Einstellung der ~/.bashrc-Datei hinzu.
  3. Führen Sie zum Erstellen eines Dienstprinzipals az ad sp create-for-rbac aus.

    az ad sp create-for-rbac --name <service_principal_name>
    

    Die wichtigsten Punkte:

    • Sie können <service-principal-name> durch einen benutzerdefinierten Namen für Ihre Umgebung ersetzen oder den Parameter ganz weglassen. Wenn Sie den Parameter weglassen, wird der Dienstprinzipalname basierend auf dem aktuellen Datum und der aktuellen Uhrzeit generiert.
    • Nach dem erfolgreichen Abschluss werden von az ad sp create-for-rbac verschiedene Werte angezeigt. Die Werte appId, password und tenant werden im nächsten Schritt verwendet.
    • Dieses Kennwort kann nicht erneut abgerufen werden. Es empfiehlt sich daher, das Kennwort an einem sicheren Ort zu speichern. Sollten Sie Ihr Kennwort vergessen, können Sie die Anmeldeinformationen für den Dienstprinzipal zurücksetzen.
    • Die Rolle Mitwirkender ist die Standardrolle und verfügt über uneingeschränkte Lese- und Schreibberechtigungen für ein Azure-Konto. In diesem Artikel wird ein Dienstprinzipal mit der Rolle Mitwirkender verwendet. Weitere Informationen zur rollenbasierten Zugriffssteuerung (Role-Based Access Control, RBAC) finden Sie unter Integrierte Integrierte Rollen.
    • Die Ausgabe der Erstellung des Dienstprinzipals enthält vertrauliche Anmeldeinformationen. Schließen Sie diese Anmeldeinformationen nicht in Ihren Code ein, und checken Sie sie nicht in Ihre Quellcodeverwaltung ein.
    • Weitere Informationen zu den Optionen beim Erstellen eines Dienstprinzipals mithilfe der Azure CLI finden Sie im Artikel Erstellen eines Azure-Dienstprinzipals mit der Azure-Befehlszeilenschnittstelle.

Angeben der Anmeldeinformationen für den Dienstprinzipal in Umgebungsvariablen

Nachdem Sie einen Dienstprinzipal erstellt haben, können Sie seine Anmeldeinformationen über Umgebungsvariablen für Terraform angeben.

  1. Bearbeiten Sie die ~/.bashrc-Datei, indem Sie die folgenden Umgebungsvariablen hinzufügen.

    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. Führen Sie source ~/.bashrc (oder die abgekürzte Entsprechung . ~/.bashrc) aus, um das Skript ~/.bashrc auszuführen. Sie können Cloud Shell auch beenden und erneut öffnen, damit das Skript automatisch ausgeführt wird.

    . ~/.bashrc
    
  3. Nachdem Sie die Umgebungsvariablen festgelegt haben, können Sie deren Werte wie folgt überprüfen:

    printenv | grep ^ARM*
    

Die wichtigsten Punkte:

  • Verwenden Sie wie bei jeder Umgebungsvariablen die folgende Syntax, um innerhalb eines Terraform-Skripts auf einen Azure-Abonnementwert zuzugreifen: ${env.<environment_variable>}. Beispiel: Wenn Sie auf den Wert ARM_SUBSCRIPTION_ID zugreifen möchten, geben Sie ${env.ARM_SUBSCRIPTION_ID} an.
  • Beim Erstellen und Anwenden von Terraform-Ausführungsplänen werden Änderungen an dem Azure-Abonnement vorgenommen, das dem Dienstprinzipal zugeordnet ist. Dies kann manchmal verwirrend sein, wenn Sie bei einem Azure-Abonnement angemeldet sind und die Umgebungsvariablen auf ein zweites Azure-Abonnement verweisen. Betrachten Sie zur Veranschaulichung das folgende Beispiel. Angenommen, Sie verfügen über zwei Azure-Abonnements: SubA und SubB. Wenn das aktuelle Azure-Abonnement SubA ist (über az account show ermittelt), während die Umgebungsvariablen auf SubB verweisen, gelten alle von Terraform vorgenommenen Änderungen für SubB. Daher müssen Sie sich beim Abonnement SubB anmelden, um Azure CLI- oder Azure PowerShell-Befehle auszuführen und Ihre Änderungen anzuzeigen.

Angeben von Anmeldeinformationen für den Dienstprinzipal in einem Terraform-Anbieterblock

Der Azure-Anbieterblock definiert die Syntax, mit der Sie die Authentifizierungsinformationen Ihres Azure-Abonnements angeben können.

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

Achtung

Die Möglichkeit, Anmeldeinformationen für Ihr Azure-Abonnement in einer Terraform-Konfigurationsdatei anzugeben, kann besonders beim Testen praktisch sein. Sie sollten Anmeldeinformationen jedoch nicht in einer Klartextdatei speichern, die von nicht vertrauenswürdigen Personen angezeigt werden kann.

Problembehandlung für Terraform in Azure

Behandeln allgemeiner Probleme bei der Verwendung von Terraform in Azure

Nächste Schritte