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.

Erstellen eines Azure-Dienstprinzipals

Ein Azure-Dienstprinzipal bietet Ihnen ein dediziertes Konto zum Verwalten von Azure-Ressourcen mit Ansible.

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-rba 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

Um sich bei Azure mit einem Dienstprinzipal zu authentifizieren, 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 aufzufüllen:

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
    }
}

Nächste Schritte