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 PCS AWS
Die Slurm-REST-API in AWS PCS verwendet die JSON-Web-Token-Authentifizierung (JWT), um einen sicheren Zugriff auf Ihre Cluster-Ressourcen zu gewährleisten. AWS PCS stellt einen verwalteten Signaturschlüssel bereit, 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 einer Sicherheitsgruppe, die Port 6820 zulässt.
Verfahren
Um die Adresse des Slurm-REST-API-Endpunkts 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 den Abschnitt Scheduler-Authentifizierung.
-
Notieren Sie sich den ARN und die Version des JSON-Web-Token-Schlüssels (JWT).
-
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— Feld für Benutzerkommentare, das häufig verwendet wird, um einen für Menschen lesbaren Namen zu speichern -
dir— Heimatverzeichnis des Benutzers -
shell— Standard-Shell des Benutzers -
gids— Liste der zusätzlichen POSIX-Gruppen, in denen IDs sich der Benutzer befindet
-
-
-
Signieren Sie das JWT mit dem Signaturschlüssel, den Sie von Secrets Manager abgerufen haben.
-
Legen Sie eine angemessene Ablaufzeit für das Token fest.
Anmerkung
Als Alternative zum sun Antrag können Sie eine der folgenden Angaben machen:
-
username -
Ein benutzerdefinierter Feldname, den Sie über den
userclaimfieldin derAuthAltParameters Slurm custom settings -
Ein
nameFeld innerhalb desidAntrags
Um API-Anfragen zu authentifizieren
-
Fügen Sie das JWT-Token mithilfe 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 mithilfe von 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 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 zeigt, 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...