View a markdown version of this page

Authentifizierung mit der Slurm-REST-API in AWS 5 STCK - AWS STCK

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

AWS-Managementkonsole
  1. Öffnen Sie die AWS PCS-Konsole unter. https://console.aws.amazon.com/pcs/

  2. Wählen Sie Ihren Cluster aus der Liste aus.

  3. Suchen Sie in den Cluster-Konfigurationsdetails nach dem Abschnitt Endpoints.

  4. Notieren Sie sich die private IP-Adresse und den Port für die Slurm-REST-API (slurmrestd).

  5. Du kannst API-Aufrufe tätigen, indem du korrekt formatierte HTTP-Anfragen an diese Adresse sendest.

AWS CLI
  1. Fragen Sie Ihren Cluster-Status mit aws pcs get-cluster ab. Suchen Sie in dem endpoints Feld in der Antwort nach dem SLURMRESTD Endpunkt. Ein Beispiel:

    "endpoints": [ { "type": "SLURMCTLD", "privateIpAddress": "192.0.2.1", "port": "6817" }, { "type": "SLURMRESTD", "privateIpAddress": "192.0.2.1", "port": "6820" } ]
  2. Sie können API-Aufrufe tätigen, indem Sie ordnungsgemäß formatierte HTTP-Anfragen an senden http://<privateIpAddress>:<port>/

Um den JWT-Signaturschlüssel abzurufen
  1. Öffnen Sie die AWS PCS-Konsole unter. https://console.aws.amazon.com/pcs/

  2. Wählen Sie Ihren Cluster aus der Liste aus.

  3. Suchen Sie in den Cluster-Konfigurationsdetails nach dem Abschnitt Scheduler-Authentifizierung.

  4. Notieren Sie sich den ARN und die Version des JSON Web Token (JWT) -Schlüssels.

  5. Verwenden Sie den AWS CLI , um den Signaturschlüssel von Secrets Manager abzurufen:

    aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:region:account:secret:name --version-id version
Um ein JWT-Token zu generieren
  1. 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

  2. Signieren Sie das JWT mit dem von Secrets Manager abgerufenen Signaturschlüssel.

  3. 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 userclaimfield im AuthAltParameters Slurm custom settings

  • Ein name Feld innerhalb des id Anspruchs

Um API-Anfragen zu authentifizieren
  1. 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>

  2. Stellen Sie HTTP-Anfragen an den REST-API-Endpunkt:

    Hier ist ein Beispiel für den Zugriff auf die /ping API mit Curl und dem Authorized: Bearer Header.

    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 \ --region aws-region \ --secret-id secret-arn \ --version-stage secret-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...