Service Accounts über die Metadaten-API für Object Storage verwenden
Zuletzt aktualisiert am
Am Ende dieses Tutorials bezieht eine Workload auf einem STACKIT Server temporäre S3-Zugangsdaten für Object Storage über die Metadaten-API des Servers, ohne dauerhafte Zugangsdaten auf der Maschine zu speichern. Außerdem lernen Sie, wie Sie ein Service-Account-Mapping und eine Bucket-Richtlinie im Voraus einrichten, sodass der Zugriff bereits ab dem Moment eingeschränkt ist, in dem der Service Account verbunden wird.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Object Storage ist in Ihrem Projekt aktiviert. Eine Anleitung finden Sie unter Object Storage aktivieren.
- Ein laufender STACKIT Server (VM) und ein STACKIT Service Account. Eine Anleitung zum Erstellen und Verbinden von Service Accounts finden Sie unter How to use Service Accounts via the IaaS-API.
curlundjqsind auf dem Server installiert.- Für den fortgeschrittenen Weg: die für Object Storage konfigurierte AWS CLI. Eine Anleitung finden Sie unter Set up the CLI client.
Service Account verbinden und auf dem Server auflisten
Abschnitt betitelt „Service Account verbinden und auf dem Server auflisten“Verbinden Sie den Service Account mit Ihrem Server, damit er 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 Service Accounts ü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 in etwa so aussehen:
{ "serviceAccountMails": ["my-service-account@sa.stackit.cloud"]}S3-Zugangsdaten über die Metadaten-API abrufen
Abschnitt betitelt „S3-Zugangsdaten über die Metadaten-API abrufen“Die Metadaten-API stellt temporäre S3-Zugangsdaten für den verbundenen Service Account bereit. Speichern Sie zunächst die Service-Account-Mail in einer Variablen:
SA_MAIL=$(curl -s http://169.254.169.254/stackit/v1/service-accounts | jq -r '.serviceAccountMails[0]')Fordern Sie anschließend die S3-Zugangsdaten für diesen Service Account an:
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/$SA_MAIL | jqDie Antwort sollte in etwa so aussehen:
{ "Code": "Success", "AccessKeyId": "AF17TKP7BTQX4HSLOXBA", "SecretAccessKey": "abcABC123456789012345678901234567890abcA", "Token": "******", "Expiration": "2026-07-07T10:30:00Z"}Verwenden Sie AccessKeyId, SecretAccessKey und Token, um S3-Anfragen aus der Workload zu authentifizieren.
Mapping und Bucket-Richtlinie im Voraus einrichten
Abschnitt betitelt „Mapping und Bucket-Richtlinie im Voraus einrichten“Um ein Zeitfenster mit uneingeschränktem Zugriff zu vermeiden, erstellen Sie das Service-Account-Mapping und wenden Sie eine Bucket-Richtlinie an, bevor Sie den Service Account mit dem Server verbinden. Wenn Sie das Mapping über die Object-Storage-API erstellen, erhalten Sie eine URN, die den Service Account identifiziert. Verwenden Sie diese URN als Principal in einer Bucket-Richtlinie.
-
Erstellen Sie auf einer Maschine mit der STACKIT CLI ein kurzlebiges Token für den Service Account, den Sie verbinden möchten. Für ein serverbasiertes Token rufen Sie es über die Metadaten-API ab, wie unter How to use Service Accounts via the IaaS-API beschrieben:
Terminal-Fenster TOKEN=$(curl -s http://169.254.169.254/stackit/v1/service-accounts/$SA_MAIL/token | jq -r '.token') -
Rufen Sie die Object-Storage-Operation create service account mit dem Token auf, um das Mapping zu erstellen und dessen URN zu erhalten. Ersetzen Sie
<PROJECT_ID>durch Ihre Projekt-ID:Terminal-Fenster curl -s -X POST \-H "Authorization: ******" \-H "Content-Type: application/json" \https://object-storage.api.eu01.stackit.cloud/v1/project/<PROJECT_ID>/service-account \| jqDie Antwort sollte in etwa so aussehen:
{"project": "cd5e788d-5b7b-4ab9-a20d-e790205df10b","urn": "urn:sgws:identity::12345678901234567890:user/my-service-account"}Weitere Informationen zu dieser Operation finden Sie in der API-Referenz.
-
Verwenden Sie die zurückgegebene
urnalsPrincipalin einer Bucket-Richtlinie, die nur den Zugriff gewährt, den die Workload benötigt. Die folgende Richtlinie erlaubt dem Service Account, Objekte in einem einzelnen Bucket zu lesen und zu schreiben:{"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. Eine Anleitung finden Sie unter Bucket Richtlinien.
-
Verbinden Sie den Service Account mit dem Server. Da die Bucket-Richtlinie bereits besteht, ist der Zugriff eingeschränkt, sobald der Service Account auf dem Server verfügbar wird:
Terminal-Fenster stackit server service-account attach <SERVICE_ACCOUNT_MAIL>@sa.stackit.cloud --server-id <SERVER_ID>
Weitere Informationen zum Schreiben von Richtlinien-Statements finden Sie unter Bucket Richtlinien. Um statt temporärer Zugangsdaten statische Zugangsdaten zu verwalten, lesen Sie Zugangsdaten erstellen und löschen.