
AWS ParallelCluster でもSSH接続はやめて、セッションマネージャーで接続できます
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS ParallelClusterはクラウドHPC環境を簡単に構築できるツールです。
AWS ParallelClusterで作成したクラスター環境にもAWS Systems Manager セッションマネージャーを利用できます。 ヘッドノード、コンピュートノードへのSSH接続を廃止し、よりセキュアなクラスター環境を構築してみましょう。
プライベートサブネットにクラスター環境構築する場合に特にオススメです。ログインノードにあたる踏み台サーバをなくせます。
結論
additional_iam_policies
の設定で必要なIAMポリシーを追加- SSM-Agentはデフォルトでインストール済み & サービス自動起動済み
- ParallelClusterのバージョンと、OSに依る部分なので都度確認した方がよい
- 自動生成されるIAMロールはヘッドノードと、コンピュートノードで共通
検証環境
項目 | 値 |
---|---|
ParallelCluster | 2.10.3 |
OS | Ubuntu 18.04 LTS |
AMI | aws-parallelcluster-2.10.3-ubuntu-1804-lts-hvm-x86_64-202103172101 |
Architecture | Intel |
HeadNode | t3.micro |
ComputeNode | c5.large |
セッションマネージャーの設定
ロギングの設定はしていません。
ParallelClusterの設定ファイル
additional_iam_policies
にセッションマネージャーで必要なIAMポリシー(AmazonSSMManagedInstanceCore)を指定します。
# v2.10.3
[aws]
aws_region_name = us-east-1
[aliases]
ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS}
[global]
cluster_template = default
update_check = true
sanity_check = true
[cluster default]
key_name = sandbox-key-useast1
scheduler = slurm
# --- HeadNode Setting ---
base_os = ubuntu1804
master_instance_type = t3.micro
master_root_volume_size = 30
# --- Netowrk Setting ---
vpc_settings = default
# --- Compute Setting ---
queue_settings = spot1
# --- IAM Policy---
additional_iam_policies = arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
# --- Tag ---
tags = { "Name" : "Blog-Sample-ClusterSSM" }
[vpc default]
vpc_id = vpc-07edfc27679c9ca80
master_subnet_id = subnet-0ab2754446b2f87a4
compute_subnet_id = subnet-0ab2754446b2f87a4
use_public_ips = true # 検証用設定: パブリックサブネットで起動しているため
[queue spot1]
compute_resource_settings = spot1_resource
placement_group = DYNAMIC
compute_type = spot
[compute_resource spot1_resource]
instance_type = c5.large
max_count = 16
クラスターを作成しました。
> pcluster create ssm-cluster -c ssm
Beginning cluster creation for cluster: ssm-cluster
Creating stack named: parallelcluster-ssm-cluster
Status: parallelcluster-ssm-cluster - CREATE_COMPLETE
MasterPublicIP: 99.99.99.99
ClusterUser: ubuntu
MasterPrivateIP: 10.1.11.224
ヘッドノードのIAMロールを確認します。
自動生成されたIAMロールに設定ファイル内で指定したAmazonSSMManagedInstanceCore
ポリシーが追加されています。
ヘッドノード接続テスト
セッションマネージャーで接続してみます。
WEBブラウザからヘッドノードへログインできました。 キャプチャは文字が読みづらいため以降はテキストで説明します。
SSM-Agentはインストール済みでサービスは自動起動していました。そのため、IAMポリシー追加するだけでセッションマネージャーから接続できたわけです。
$ sudo systemctl status snap.amazon-ssm-agent.amazon-ssm-agent.service
● snap.amazon-ssm-agent.amazon-ssm-agent.service - Service for snap application amazon-ssm-agent.amazon-ssm-agent
Loaded: loaded (/etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-04-15 01:05:59 UTC; 6min ago
Main PID: 883 (amazon-ssm-agen)
Tasks: 34 (limit: 1099)
CGroup: /system.slice/snap.amazon-ssm-agent.amazon-ssm-agent.service
├─ 883 /snap/amazon-ssm-agent/3552/amazon-ssm-agent
├─1147 /snap/amazon-ssm-agent/3552/ssm-agent-worker
├─1379 /snap/amazon-ssm-agent/3552/ssm-session-worker cm-ohmura.yasutaka-0c3bbbcb3143aab9b i-040aae658db141912
├─1398 sh
└─1636 sudo su - ubuntu
--- 省略 ---
Ubuntuなので当初はPostinstall処理でSSM-Agentをインストールして起動させないといけないのかと思っていました。ひと手間省けてよかったです。
コンピュートノード接続テスト
まずテストジョブを投げてコンピュートノードを起動させます。
テストジョブの内容はSSM-Agentの状態を出力するだけです。
! /bin/bash
sudo systemctl status snap.amazon-ssm-agent.amazon-ssm-agent.service
テストジョブを投げました。
$ sbatch -n1 test.sh
Submitted batch job 2
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
spot1* up infinite 1 mix# spot1-dy-c5large-1
spot1* up infinite 15 idle~ spot1-dy-c5large-[2-16]
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
2 spot1 test.sh ubuntu CF 0:09 1 spot1-dy-c5large-1
コンピュートノードの起動を待ちます。
しばらくするとキューからジョブがなくなっています。
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
ヘッドノードに保存されたコンピュートノードの実行結果を確認します。コンピュートノードでもSSM-Agentが起動していることがわかりました。
● snap.amazon-ssm-agent.amazon-ssm-agent.service - Service for snap application amazon-ssm-agent.amazon-ssm-agent
Loaded: loaded (/etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-04-15 01:30:28 UTC; 2min 3s ago
Main PID: 1082 (amazon-ssm-agen)
Tasks: 20 (limit: 4391)
CGroup: /system.slice/snap.amazon-ssm-agent.amazon-ssm-agent.service
├─1082 /snap/amazon-ssm-agent/3552/amazon-ssm-agent
└─1471 /snap/amazon-ssm-agent/3552/ssm-agent-worker
--- 省略 ---
コンピュートノードにもセッションマネージャーで接続ができました。接続先がコンピュートノードなのか分かりにくいのですがホスト名から識別できます。
ParallelClusterで自動生成のIAMロールについて
pcluster create
で作成したクラスター環境には自動生成のIAMロールがヘッドノードと、コンピュートノードに割り当てられます。IAMロールはヘッドノードと、コンピュートノードで共通です。
ヘッドノードのIAMロールと、コンピュートノードのIAMロールで異なるIAMロールを設定することはできません。
セッションマネージャー設定Tips
セッションマネージャーでSSH・SCPを使いたい
ローカル端末とヘッドノード間でファイルを転送したいことはよくあります。WEBブラウザからのログインだとファイル転送ができません。
セッションマネージャーのトンネル内でSSHやSCPコマンドを使うこともできます。設定すればSCPコマンドでヘッドノードにファイル転送ができます。
下記ブログを参考にしてください。
セッションマネージャーのエンドポイント
会社からだとセッションマネージャーで接続できない。
オンプレにHPC環境をお持ちの企業様は研究開発などを行っており、セキュリティに厳しいケースが多く見られます。プロキシサーバなどで社内セットワークからインターネットへ制限がある環境でしたら社内ネットワークも疑ってみてください。
ちなみに東京リージョンでのセッションマネージャーのエンドポイントは下記になります。プロキシサーバなどインターネットの出口を制限していないかご確認ください。
# HTTPSアクセスの許可が必要
ssm.ap-northeast-1.amazonaws.com
まとめ
additional_iam_policies
に必要なIAMポリシーを追記すると、自動生成されるIAMロールに追加したIAMポリシーが追加される。
IAMロールはヘッドノードと、コンピュートノードで共通であり、別々のIAMロールを設定することはできない。
おわりに
セッションマネージャーを使うとSSH接続を許可したセキュリティグループの設定が不要になります。不要にはなるのですが...クラスター作成時にデフォルトで作成されるセキュリティグループは以下のように全世界からSSH接続を許可した状態です。
パブリックサブネットにクラスター環境を作成する場合は、デフォルトのSSH接続許可を削除してセッションマネージャーのアクセスに寄せられないかご検討ください。