Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Authentifizierung mit der Slurm-REST-API in AWS 5 STCK
Die Slurm-REST-API in AWS PCS verwendet die JSON Web Token (JWT) -Authentifizierung, um den sicheren Zugriff auf Ihre Cluster-Ressourcen zu gewährleisten. AWS PCS bietet einen verwalteten Signaturschlüssel, der in AWS Secrets Manager gespeichert ist und den Sie verwenden, um JWT-Token zu generieren, die bestimmte Benutzeridentitätsansprüche enthalten.
Voraussetzungen
Bevor Sie sich mit der Slurm-REST-API authentifizieren, stellen Sie sicher, dass Sie über Folgendes verfügen:
-
Cluster-Konfiguration: AWS PCS-Cluster mit Slurm 25.05+ und aktivierter REST-API.
-
AWS-Berechtigungen: Zugriff auf AWS Secrets Manager für den JWT-Signaturschlüssel.
-
Benutzerinformationen: Benutzername, POSIX-Benutzer-ID und eine oder mehrere POSIX-Gruppen-IDs für Ihr Cluster-Konto.
-
Netzwerkzugriff: Konnektivität innerhalb der VPC Ihres Clusters mit Sicherheitsgruppe, die Port 6820 zulässt.
Verfahren
Um die Slurm-REST-API-Endpunktadresse abzurufen
Um den JWT-Signaturschlüssel abzurufen
-
Öffnen Sie die AWS PCS-Konsole unter. https://console.aws.amazon.com/pcs/
-
Wählen Sie Ihren Cluster aus der Liste aus.
-
Suchen Sie in den Cluster-Konfigurationsdetails nach dem Abschnitt Scheduler-Authentifizierung.
-
Notieren Sie sich den ARN und die Version des JSON Web Token (JWT) -Schlüssels.
-
Verwenden Sie den AWS CLI , um den Signaturschlüssel von Secrets Manager abzurufen:
aws secretsmanager get-secret-value --secret-idarn:aws:secretsmanager:region:account:secret:name--version-idversion
Um ein JWT-Token zu generieren
-
Erstellen Sie ein JWT mit den folgenden erforderlichen Ansprüchen:
-
exp— Ablaufzeit in Sekunden seit 1970 für das JWT -
iat— Aktuelle Zeit in Sekunden seit 1970 -
sun— Der Benutzername für die Authentifizierung -
uid— Die POSIX-Benutzer-ID -
gid— Die POSIX-Gruppen-ID -
id— Zusätzliche POSIX-Identitätseigenschaften-
gecos— Benutzerkommentarfeld, das häufig zum Speichern eines menschenlesbaren Namens verwendet wird -
dir— Home-Verzeichnis des Benutzers -
shell— Die Standard-Shell des Benutzers -
gids— Liste zusätzlicher POSIX-Gruppen-IDs, in denen sich der Benutzer befindet
-
-
-
Signieren Sie das JWT mit dem von Secrets Manager abgerufenen Signaturschlüssel.
-
Stellen Sie eine angemessene Ablaufzeit für das Token ein.
Anmerkung
Als Alternative zum sun Antrag können Sie eine der folgenden Angaben machen:
-
username -
Ein benutzerdefinierter Feldname, den Sie über das
userclaimfieldimAuthAltParameters Slurm custom settings -
Ein
nameFeld innerhalb desidAnspruchs
Um API-Anfragen zu authentifizieren
-
Fügen Sie das JWT-Token mit einer der folgenden Methoden in Ihre HTTP-Anfragen ein:
-
Bearer-Token — Header hinzufügen
Authorization: Bearer<jwt> -
Slurm-Header — Header hinzufügen
X-SLURM-USER-TOKEN:<jwt>
-
-
Stellen Sie HTTP-Anfragen an den REST-API-Endpunkt:
Hier ist ein Beispiel für den Zugriff auf die
/pingAPI mit Curl und demAuthorized: BearerHeader.curl -X GET -H "Authorization: Bearer<jwt>" \ http://<privateIpAddress>:6820/slurm/v0.0.43/ping
Beispiel für eine JWT-Generierung
Rufen Sie den JWT-Signaturschlüssel des AWS PCS-Clusters ab und speichern Sie ihn als lokale Datei. Ersetzen Sie die Werte für aws-region, secret-arn und secret version durch Werte, die für Ihren Cluster geeignet sind.
#!/bin/bash SECRET_KEY=$(aws secretsmanager get-secret-value \ --regionaws-region\ --secret-idsecret-arn\ --version-stagesecret-version\ --query 'SecretString' \ --output text) echo "$SECRET_KEY" | base64 --decode > jwt.key
Dieses Python-Beispiel veranschaulicht, wie der Signaturschlüssel verwendet wird, um ein JWT-Token zu generieren:
#!/usr/bin/env python3 import sys import os import pprint import json import time from datetime import datetime, timedelta, timezone from jwt import JWT from jwt.jwa import HS256 from jwt.jwk import jwk_from_dict from jwt.utils import b64decode,b64encode if len(sys.argv) != 3: sys.exit("Usage: gen_jwt.py [jwt_key_file] [expiration_time_seconds]") SIGNING_KEY = sys.argv[1] EXPIRATION_TIME = int(sys.argv[2]) with open(SIGNING_KEY, "rb") as f: priv_key = f.read() signing_key = jwk_from_dict({ 'kty': 'oct', 'k': b64encode(priv_key) }) message = { "exp": int(time.time() + EXPIRATION_TIME), "iat": int(time.time()), "sun": "ec2-user", "uid": 1000, "gid": 1000, "id": { "gecos": "EC2 User", "dir": "/home/ec2-user", "gids": [1000], "shell": "/bin/bash" } } a = JWT() compact_jws = a.encode(message, signing_key, alg='HS256') print(compact_jws)
Das Skript druckt ein JWT auf den Bildschirm.
abcdefgtjwttoken...