Verwenden Sie Dienstkonten über die Metadaten-API für Object Storage
Zuletzt aktualisiert am
Am Ende dieses Tutorials erhält ein Workload auf einem STACKIT-Server über die Server-Metadaten-API temporäre S3-Anmeldeinformationen für Object Storage, ohne dass langlebige Anmeldeinformationen auf dem Computer gespeichert werden. Sie erfahren außerdem, wie Sie eine Zuordnung des Dienstkontos und eine Bucket-Richtlinie vorab bereitstellen, sodass der Zugriff ab dem Zeitpunkt der Verknüpfung des Dienstkontos eingeschränkt ist.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Object Storage in Ihrem Projekt aktiviert. Anweisungen finden Sie unter Object Storage aktivieren.
- Ein laufender STACKIT-Server (VM) und ein STACKIT-Dienstkonto. Anweisungen zum Erstellen und Verbinden von Dienstkonten finden Sie unter So nutzen Sie Dienstkonten über die IaaS-API.
- Auf dem Server sind
curlundjqinstalliert. - Für den erweiterten Pfad: die für Object Storage konfigurierte AWS CLI. Anweisungen finden Sie unter Richten Sie den CLI-Client ein.
Verbinden Sie das Dienstkonto und listen Sie es vom Server auf
Abschnitt betitelt „Verbinden Sie das Dienstkonto und listen Sie es vom Server auf“Verbinden Sie das Dienstkonto mit Ihrem Server, damit es innerhalb der VM verfügbar wird. Führen Sie den folgenden Befehl aus und ersetzen Sie <SERVICE_ACCOUNT_MAIL> und <SERVER_ID> durch Ihre Werte:
stackit server service-account attach <SERVICE_ACCOUNT_MAIL>@sa.stackit.cloud --server-id <SERVER_ID>Listen Sie auf dem Server die verbundenen Dienstkonten über die Metadaten-API auf. Die Metadaten-API ist nur innerhalb des Servers unter der bekannten Adresse http://169.254.169.254 erreichbar:
curl -s http://169.254.169.254/stackit/v1/service-accounts | jqDie Antwort sollte etwa so aussehen:
{ "serviceAccountMails": ["my-service-account@sa.stackit.cloud"]}Rufen Sie die S3-Anmeldeinformationen von der Metadaten-API ab
Abschnitt betitelt „Rufen Sie die S3-Anmeldeinformationen von der Metadaten-API ab“Die Metadaten-API stellt temporäre S3-Anmeldeinformationen für das verbundene Dienstkonto bereit. Speichern Sie zunächst die E-Mail des Dienstkontos in einer Variablen:
SA_MAIL=$(curl -s http://169.254.169.254/stackit/v1/service-accounts | jq -r '.serviceAccountMails[0]')Fordern Sie dann die S3-Anmeldeinformationen für dieses Dienstkonto an:
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/$SA_MAIL | jqDie Antwort sollte etwa so aussehen:
{ "Code": "Success", "AccessKeyId": "AF17TKP7BTQX4HSLOXBA", "SecretAccessKey": "abcABC123456789012345678901234567890abcA", "Token": "eyJhbGciOiValidToken...", "Expiration": "2026-07-07T10:30:00Z"}Verwenden Sie AccessKeyId, SecretAccessKey und Token, um S3-Anfragen aus dem Workload zu authentifizieren.
Stellen Sie die Zuordnungs- und Bucket-Richtlinie vorab bereit
Abschnitt betitelt „Stellen Sie die Zuordnungs- und Bucket-Richtlinie vorab bereit“Um ein Zeitfenster mit uneingeschränktem Zugriff zu vermeiden, erstellen Sie die Dienstkonto-Zuordnung und wenden Sie eine Bucket-Richtlinie vor dem Verbinden des Dienstkontos mit dem Server an. Wenn Sie die Zuordnung über die Object-Storage-API erstellen, erhalten Sie eine URN, die das Dienstkonto identifiziert. Verwenden Sie diese URN als Principal in einer Bucket-Richtlinie.
-
Erstellen Sie auf einem Computer mit der STACKIT-CLI ein kurzlebiges Token für das Dienstkonto, das Sie verbinden möchten. Rufen Sie ein serverbasiertes Token aus der Metadaten-API ab, wie in So nutzen Sie Service Accounts über die IaaS-API gezeigt:
Terminal-Fenster TOKEN=$(curl -s http://169.254.169.254/stackit/v1/service-accounts/$SA_MAIL/token | jq -r '.token') -
Rufen Sie mit dem Token den Vorgang create service account von Object Storage auf, um die Zuordnung zu erstellen und die zugehörige URN zu erhalten. Ersetzen Sie
<PROJECT_ID>durch Ihre Projekt-ID:Terminal-Fenster curl -s -X POST \-H "Authorization: Bearer $TOKEN" \-H "Content-Type: application/json" \https://object-storage.api.eu01.stackit.cloud/v1/project/<PROJECT_ID>/service-account \| jqDie Antwort sollte etwa so aussehen:
{"project": "cd5e788d-5b7b-4ab9-a20d-e790205df10b","urn": "urn:sgws:identity::12345678901234567890:user/my-service-account"}Um mehr über diesen Vorgang zu erfahren, lesen Sie die API-Referenz.
-
Verwenden Sie die zurückgegebene
urnalsPrincipalin einer Bucket-Richtlinie, die nur die für den Workload erforderlichen Berechtigungen gewährt. Die folgende Richtlinie erlaubt dem Dienstkonto das Lesen und Schreiben von Objekten in einem einzelnen Bucket:{"Statement": [{"Sid": "AllowServiceAccountAccess","Effect": "Allow","Principal": {"AWS": "urn:sgws:identity::12345678901234567890:user/my-service-account"},"Action": ["s3:GetObject", "s3:PutObject"],"Resource": "urn:sgws:s3:::my-super-bucket/*"}]}Wenden Sie die Richtlinie auf Ihren Bucket an. Anweisungen finden Sie unter Verwalten Sie Bucket-Richtlinien.
-
Verbinden Sie das Dienstkonto mit dem Server. Da die Bucket-Richtlinie bereits vorhanden ist, wird der Zugriff begrenzt, sobald das Dienstkonto auf dem Server verfügbar wird:
Terminal-Fenster stackit server service-account attach <SERVICE_ACCOUNT_MAIL>@sa.stackit.cloud --server-id <SERVER_ID>
Um mehr über das Schreiben von Richtlinienanweisungen zu erfahren, lesen Sie Verwalten Sie Bucket-Richtlinien. Um statische Anmeldeinformationen anstelle temporärer Anmeldeinformationen zu verwalten, lesen Sie Anmeldeinformationen erstellen und löschen.