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 AWS PCS
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 melakukan otentikasi dengan Slurm REST API, pastikan Anda memiliki:
-
Konfigurasi cluster: Cluster AWS PCS dengan Slurm 25.05+ dan REST API diaktifkan.
-
Izin AWS: Akses ke Manajer AWS Rahasia untuk kunci penandatanganan JWT.
-
Informasi pengguna: Nama pengguna, ID pengguna POSIX, dan satu atau beberapa ID grup POSIX untuk akun cluster Anda.
-
Akses jaringan: Konektivitas dalam VPC cluster Anda dengan grup keamanan yang memungkinkan port 6820.
Prosedur
Untuk mengambil alamat titik akhir API Slurm REST
Untuk mengambil kunci penandatanganan JWT
-
Buka konsol AWS PCS di https://console.aws.amazon.com/pcs/
. -
Pilih cluster Anda dari daftar.
-
Di detail konfigurasi cluster, cari bagian Otentikasi Penjadwal.
-
Perhatikan kunci JSON Web Token (JWT) ARN dan versi.
-
Gunakan AWS CLI untuk mengambil kunci penandatanganan dari Secrets Manager:
aws secretsmanager get-secret-value --secret-idarn:aws:secretsmanager:region:account:secret:name--version-idversion
Untuk menghasilkan token JWT
-
Buat JWT dengan klaim yang diperlukan berikut:
-
exp- Waktu kedaluwarsa dalam detik sejak 1970 untuk JWT -
iat- Waktu saat ini dalam detik sejak 1970 -
sun— Nama pengguna untuk otentikasi -
uid— ID pengguna POSIX -
gid— ID grup POSIX -
id— Properti identitas POSIX tambahan-
gecos— Bidang komentar pengguna, sering digunakan untuk menyimpan nama yang dapat dibaca manusia -
dir— Direktori rumah pengguna -
shell— Shell default pengguna -
gids— Daftar ID grup POSIX tambahan tempat pengguna berada
-
-
-
Tanda tangani JWT menggunakan kunci penandatanganan yang diambil dari Secrets Manager.
-
Tetapkan waktu kedaluwarsa yang sesuai untuk token.
catatan
Sebagai alternatif sun klaim, Anda dapat memberikan salah satu dari berikut ini:
-
username -
Nama bidang khusus yang Anda tent
userclaimfieldukan melaluiAuthAltParameters Slurm custom settings -
Bid
nameang dalamidklaim
Untuk mengotentikasi permintaan API
-
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>
-
-
Buat permintaan HTTP ke titik akhir REST API:
Berikut adalah contoh mengakses
/pingAPI menggunakan curl danAuthorized: Bearerheader.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 cluster Anda.
#!/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
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...