Zum Inhalt springen

AppRoles konfigurieren und verwenden

Zuletzt aktualisiert am

AppRole ist eine Authentifizierungsmethode für Anwendungen und automatisierte Workloads. Dabei authentifiziert sich eine Anwendung mit einer Role-ID und einer Secret-ID statt mit Benutzername und Passwort und erhält ein Vault-kompatibles Token.

Eine AppRole besteht aus:

  • Einer Role-ID, die die AppRole identifiziert.
  • Einer oder mehreren Secret-IDs, mit denen sich ein Workload für die AppRole authentifiziert.
  • Einer Berechtigung für Lesezugriff oder Lese- und Schreibzugriff auf die Secrets Manager-Instanz.
  • Einer standardmäßigen Lebensdauer und einem Nutzungslimit für neu erstellte Secret-IDs.

Die Role-ID bleibt bestehen, bis Sie die AppRole löschen. Sie können Secret-IDs unabhängig voneinander erstellen und löschen. Dadurch können Sie Zugangsdaten rotieren, ohne die Role-ID zu ändern.

Beim Erstellen einer AppRole legen Sie die folgenden Standardwerte fest:

Geben Sie zuerst eine ganze Zahl und danach s für Sekunden, m für Minuten oder h für Stunden an, zum Beispiel 30s, 15m oder 24h. Verwenden Sie für einen Tag 24h; 1d wird nicht unterstützt.

Die Einstellungen werden beim Erstellen in die Secret-ID übernommen. Wenn Sie die AppRole aktualisieren, ändern Sie die Standardwerte für zukünftige Secret-IDs. Bestehende Secret-IDs werden nicht geändert.

  • Sie haben Zugriff auf die AppRole Private Preview.
  • Sie haben eine Secrets Manager-Instanz erstellt.
  • Sie verfügen über ein Zugriffstoken mit der Berechtigung, die Instanz zu aktualisieren.
  • Sie kennen die Projekt-ID und die ID der Secrets Manager-Instanz.
  • Die Quell-IP des Workloads ist in der Zugriffssteuerungsliste (ACL) der Instanz erlaubt.

Legen Sie die Werte für die folgenden Beispiele fest:

Terminal-Fenster
export AUTH_TOKEN=<Ihr-Zugriffstoken>
export PROJECT_ID=<Ihre-Projekt-ID>
export INSTANCE_ID=<Ihre-Instanz-ID>
export SM_API_URL=https://secrets-manager.api.eu01.stackit.cloud
export SM_INSTANCE_URL=https://prod.sm.eu01.stackit.cloud

Erstellen Sie eine AppRole mit Lesezugriff für einen automatisierten Workload:

Terminal-Fenster
curl --request POST \
--header "Authorization: Bearer $AUTH_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"description": "Read-only deployment workload",
"write": false,
"secret_id_num_uses": 0,
"secret_id_ttl": "24h"
}' \
"$SM_API_URL/v1/projects/$PROJECT_ID/instances/$INSTANCE_ID/approles"

Die Antwort enthält die generierte Role-ID:

{
"role_id": "3f7ab266-3a25-43e0-8db1-3f9af8c80782",
"write": false,
"secret_id_num_uses": 0,
"secret_id_ttl": "24h0m0s",
"description": "Read-only deployment workload"
}

Speichern Sie die zurückgegebene role_id für die folgenden Anfragen:

Terminal-Fenster
export ROLE_ID=<Ihre-Role-ID>

Generieren Sie eine Secret-ID für die AppRole:

Terminal-Fenster
curl --request POST \
--header "Authorization: Bearer $AUTH_TOKEN" \
--header "Content-Type: application/json" \
--data '{"description":"Production deployment credential"}' \
"$SM_API_URL/v1/projects/$PROJECT_ID/instances/$INSTANCE_ID/approles/$ROLE_ID/secretids"

Die Antwort enthält die Secret-ID und ihre Version:

{
"version": 1,
"secret_id": "07c053e5-c548-4873-bb93-9a741cd96aa3",
"num_uses": 0,
"ttl": "24h0m0s",
"description": "Production deployment credential"
}

Speichern Sie secret_id sofort in einem sicheren Speicher für Zugangsdaten. Verwenden Sie den Wert von version als Kennung, wenn Sie die Secret-ID später auflisten, aktualisieren oder löschen.

Senden Sie die Role-ID und Secret-ID an den Vault-kompatiblen AppRole-Anmeldeendpunkt:

Terminal-Fenster
curl --request POST \
--header "Content-Type: application/json" \
--data '{
"role_id": "<Ihre-Role-ID>",
"secret_id": "<Ihre-Secret-ID>"
}' \
"$SM_INSTANCE_URL/v1/auth/approle/login"

Das Token wird in auth.client_token zurückgegeben:

{
"auth": {
"client_token": "<Vault-Token>",
"lease_duration": 900,
"renewable": true
}
}

Wiederholte Anmeldeversuche mit einer falschen Secret-ID können die AppRole-Authentifizierung für die Role-ID vorübergehend sperren. Das Erstellen oder Rotieren einer Secret-ID hebt eine aktive Sperre nicht sofort auf. Informationen zu Antworten und erneuten Versuchen finden Sie unter Sperren bei der Authentifizierung behandeln.

Verwenden Sie das Token als X-Vault-Token-Header, wenn Sie auf Secrets zugreifen:

Terminal-Fenster
curl --header "X-Vault-Token: <Vault-Token>" \
"$SM_INSTANCE_URL/v1/$INSTANCE_ID/data/<Secret-Name>"

Empfehlungen zur Erneuerung und zum Widerruf von Token finden Sie unter Sitzungs- und Token-Handling.

So rotieren Sie eine Secret-ID ohne Unterbrechung des Zugriffs:

  1. Erstellen Sie eine weitere Secret-ID für dieselbe AppRole.
  2. Speichern Sie die neue Secret-ID im sicheren Speicher für Zugangsdaten des Workloads.
  3. Konfigurieren Sie den Workload für die Verwendung der neuen Secret-ID.
  4. Prüfen Sie, ob sich der Workload authentifizieren kann.
  5. Löschen Sie die bisherige Secret-ID über ihre Version.

Löschen Sie die bisherige Secret-ID:

Terminal-Fenster
export SECRET_ID_VERSION=<Version-der-bisherigen-Secret-ID>
curl --request DELETE \
--header "Authorization: Bearer $AUTH_TOKEN" \
"$SM_API_URL/v1/projects/$PROJECT_ID/instances/$INSTANCE_ID/approles/$ROLE_ID/secretids/$SECRET_ID_VERSION"

Wenn Sie eine AppRole löschen, werden alle zugehörigen Secret-IDs ungültig.

Beim Auflisten oder Abrufen der Metadaten wird die Secret-ID selbst nicht zurückgegeben. Die vollständigen Strukturen der Anfragen und Antworten finden Sie in der Secrets Manager API-Spezifikation.

  • Verwenden Sie für jeden Workload oder jede klar abgegrenzte Umgebung eine eigene AppRole.
  • Gewähren Sie nur Lesezugriff, wenn der Workload keine Secrets erstellen oder ändern muss.
  • Legen Sie eine begrenzte Lebensdauer und ein Nutzungslimit fest, wenn der Workload dies zulässt.
  • Speichern Sie Secret-IDs in einem dafür vorgesehenen sicheren Speicher und niemals im Quellcode.
  • Schreiben Sie keine Role-IDs, Secret-IDs oder Vault-Token in Anwendungsprotokolle.
  • Verwenden Sie mehrere Secret-IDs, um Zugangsdaten zu rotieren, ohne die Role-ID zu ändern.
  • Löschen Sie nicht mehr verwendete Secret-IDs sofort.
  • Erneuern Sie ein vorhandenes Vault-Token, anstatt sich für jede API-Anfrage erneut anzumelden.