Mengautentikasi dengan Slurm REST API di PCS AWS - AWS PCS

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengautentikasi dengan Slurm REST API di PCS AWS

Slurm REST API di AWS PCS menggunakan otentikasi JSON Web Token (JWT) untuk memastikan akses aman ke sumber daya cluster Anda. AWS PCS menyediakan kunci penandatanganan terkelola yang disimpan di AWS Secrets Manager, yang Anda gunakan untuk menghasilkan token JWT yang berisi klaim identitas pengguna tertentu.

Prasyarat

Sebelum mengautentikasi dengan Slurm REST API, pastikan Anda memiliki:

  • Konfigurasi cluster: Cluster AWS PCS dengan Slurm 25.05+ dan REST API diaktifkan.

  • Izin AWS: Akses ke AWS Secrets Manager untuk kunci penandatanganan JWT.

  • Informasi pengguna: Nama pengguna, ID pengguna POSIX, dan satu atau lebih grup POSIX IDs untuk akun cluster Anda.

  • Akses jaringan: Konektivitas dalam VPC cluster Anda dengan grup keamanan yang memungkinkan port 6820.

Prosedur

Untuk mengambil alamat titik akhir Slurm REST API

Konsol Manajemen AWS
  1. Buka konsol AWS PCS di https://console.aws.amazon.com/pcs/.

  2. Pilih klaster Anda dari daftar.

  3. Dalam detail konfigurasi cluster, cari bagian Endpoints.

  4. Perhatikan alamat IP pribadi dan port untuk Slurm REST API (slurmrestd).

  5. Anda dapat melakukan panggilan API dengan mengirimkan permintaan HTTP yang diformat dengan benar ke alamat ini.

AWS CLI
  1. Kueri status klaster Anda denganaws pcs get-cluster. Cari SLURMRESTD titik akhir di endpoints bidang dalam respons. Inilah contohnya:

    "endpoints": [ { "type": "SLURMCTLD", "privateIpAddress": "192.0.2.1", "port": "6817" }, { "type": "SLURMRESTD", "privateIpAddress": "192.0.2.1", "port": "6820" } ]
  2. Anda dapat melakukan panggilan API dengan mengirimkan permintaan HTTP yang diformat dengan benar http://<privateIpAddress>:<port>/

Untuk mengambil kunci penandatanganan JWT
  1. Buka konsol AWS PCS di https://console.aws.amazon.com/pcs/.

  2. Pilih klaster Anda dari daftar.

  3. Dalam detail konfigurasi cluster, cari bagian Authentication Scheduler.

  4. Perhatikan ARN dan versi kunci JSON Web Token (JWT).

  5. Gunakan tombol AWS CLI untuk mengambil kunci penandatanganan dari Secrets Manager:

    aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:region:account:secret:name --version-id version
Untuk menghasilkan token JWT
  1. Buat JWT dengan klaim wajib berikut:

    • exp— Waktu kedaluwarsa dalam hitungan detik sejak 1970 untuk JWT

    • iat— Waktu saat ini dalam hitungan detik sejak 1970

    • sun— Nama pengguna untuk otentikasi

    • uid— ID pengguna POSIX

    • gid— ID grup POSIX

    • id— Properti identitas POSIX tambahan

      • gecos— Kolom komentar pengguna, sering digunakan untuk menyimpan nama yang dapat dibaca manusia

      • dir— Direktori home pengguna

      • shell— Shell default pengguna

      • gids— Daftar grup POSIX tambahan IDs tempat pengguna berada

  2. Tanda tangani JWT menggunakan kunci penandatanganan yang diambil dari Secrets Manager.

  3. Tetapkan waktu kedaluwarsa yang sesuai untuk token.

catatan

Sebagai alternatif untuk sun klaim, Anda dapat memberikan salah satu dari yang berikut:

  • username

  • Nama bidang khusus yang Anda tentukan melalui userclaimfield di AuthAltParameters Slurm custom settings

  • nameBidang dalam id klaim

Untuk mengautentikasi permintaan API
  1. Sertakan token JWT dalam permintaan HTTP Anda menggunakan salah satu metode berikut:

    • Token pembawa - Tambahkan header Authorization: Bearer <jwt>

    • Slurm header - Tambahkan header X-SLURM-USER-TOKEN: <jwt>

  2. Buat permintaan HTTP ke titik akhir REST API:

    Berikut adalah contoh mengakses /ping API menggunakan curl dan header. Authorized: Bearer

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

Contoh generasi JWT

Ambil kunci penandatanganan JWT cluster AWS PCS dan simpan sebagai file lokal. Ganti nilai untuk aws-region, secret-arn, dan versi rahasia dengan nilai yang sesuai untuk klaster Anda.

#!/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

Contoh Python ini menggambarkan cara menggunakan kunci penandatanganan untuk menghasilkan 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)

Skrip akan mencetak JWT ke layar.

abcdefgtjwttoken...