# Azure verbinden

# Azure verbinden

Costfluent liest Azure-Kosten über einen Dienstprinzipal, den Sie erstellen. Eine Verbindung ist ein
Dienstprinzipal und importiert jedes Abonnement, dem Sie diesen Prinzipal zuweisen. Mehrere
Abonnements brauchen also keine mehreren Verbindungen.

Beim Verbinden werden die vergangenen sechs Monate je Abonnement importiert.

## Welche Rechte Costfluent erhält

Zwei integrierte Rollen, und sonst nichts:

- **Cost Management Reader** — liest den Cost-Details-Bericht, auf dem der Import aufbaut.
- **Reader** — liest die Abonnement-Metadaten, die die Kosten beschriften.

Keine der Rollen kann etwas in Ihrem Abonnement ändern. Vergeben Sie weder `Contributor` noch
`Owner`.

Weisen Sie sie je Abonnement zu oder einmalig auf einer Verwaltungsgruppe, die die zu importierenden
Abonnements umfasst. Eine Zuweisung auf Verwaltungsgruppenebene deckt auch später hinzugefügte
Abonnements ab.

## Dienstprinzipal erstellen

Prüfen Sie, in welchem Mandanten und Abonnement Sie arbeiten:

```shell
az account show --query '{tenantId:tenantId,subscriptionId:id,subscriptionName:name}' --output table
```

Erstellen Sie den Dienstprinzipal. Die Ausgabe enthält `appId`, `password` und `tenant`. Das
Passwort lässt sich später nicht erneut abrufen — speichern Sie es jetzt in Ihrem Passwortmanager.

```shell
az ad sp create-for-rbac --name "Costfluent" --output json
```

## Die beiden Rollen zuweisen

Wiederholen Sie dies für jedes Abonnement, das importiert werden soll:

```shell
SUBSCRIPTION_ID="$(az account show --query id --output tsv)"
APP_ID="<die appId aus dem vorherigen Schritt>"

az role assignment create --assignee "$APP_ID" \
  --role "Cost Management Reader" --scope "/subscriptions/$SUBSCRIPTION_ID"

az role assignment create --assignee "$APP_ID" \
  --role "Reader" --scope "/subscriptions/$SUBSCRIPTION_ID"
```

Oder vergeben Sie beide einmalig auf einer Verwaltungsgruppe, was jedes darunterliegende Abonnement
abdeckt:

```shell
MANAGEMENT_GROUP_ID="<Ihre Verwaltungsgruppen-ID>"
SCOPE="/providers/Microsoft.Management/managementGroups/$MANAGEMENT_GROUP_ID"

az role assignment create --assignee "$APP_ID" --role "Cost Management Reader" --scope "$SCOPE"
az role assignment create --assignee "$APP_ID" --role "Reader" --scope "$SCOPE"
```

Rollenzuweisungen brauchen einen Moment, bis sie wirksam sind. Ein Autorisierungsfehler unmittelbar
danach bedeutet nicht, dass die Zugangsdaten falsch sind.

## Verbindung hinzufügen

Öffnen Sie in Costfluent **Einstellungen**, dann **Integrationen**, wählen Sie **Azure** und den Tab
**Verbinden**. Füllen Sie die drei Felder aus:

| Feld | Wert |
|---|---|
| Azure AD Tenant ID | `tenant` des Dienstprinzipals |
| Service Principal App ID | `appId` des Dienstprinzipals |
| Service Principal Password | `password` des Dienstprinzipals |

Es gibt kein Abonnementfeld: Welche Abonnements importiert werden, entscheiden die oben vergebenen
Rollenzuweisungen, und Costfluent liest das aus Azure.

Costfluent prüft die Zugangsdaten vor dem Speichern gegen die Cost-Details-API. Eine Verbindung, die
gespeichert wird, kann Ihre Kosten also auch lesen.

## Nach dem Verbinden

Der Tab **Verwalten** listet die Verbindung mit ihrer Mandanten-ID. Über das Zahnrad daneben sehen
Sie, ob die Zugangsdaten noch funktionieren, welche Workspaces die Verbindung versorgt, welche
Abrechnungsmonate importiert wurden und eine Karte **Abonnements** mit jedem Abonnement, das der
Prinzipal erreicht, und was die Verbindung mit jedem tut.

Ein Abonnement, das der Prinzipal zwar sieht, dessen Kosten er aber nicht lesen kann, wird als nicht
verfügbar mit Begründung gelistet, statt gesund auszusehen und nie Daten zu liefern. Eine später
vergebene Rolle auf einem weiteren Abonnement braucht keine neue Verbindung: Es erscheint nach der
nächsten Prüfung und wird ebenfalls sechs Monate rückwirkend importiert.

**Prüfungen ausführen** auf der Verbindungsseite führt die Prüfungen erneut aus und meldet jede
einzeln, sodass ein Fehler den fehlgeschlagenen Schritt benennt: die Anmeldung oder das Lesen der
Kostendaten. Die Ausführung läuft im Hintergrund, und die Seite aktualisiert sich selbst, sobald sie
fertig ist.

## Zugangsdaten wechseln oder entfernen

Setzen Sie die Zugangsdaten des Dienstprinzipals in Azure zurück und nutzen Sie dann
**Zugangsdaten aktualisieren** auf der Verbindungsseite. Zum Stilllegen entfernen Sie die Verbindung
in Costfluent und löschen in Azure beide Rollenzuweisungen sowie den Dienstprinzipal.
