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 AWS 2 PEZZI
L'API REST Slurm 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 memorizzata in AWS Secrets Manager, che viene utilizzata per generare token JWT contenenti specifiche dichiarazioni di identità utente.
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 abilitata.
-
Autorizzazioni AWS: accesso a AWS Secrets Manager per la chiave di firma JWT.
-
Informazioni utente: nome utente, ID utente POSIX e uno o più ID di gruppo POSIX 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
-
Aprire 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.
-
Annota l'ARN e la versione della chiave JSON Web Token (JWT).
-
Usa il 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 per i commenti dell'utente, spesso utilizzato per memorizzare un nome leggibile dall'uomo -
dir— Home directory dell'utente -
shell— Shell predefinita dell'utente -
gids— Elenco degli ID di gruppo POSIX aggiuntivi in cui si trova l'utente
-
-
-
Firma il JWT utilizzando la chiave di firma recuperata da Secrets Manager.
-
Imposta un'ora di scadenza appropriata per il token.
Nota
In alternativa al sun reclamo, puoi fornire uno dei seguenti:
-
username -
Un nome di campo personalizzato che definisci tramite
userclaimfieldnelAuthAltParameters Slurm custom settings -
Un
namecampo all'interno delidreclamo
Per autenticare le richieste API
-
Includi il token JWT nelle tue richieste HTTP utilizzando uno di questi metodi:
-
Token al portatore: aggiungi un'intestazione
Authorization: Bearer<jwt> -
Intestazione Slurm: aggiungi intestazione
X-SLURM-USER-TOKEN:<jwt>
-
-
Effettua richieste HTTP all'endpoint dell'API REST:
Ecco un esempio di accesso all'
/pingAPI usando 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...