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.
Autenticar con la API REST de Slurm en AWS PC
La API REST de Slurm de AWS PCS utiliza la autenticación JSON Web Token (JWT) para garantizar un acceso seguro a los recursos del clúster. AWS PCS proporciona una clave de firma gestionada que se almacena en AWS Secrets Manager, que se utiliza para generar tokens JWT que contienen declaraciones de identidad de usuario específicas.
Requisitos previos
Antes de autenticarte con la API REST de Slurm, asegúrate de tener:
-
Configuración del clúster: clúster 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 POSIX y uno o más ID de grupo POSIX 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, localice la sección Autenticación del planificador.
-
Anota el ARN y la versión de la clave del token web JSON (JWT).
-
AWS CLI Utilízala 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
-
Crea 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 ID de usuario POSIX -
gid— El ID del grupo POSIX -
id— Propiedades de identidad POSIX adicionales-
gecos— Campo de comentarios de usuario, que a menudo se usa para almacenar un nombre legible para humanos -
dir— Directorio principal del usuario -
shell— Consola predeterminada del usuario -
gids— Lista de los ID de grupo POSIX adicionales en los que se encuentra el usuario
-
-
-
Firma el JWT con la clave de firma recuperada de Secrets Manager.
-
Establece 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 definas 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 un encabezado
Authorization: Bearer<jwt> -
Encabezado de Slurm — Agregar encabezado
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
En este ejemplo de Python, se muestra cómo usar la clave de firma para generar un token de 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...