Schnellstart: Erstellen eines Azure-Dienstprinzipals für Ansible
In dieser Schnellstartanleitung erstellen Sie einen Azure-Dienstprinzipal mit der Azure CLI oder mit Azure PowerShell und führen die Authentifizierung bei Azure aus Ansible durch.
In diesem Artikel werden folgende Vorgehensweisen behandelt:
- Erstellen eines Azure-Dienstprinzipals mit der Azure CLI
- Erstellen eines Azure-Dienstprinzipals mithilfe von Azure PowerShell
- Zuweisen einer Rolle zum Azure-Dienstprinzipal
- Abrufen von Schlüsselinformationen aus dem Dienstprinzipal
- Festlegen von Umgebungsvariablen, damit Ansible die Dienstprinzipalwerte abrufen kann
- Testen des Dienstprinzipals
Voraussetzungen
- Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Installieren von Ansible: Verwenden Sie eine der folgenden Optionen:
- Installieren und Konfigurieren von Ansible auf einem virtuellen Linux-Computer
- Konfigurieren von Azure Cloud Shell
Erstellen eines Azure-Dienstprinzipals
Ein Azure-Dienstprinzipal stellt Ihnen ein dediziertes Konto zum Verwalten von Azure-Ressourcen mit Ansible zur Verfügung.
Führen Sie den folgenden Code aus, um einen Azure-Dienstprinzipal zu erstellen:
az ad sp create-for-rbac --name ansible \
--role Contributor \
--scopes /subscriptions/<subscription_id>
Hinweis
Bewahren Sie das in der Ausgabe enthaltene Kennwort an einem sicheren Ort auf.
Zuweisen einer Rolle zum Azure-Dienstprinzipal
Standardmäßig verfügen Dienstprinzipale nicht über die Zugriffsberechtigung, die für die Verwaltung von Ressourcen in Azure benötigt wird.
Führen Sie den folgenden Befehl aus, um dem Dienstprinzipal die Rolle Mitwirkender zuzuweisen:
az role assignment create --assignee <appID> \
--role Contributor \
--scope /subscriptions/<subscription_id>
Ersetzen Sie <appID>
durch den Wert, der in der Ausgabe des Befehls az ad sp create-for-rbac
enthalten ist.
Hinweis
Ändern Sie den Bereich der Rollenzuweisung von einem Abonnement in eine Ressourcengruppe, um die Sicherheit zu erhöhen.
Abrufen der Informationen zum Azure-Dienstprinzipal
Für die Authentifizierung bei Azure mit einem Dienstprinzipal benötigen Sie die folgenden Informationen:
- SubscriptionID
- ApplicationId des Dienstprinzipals
- Kennwort des Dienstprinzipals
- TenantID
Führen Sie die folgenden Befehle aus, um die Informationen zum Dienstprinzipal abzurufen:
az account show --query '{tenantId:tenantId,subscriptionid:id}';
az ad sp list --display-name ansible --query '{clientId:[0].appId}'
Authentifizieren bei Azure mit dem Dienstprinzipal
Führen Sie die folgenden Befehle aus, um die erforderlichen Umgebungsvariablen auf dem Ansible-Server einzufügen:
export AZURE_SUBSCRIPTION_ID=<SubscriptionID>
export AZURE_CLIENT_ID=<ApplicationId>
export AZURE_SECRET=<Password>
export AZURE_TENANT=<TenantID>
Ersetzen Sie <SubscriptionID>
, <ApplicationId>
, <Password>
und <TenantID>
durch die Werte Ihres Dienstprinzipalkontos.
Testen von Dienstprinzipalberechtigungen
Führen Sie den folgenden Befehl aus, um eine neue Azure-Ressourcengruppe zu erstellen:
ansible localhost -m azure_rm_resourcegroup -a "name=<resource_group_name> location=<resource_group_location>"
Ersetzen Sie <resource_group_name>
und <resource_group_location>
durch Ihre neuen Ressourcengruppenwerte.
[WARNING]: No inventory was parsed, only implicit localhost is available
localhost | CHANGED => {
"changed": true,
"contains_resources": false,
"state": {
"id": "/subscriptions/<subscriptionID>/resourceGroups/azcli-test",
"location": "eastus",
"name": "azcli-test",
"provisioning_state": "Succeeded",
"tags": null
}
}
Führen Sie den folgenden Befehl aus, um die Azure-Ressourcengruppe zu löschen:
ansible localhost -m azure_rm_resourcegroup -a "name=<resource_group_name> state=absent force_delete_nonempty=yes"
Ersetzen Sie <resource_group_name>
durch den Namen Ihrer Ressourcengruppe.
[WARNING]: No inventory was parsed, only implicit localhost is available
localhost | CHANGED => {
"changed": true,
"contains_resources": false,
"state": {
"id": "/subscriptions/subscriptionID>/resourceGroups/azcli-test",
"location": "eastus",
"name": "azcli-test",
"provisioning_state": "Succeeded",
"status": "Deleted",
"tags": null
}
}