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
Para recuperar a chave de assinatura do JWT
-
Abra o console AWS PCS em https://console.aws.amazon.com/pcs/
. -
Escolha seu cluster na lista.
-
Nos detalhes da configuração do cluster, localize a seção Autenticação do Agendador.
-
Observe o ARN e a versão da chave JSON Web Token (JWT).
-
Use o AWS CLI para recuperar a chave de assinatura do Secrets Manager:
aws secretsmanager get-secret-value --secret-idarn:aws:secretsmanager:region:account:secret:name--version-idversion
Para gerar um token JWT
-
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á
-
-
-
Assine o JWT usando a chave de assinatura recuperada do Secrets Manager.
-
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
userclaimfieldmeio doAuthAltParameters Slurm custom settings -
Um
namecampo dentro daidreivindicação
Para autenticar solicitações de API
-
Inclua o token JWT em suas solicitações HTTP usando um destes métodos:
-
Token do portador — Adicionar
Authorization: Bearercabeçalho<jwt> -
Cabeçalho do Slurm — Adicionar cabeçalho
X-SLURM-USER-TOKEN:<jwt>
-
-
Faça solicitações HTTP para o endpoint da API REST:
Aqui está um exemplo de como acessar a
/pingAPI usando curl e oAuthorized: Bearercabeç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 \ --regionaws-region\ --secret-idsecret-arn\ --version-stagesecret-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...