Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Autenticazione con l'API REST di Slurm in PCS AWS
L'API Slurm REST in AWS PCS utilizza l'autenticazione JSON Web Token (JWT) per garantire un accesso sicuro alle risorse del cluster. AWS PCS fornisce una chiave di firma gestita archiviata in AWS Secrets Manager, che viene utilizzata per generare token JWT contenenti dichiarazioni di identità utente specifiche.
Prerequisiti
Prima di autenticarti con l'API REST di Slurm, assicurati di avere:
-
Configurazione del cluster: cluster AWS PCS con Slurm 25.05+ e API REST abilitate.
-
Autorizzazioni AWS: accesso a AWS Secrets Manager per la chiave di firma JWT.
-
Informazioni sull'utente: nome utente, ID utente POSIX e uno o più gruppi POSIX IDs per l'account del cluster.
-
Accesso alla rete: connettività all'interno del VPC del cluster con gruppo di sicurezza che consente la porta 6820.
Procedura
Per recuperare l'indirizzo dell'endpoint dell'API REST di Slurm
Per recuperare la chiave di firma JWT
-
Apri la console AWS PCS all'indirizzo. https://console.aws.amazon.com/pcs/
-
Scegli il tuo cluster dall'elenco.
-
Nei dettagli di configurazione del cluster, individua la sezione Scheduler Authentication.
-
Nota l'ARN e la versione della chiave JSON Web Token (JWT).
-
Usa AWS CLI per recuperare la chiave di firma da Secrets Manager:
aws secretsmanager get-secret-value --secret-idarn:aws:secretsmanager:region:account:secret:name--version-idversion
Per generare un token JWT
-
Crea un JWT con le seguenti attestazioni obbligatorie:
-
exp— Tempo di scadenza in secondi dal 1970 per il JWT -
iat— Ora attuale in secondi dal 1970 -
sun— Il nome utente per l'autenticazione -
uid— L'ID utente POSIX -
gid— L'ID del gruppo POSIX -
id— Proprietà di identità POSIX aggiuntive-
gecos— Campo di commento dell'utente, spesso utilizzato per memorizzare un nome leggibile dall'uomo -
dir— La home directory dell'utente -
shell— shell predefinita dell'utente -
gids— Elenco dei gruppi POSIX aggiuntivi in cui si trova IDs l'utente
-
-
-
Firma il JWT utilizzando la chiave di firma recuperata da Secrets Manager.
-
Imposta un orario di scadenza appropriato per il token.
Nota
In alternativa al sun reclamo, puoi fornire una delle seguenti informazioni:
-
username -
Un nome di campo personalizzato che definisci tramite
userclaimfieldinAuthAltParameters Slurm custom settings -
Un
namecampo all'interno delidclaim
Per autenticare le richieste API
-
Includi il token JWT nelle tue richieste HTTP utilizzando uno di questi metodi:
-
Token Bearer: aggiungi un'intestazione
Authorization: Bearer<jwt> -
Slurm header: aggiunge un'intestazione
X-SLURM-USER-TOKEN:<jwt>
-
-
Effettua richieste HTTP all'endpoint dell'API REST:
Ecco un esempio di accesso all'
/pingAPI utilizzando curl e l'Authorized: Bearerheader.curl -X GET -H "Authorization: Bearer<jwt>" \ http://<privateIpAddress>:6820/slurm/v0.0.43/ping
Esempio di generazione JWT
Recupera la chiave di firma JWT del cluster AWS PCS e memorizzala come file locale. Sostituisci i valori per aws-region, secret-arn e secret version con valori appropriati per il tuo 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
Questo esempio in Python illustra come utilizzare la chiave di firma per generare un token 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)
Lo script stamperà un JWT sullo schermo.
abcdefgtjwttoken...