翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
PCS での Slurm REST API AWS を使用した認証
AWS PCS の Slurm REST API は、JSON ウェブトークン (JWT) 認証を使用して、クラスターリソースへの安全なアクセスを確保します。 AWS PCS は AWS Secrets Manager に保存されているマネージド署名キーを提供します。これは、特定のユーザー ID クレームを含む JWT トークンを生成するために使用されます。
前提条件
Slurm REST API で認証する前に、以下を確認してください。
-
クラスター設定: Slurm 25.05 以降と REST API が有効になっている AWS PCS クラスター。
-
AWS アクセス許可: JWT 署名キーの AWS Secrets Manager へのアクセス。
-
ユーザー情報: クラスターアカウントのユーザー名、POSIX ユーザー ID、および 1 つ以上の POSIX グループ IDs。
-
ネットワークアクセス: ポート 6820 を許可するセキュリティグループとのクラスターの VPC 内の接続。
手順
Slurm REST API エンドポイントアドレスを取得するには
JWT 署名キーを取得するには
-
https://console.aws.amazon.com/pcs/
で AWS PCS コンソールを開きます。 -
リストからクラスターを選択します。
-
クラスター設定の詳細で、スケジューラ認証セクションを見つけます。
-
JSON ウェブトークン (JWT) キーの ARN とバージョンを書き留めます。
-
を使用して Secrets Manager から署名キー AWS CLI を取得します。
aws secretsmanager get-secret-value --secret-idarn:aws:secretsmanager:region:account:secret:name--version-idversion
JWT トークンを生成するには
-
次の必須クレームを使用して JWT を作成します。
-
exp– JWT の 1970 年以降の有効期限の秒単位 -
iat– 1970 年以降の現在の秒単位の時刻 -
sun– 認証のユーザー名 -
uid– POSIX ユーザー ID -
gid– POSIX グループ ID -
id– 追加の POSIX ID プロパティ-
gecos– ユーザーコメントフィールド。多くの場合、人間が読める名前を保存するために使用されます。 -
dir– ユーザーのホームディレクトリ -
shell– ユーザーのデフォルトシェル -
gids– ユーザーが属する追加の POSIX グループ IDsのリスト
-
-
-
Secrets Manager から取得した署名キーを使用して JWT に署名します。
-
トークンの適切な有効期限を設定します。
注記
sun クレームの代わりに、次のいずれかを指定できます。
-
username -
userclaimfieldの を介して定義するカスタムフィールド名AuthAltParameters Slurm custom settings -
idクレーム内のnameフィールド
API リクエストを認証するには
-
次のいずれかの方法を使用して、JWT トークンを HTTP リクエストに含めます。
-
ベアラートークン –
Authorization: Bearerヘッダーの追加<jwt> -
Slurm ヘッダー –
X-SLURM-USER-TOKEN:ヘッダーの追加<jwt>
-
-
REST API エンドポイントに HTTP リクエストを行います。
curl と
Authorized: Bearerヘッダーを使用して/pingAPI にアクセスする例を次に示します。curl -X GET -H "Authorization: Bearer<jwt>" \ http://<privateIpAddress>:6820/slurm/v0.0.43/ping
JWT 生成の例
PCS AWS クラスター JWT 署名キーを取得し、ローカルファイルとして保存します。aws-region、secret-arn、シークレットバージョンの値を、クラスターに適した値に置き換えます。
#!/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
この Python の例は、署名キーを使用して 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)
スクリプトは JWT を画面に出力します。
abcdefgtjwttoken...