Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Autenticación con la API REST de Slurm en PCS AWS
La API REST de Slurm en AWS PCS utiliza la autenticación por token web JSON (JWT) para garantizar el acceso seguro a los recursos del clúster. AWS PCS proporciona una clave de firma gestionada almacenada en AWS Secrets Manager, que se utiliza para generar tokens JWT que contienen declaraciones de identidad de usuario específicas.
Requisitos previos
Antes de autenticarse con la API REST de Slurm, asegúrese de tener lo siguiente:
-
Configuración del clúster: clúster de AWS PCS con Slurm 25.05+ y la API REST habilitadas.
-
Permisos de AWS: acceso a AWS Secrets Manager para obtener la clave de firma de JWT.
-
Información de usuario: nombre de usuario, ID de usuario de POSIX y uno o más grupos de POSIX IDs para su cuenta de clúster.
-
Acceso a la red: conectividad dentro de la VPC del clúster con un grupo de seguridad que permite el puerto 6820.
Procedimiento
Para recuperar la dirección de punto final de la API REST de Slurm
Para recuperar la clave de firma de JWT
-
Abra la consola AWS PCS en https://console.aws.amazon.com/pcs/
. -
Elija su clúster de la lista.
-
En los detalles de configuración del clúster, busque la sección de autenticación del programador.
-
Anote el ARN y la versión de la clave JSON Web Token (JWT).
-
Utilice el AWS CLI para recuperar la clave de firma de Secrets Manager:
aws secretsmanager get-secret-value --secret-idarn:aws:secretsmanager:region:account:secret:name--version-idversion
Para generar un token JWT
-
Cree un JWT con las siguientes afirmaciones obligatorias:
-
exp— Tiempo de caducidad en segundos desde 1970 para el JWT -
iat— Tiempo actual en segundos desde 1970 -
sun— El nombre de usuario para la autenticación -
uid— El seudónimo de POSIX -
gid— El ID del grupo POSIX -
id— Propiedades de identidad POSIX adicionales-
gecos— Campo de comentarios de usuario, que se utiliza a menudo para almacenar un nombre legible por humanos -
dir— Directorio principal del usuario -
shell— Consola predeterminada del usuario -
gids— Lista de grupos POSIX adicionales en los que se encuentra IDs el usuario
-
-
-
Firme el JWT con la clave de firma recuperada de Secrets Manager.
-
Establezca un tiempo de caducidad adecuado para el token.
nota
Como alternativa a la sun reclamación, puedes proporcionar cualquiera de los siguientes datos:
-
username -
Un nombre de campo personalizado que se define mediante
userclaimfieldelAuthAltParameters Slurm custom settings -
Un
namecampo dentro de laidreclamación
Para autenticar las solicitudes de API
-
Incluye el token JWT en tus solicitudes HTTP mediante uno de estos métodos:
-
Token de portador: agrega encabezado
Authorization: Bearer<jwt> -
Cabecera Slurm — Añadir cabecera
X-SLURM-USER-TOKEN:<jwt>
-
-
Realice solicitudes HTTP al punto final de la API REST:
Este es un ejemplo de cómo acceder a la
/pingAPI mediante curl y elAuthorized: Bearerencabezado.curl -X GET -H "Authorization: Bearer<jwt>" \ http://<privateIpAddress>:6820/slurm/v0.0.43/ping
Ejemplo de generación de JWT
Obtenga la clave de firma JWT del clúster AWS PCS y guárdela como un archivo local. Sustituya los valores de aws-region, secret-arn y secret version por los valores adecuados para su clúster.
#!/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
Este ejemplo de Python ilustra cómo usar la clave de firma para generar 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)
El script imprimirá un JWT en la pantalla.
abcdefgtjwttoken...