Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Authentification avec l'API REST de Slurm sur PCS AWS
L'API REST de Slurm dans AWS PCS utilise l'authentification JSON Web Token (JWT) pour garantir un accès sécurisé aux ressources de votre cluster. AWS PCS fournit une clé de signature gérée stockée dans AWS Secrets Manager, que vous utilisez pour générer des jetons JWT contenant des revendications d'identité utilisateur spécifiques.
Conditions préalables
Avant de vous authentifier avec l'API REST de Slurm, assurez-vous d'avoir :
-
Configuration du cluster : cluster AWS PCS avec Slurm 25.05+ et API REST activée.
-
Autorisations AWS : accès à AWS Secrets Manager pour la clé de signature JWT.
-
Informations utilisateur : nom d'utilisateur, ID utilisateur POSIX et un ou plusieurs groupes POSIX IDs pour votre compte de cluster.
-
Accès réseau : connectivité au sein du VPC de votre cluster avec le groupe de sécurité autorisant le port 6820.
Procédure
Pour récupérer l'adresse du point de terminaison de l'API REST Slurm
Pour récupérer la clé de signature JWT
-
Ouvrez la console AWS PCS à l'adresse https://console.aws.amazon.com/pcs/
. -
Choisissez votre cluster dans la liste.
-
Dans les détails de configuration du cluster, recherchez la section Authentification du planificateur.
-
Notez l'ARN et la version de la clé JSON Web Token (JWT).
-
Utilisez le AWS CLI pour récupérer la clé de signature depuis Secrets Manager :
aws secretsmanager get-secret-value --secret-idarn:aws:secretsmanager:region:account:secret:name--version-idversion
Pour générer un jeton JWT
-
Créez un JWT avec les revendications requises suivantes :
-
exp— Délai d'expiration en secondes depuis 1970 pour le JWT -
iat— Heure actuelle en secondes depuis 1970 -
sun— Le nom d'utilisateur pour l'authentification -
uid— L'ID utilisateur POSIX -
gid— L'identifiant du groupe POSIX -
id— Propriétés d'identité POSIX supplémentaires-
gecos— Champ de commentaire utilisateur, souvent utilisé pour stocker un nom lisible par l'homme -
dir— Répertoire personnel de l'utilisateur -
shell— Shell par défaut de l'utilisateur -
gids— Liste des groupes POSIX supplémentaires auxquels IDs appartient l'utilisateur
-
-
-
Signez le JWT à l'aide de la clé de signature récupérée dans Secrets Manager.
-
Définissez une date d'expiration appropriée pour le jeton.
Note
Comme alternative à la sun réclamation, vous pouvez fournir l'un des documents suivants :
-
username -
Un nom de champ personnalisé que vous définissez via
userclaimfieldleAuthAltParameters Slurm custom settings -
Un
namechamp au sein de laidréclamation
Pour authentifier les demandes d'API
-
Incluez le jeton JWT dans vos requêtes HTTP en utilisant l'une des méthodes suivantes :
-
jeton porteur — Ajouter un en-tête
Authorization: Bearer<jwt> -
En-tête Slurm — Ajouter un en-tête
X-SLURM-USER-TOKEN:<jwt>
-
-
Envoyez des requêtes HTTP au point de terminaison de l'API REST :
Voici un exemple d'accès à l'
/pingAPI à l'aide de curl et de l'Authorized: Beareren-tête.curl -X GET -H "Authorization: Bearer<jwt>" \ http://<privateIpAddress>:6820/slurm/v0.0.43/ping
Exemple de génération JWT
Récupérez la clé de signature JWT du cluster AWS PCS et stockez-la dans un fichier local. Remplacez les valeurs pour aws-region, secret-arn et secret version par des valeurs adaptées à votre cluster.
#!/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
Cet exemple Python illustre comment utiliser la clé de signature pour générer un jeton JWT :
#!/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)
Le script imprimera un JWT à l'écran.
abcdefgtjwttoken...