Freigeben über


Authentifizieren bei Azure mit Dienstprinzipal

In diesem Artikel wird erläutert, wie Sie Terraform bei Azure mit einem Dienstprinzipal authentifizieren.

In diesem Artikel werden folgende Vorgehensweisen behandelt:

  • Erstellen eines Dienstprinzipals
  • Angeben von Dienstprinzipalanmeldeinformationen in Umgebungsvariablen
  • Angeben der Anmeldeinformationen für den Dienstprinzipal in einem Terraform-Anbieterblock

Erstellen eines Dienstprinzipals

Wenn Sie keinen Zugriff auf einen Dienstprinzipal haben, fahren Sie mit diesem Abschnitt fort, um einen neuen Dienstprinzipal zu erstellen. Wenn Sie über einen Dienstprinzipal verfügen, den Sie verwenden können, fahren Sie mit dem Abschnitt fort, und geben Sie Dienstprinzipalanmeldeinformationen an.

Automatisierte Tools wie Terraform, die Azure-Dienste bereitstellen oder verwenden, sollten stets über eingeschränkte Berechtigungen verfügen. Azure bietet Dienstprinzipale, damit Anwendungen nicht als Benutzer mit uneingeschränkten Berechtigungen angemeldet werden müssen.

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. Um einen Dienstprinzipal zu erstellen, melden Sie sich bei Azure an. 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> --role Contributor --scopes /subscriptions/<subscription_id>
    

    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.
    • In diesem Artikel wird ein Dienstprinzipal mit der Rolle Mitwirkender verwendet. Weitere Informationen zur rollenbasierten Zugriffssteuerung (Role-Based Access Control, RBAC) finden Sie unter RBAC: 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 von Dienstprinzipalanmeldeinformationen

Es gibt eine Reihe von Möglichkeiten zum Angeben Ihrer Dienstprinzipalanmeldeinformationen. Aus Sicherheitsgründen empfehlen wir jedoch, anmeldeinformationen nicht im Anbieterblock zu speichern. Diese Technik wird nur zu Vollständigkeits- und Testzwecken gezeigt.

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:

    • Weitere Informationen zum Arbeiten mit Umgebungsvariablen in Terraform HCL finden Sie unter Lesen und Verwenden von Umgebungsvariablen in Terraform-Läufen.
    • 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.
  4. Zum Abschnitt springen, Nächste Schritte

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

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.

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 = "~>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

Nächste Schritte