Authentifizieren von Terraform bei Azure
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.
Um Terraform-Befehle für Ihr Azure-Abonnement zu verwenden, müssen Sie Terraform zunächst bei diesem Abonnement authentifizieren. In diesem Artikel werden einige häufige Szenarien für die Authentifizierung bei Azure behandelt.
In diesem Artikel werden folgende Vorgehensweisen behandelt:
- 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.
Konfigurieren von Terraform: Konfigurieren Sie Terraform mithilfe einer der folgenden Optionen, sofern noch nicht geschehen:
2. 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 über ein Microsoft-Konto mit Cloud Shell (mit Bash oder PowerShell)
- Authentifizieren über ein Microsoft-Konto mit Windows (mit Bash oder PowerShell)
- Authentifizieren über einen Dienstprinzipal:
- Erstellen Sie einen Dienstprinzipal, falls Sie noch nicht über einen verfügen.
- Authentifizieren Sie sich mithilfe von Umgebungsvariablen bei Azure, oder authentifizieren Sie sich mithilfe des Terraform-Anbieterblocks bei Azure.
Authentifizieren bei Azure über ein Microsoft-Konto
Ein Microsoft-Konto ist ein Benutzername (der einer E-Mail und seinen Anmeldeinformationen zugeordnet ist), der zum Anmelden bei Microsoft-Dienste verwendet wird , z. B. Azure. Ein Microsoft-Konto kann mit einem oder mehreren Azure-Abonnements verknüpft werden, wobei eines davon das Standardabonnement ist.
Die folgenden Schritte zeigen Ihnen, wie Sie vorgehen:
- Melden Sie sich interaktiv mit einem Microsoft-Konto bei Azure an.
- Auflisten der zugehörigen Azure-Abonnements des Kontos (einschließlich der Standardeinstellung)
- Legen Sie das aktuelle Abonnement fest.
Öffnen Sie eine Befehlszeile, die Zugriff auf die Azure CLI hat.
Führen Sie az login ohne Parameter aus, und folgen Sie den Anweisungen, um sich bei Azure anzumelden.
az login
Die wichtigsten Punkte:
- Bei erfolgreicher Anmeldung wird eine Liste der Azure-Abonnements angezeigt,
az login
die dem angemeldeten Microsoft-Konto zugeordnet sind, einschließlich des Standardabonnements.
- Bei erfolgreicher Anmeldung wird eine Liste der Azure-Abonnements angezeigt,
Führen Sie zum Überprüfen des aktuellen Azure-Abonnements az account show aus.
az account show
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. - Mit 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. durchlive.com#admin@hotmail.com
ersetzen.
- Ersetzen Sie den Platzhalter
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 vonaz 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 mitaz account set
angegeben haben.
- Ersetzen Sie den Platzhalter
Erstellen eines Dienstprinzipals
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 häufigste Muster besteht darin, sich interaktiv bei Azure anzumelden, einen Dienstprinzipal zu erstellen, den Dienstprinzipal zu testen und dann diesen Dienstprinzipal für die zukünftige Authentifizierung zu verwenden (interaktiv oder aus Ihren Skripts).
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.
Wenn Sie einen Dienstprinzipal über Git Bash erstellen, legen Sie die Umgebungsvariable
MSYS_NO_PATHCONV
fest. (Dieser Schritt ist nicht erforderlich, wenn Sie Cloud Shell verwenden.)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 das Erstellen eines Dienstprinzipals nicht häufig geschieht, legt das Beispiel den Wert für die aktuelle Sitzung fest. Um diese Umgebungsvariable global festzulegen, fügen Sie die Einstellung der~/.bashrc
-Datei hinzu.
- Sie können die Umgebungsvariable
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 WerteappId
,password
undtenant
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 zu Rollenbasierten Zugriffssteuerungsrollen (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 Optionen beim Erstellen eines Dienstprinzipals mit der Azure CLI finden Sie im Artikel Erstellen eines Azure-Dienstprinzipals mit der Azure CLI.
- Sie können
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.
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>"
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
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 WertARM_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 der 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. Es ist jedoch nicht ratsam, Anmeldeinformationen in einer Klartextdatei zu speichern, die von nicht vertrauenswürdigen Personen angezeigt werden kann.
3. Überprüfen der Ergebnisse
Überprüfen Sie, ob Sie sich beim Azure-Abonnement authentifiziert haben, indem Sie das aktuelle Abonnement anzeigen.
Führen Sie zum Überprüfen des aktuellen Azure-Abonnements über die Azure CLI az account show aus.
az account show
Nächste Schritte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für