Autenticação com a API REST do Slurm no PCS AWS - AWS PCS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Autenticação com a API REST do Slurm no PCS AWS

A API REST do Slurm no AWS PCS usa a autenticação JSON Web Token (JWT) para garantir acesso seguro aos recursos do cluster. AWS O PCS fornece uma chave de assinatura gerenciada armazenada no AWS Secrets Manager, que você usa para gerar tokens JWT contendo declarações de identidade de usuário específicas.

Pré-requisitos

Antes de se autenticar com a API REST do Slurm, certifique-se de ter:

  • Configuração de cluster: cluster AWS PCS com Slurm 25.05+ e API REST habilitada.

  • Permissões da AWS: acesso ao AWS Secrets Manager para a chave de assinatura do JWT.

  • Informações do usuário: nome de usuário, ID de usuário POSIX e um ou mais grupos POSIX IDs para sua conta de cluster.

  • Acesso à rede: conectividade na VPC do seu cluster com o grupo de segurança que permite a porta 6820.

Procedimento

Para recuperar o endereço do endpoint da API Slurm REST

Console de gerenciamento da AWS
  1. Abra o console AWS PCS em https://console.aws.amazon.com/pcs/.

  2. Escolha seu cluster na lista.

  3. Nos detalhes da configuração do cluster, localize a seção Endpoints.

  4. Observe o endereço IP privado e a porta da API REST do Slurm (slurmrestd).

  5. Você pode fazer chamadas de API enviando solicitações HTTP formatadas corretamente para esse endereço.

AWS CLI
  1. Consulte o status do seu cluster comaws pcs get-cluster. Procure o SLURMRESTD endpoint no endpoints campo na resposta. Exemplo:

    "endpoints": [ { "type": "SLURMCTLD", "privateIpAddress": "192.0.2.1", "port": "6817" }, { "type": "SLURMRESTD", "privateIpAddress": "192.0.2.1", "port": "6820" } ]
  2. Você pode fazer chamadas de API enviando solicitações HTTP formatadas corretamente para http://<privateIpAddress>:<port>/

Para recuperar a chave de assinatura do JWT
  1. Abra o console AWS PCS em https://console.aws.amazon.com/pcs/.

  2. Escolha seu cluster na lista.

  3. Nos detalhes da configuração do cluster, localize a seção Autenticação do Agendador.

  4. Observe o ARN e a versão da chave JSON Web Token (JWT).

  5. Use o AWS CLI para recuperar a chave de assinatura do Secrets Manager:

    aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:region:account:secret:name --version-id version
Para gerar um token JWT
  1. Crie um JWT com as seguintes reivindicações obrigatórias:

    • exp— Tempo de expiração em segundos desde 1970 para o JWT

    • iat— Tempo atual em segundos desde 1970

    • sun— O nome de usuário para autenticação

    • uid— O ID de usuário POSIX

    • gid— O ID do grupo POSIX

    • id— Propriedades adicionais de identidade POSIX

      • gecos— Campo de comentário do usuário, geralmente usado para armazenar um nome legível por humanos

      • dir— Diretório inicial do usuário

      • shell— Shell padrão do usuário

      • gids— Lista de grupos POSIX adicionais em IDs que o usuário está

  2. Assine o JWT usando a chave de assinatura recuperada do Secrets Manager.

  3. Defina um prazo de expiração apropriado para o token.

nota

Como alternativa à sun reivindicação, você pode fornecer qualquer um dos seguintes:

  • username

  • Um nome de campo personalizado que você define por userclaimfield meio do AuthAltParameters Slurm custom settings

  • Um name campo dentro da id reivindicação

Para autenticar solicitações de API
  1. Inclua o token JWT em suas solicitações HTTP usando um destes métodos:

    • Token do portador — Adicionar Authorization: Bearer <jwt> cabeçalho

    • Cabeçalho do Slurm — Adicionar cabeçalho X-SLURM-USER-TOKEN: <jwt>

  2. Faça solicitações HTTP para o endpoint da API REST:

    Aqui está um exemplo de como acessar a /ping API usando curl e o Authorized: Bearer cabeçalho.

    curl -X GET -H "Authorization: Bearer <jwt>" \ http://<privateIpAddress>:6820/slurm/v0.0.43/ping

Exemplo de geração de JWT

Obtenha a chave de assinatura JWT do cluster AWS PCS e armazene-a como um arquivo local. Substitua os valores de aws-region, secret-arn e secret version por valores apropriados para seu cluster.

#!/bin/bash SECRET_KEY=$(aws secretsmanager get-secret-value \ --region aws-region \ --secret-id secret-arn \ --version-stage secret-version \ --query 'SecretString' \ --output text) echo "$SECRET_KEY" | base64 --decode > jwt.key

Este exemplo em Python ilustra como usar a chave de assinatura para gerar um 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)

O script imprimirá um JWT na tela.

abcdefgtjwttoken...