AWS ParallelCluster pclusterコマンドv2.8からv2.9で必要になったIAMポリシー

2020.10.30

AWS Parallelcluster v2.9以降のIAMポリシー

pclusterコマンドを打つインスタンスのIAMポリシーの権限について

  • Parallelcluster v2.9のpcluster createで必要な権限が以前より増えた
  • v2.8以前のpclusterコマンドを使っていた環境では権限不足になるかもしれない
  • v2.9利用時はIAMポリシー・ロールの見直した方がよい

結論

ドキュメントを参照してIAMポリシーを作成/更新すれば解決。

AWS Identity and Access Management roles in AWS ParallelCluster - AWS ParallelCluster

エラー内容と対応

ParallelCluster v2.8.1を管理していた環境にv2.9.1をインストールし、v2.9.1のクラスターを作成しようとしたら下記のエラーにより作成失敗。

> pcluster create v29-cluster -c v29-config
Beginning cluster creation for cluster: v29-cluster
Unable to create S3 bucket parallelcluster-5feqs80j6yrf04db.
Access Denied

疑問:S3バケットを作成できないと言われましてもクラスター作成時にS3バケットなんて作成されてたっけ?

調査

S3バケットはv2.9のクラスター作成時から新規作成されるようなっていた。

Why S3 needed? · Issue #2077 · aws/aws-parallelcluster

現状のIAMロールはv2.8作成の要件を満たすIAMポリシーのためS3バケットを作成する権限がなさそう。 IAMポリシー足りないというIssueが上がっており、すでにドキュメントは更新されていました。

Problems with ParallelClusterUserPolicy in 2.9.1 · Issue #2060 · aws/aws-parallelcluster

S3部分の差分を確認したところv2.8時点でのIAMポリシーではこの部分はありませんでした。 それ以外にも変更があったので素直にIAMポリシー作り直したほうが早いことがわかりました。

        {
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::parallelcluster-*"
            ],
            "Effect": "Allow",
            "Sid": "S3ResourcesBucket"
        },

対応

最新のParallelClusterUserPolicy using SGE, Slurm, or Torqueを項を参考にIAMポリシーを作成。 IAMロールにポリシーをアタッチしてEC2のロールを更新

AWS Identity and Access Management roles in AWS ParallelCluster - AWS ParallelCluster

結果

IAMポリシー修正後、v2.9.1のクラスター作成に成功。

> pcluster create v29-cluster -c v29-config
Beginning cluster creation for cluster: v29-cluster
Creating stack named: parallelcluster-v29-cluster
Status: parallelcluster-v29-cluster - CREATE_COMPLETE
MasterPublicIP: 18.178.190.186
ClusterUser: ec2-user
MasterPrivateIP: 10.1.10.21

番外編

v2.9からクラスター作成時にS3バケットを作成することはわかりましたが、なにが保存されているのでしょうか。

S3バケット確認

バケットに保存されているファイルをローカルにコピーして確認してみます。

> aws s3 ls |grep parallel
2020-10-30 13:20:14 parallelcluster-hp04923j8wna0kaq

> aws s3 ls parallelcluster-hp04923j8wna0kaq
                           PRE configs/
                           PRE custom_resources_code/
                           PRE templates/

> aws s3 cp s3://parallelcluster-hp04923j8wna0kaq ./ --recursive

configsディレクトリ

コンピューノードの設定値が保存されていました。

> cat cluster-config.json
{"cluster": {"label": "default", "scaling": {"label": "default", "scaledown_idletime": 10}, "default_queue": "compute", "queue_settings": {"compute": {"compute_type": "spot", "enable_efa": false, "disable_hyperthreading": false, "placement_group": "DYNAMIC", "compute_resource_settings": {"default": {"instance_type": "c6g.xlarge", "min_count": 0, "max_count": 4, "initial_count": 0, "spot_price": 0, "vcpus": 4, "gpus": 0, "enable_efa": false, "disable_hyperthreading": false, "disable_hyperthreading_via_cpu_options": false}}}}, "disable_cluster_dns": false}}⏎

custom_resources_codeディレクトリ

artifacts.zipが保存されていたので展開してみます。

> ll
total 64
-rw-r--r--  1 ohmura.yasutaka  staff    31K 10 30 13:20 artifacts.zip

Python製のメンテツールっぽい名前のスクリプトがでてきました。

> unzip artifacts.zip -d tmp

> ll tmp
total 48
-rw-rw-r--  1 ohmura.yasutaka  staff   554B  9 15 13:55 __init__.py
drwxr-xr-x  7 ohmura.yasutaka  staff   224B 10 30 14:15 __pycache__/
-rw-rw-r--  1 ohmura.yasutaka  staff   6.8K  9 15 13:55 cleanup_resources.py
drwxr-xr-x  9 ohmura.yasutaka  staff   288B 10 30 14:15 crhelper/
-rw-rw-r--  1 ohmura.yasutaka  staff   3.3K  9 15 13:55 manage_docker_images.py
-rw-rw-r--  1 ohmura.yasutaka  staff   2.3K  9 15 13:55 send_build_notification.py
-rw-rw-r--  1 ohmura.yasutaka  staff   1.8K  9 15 13:55 wait_for_update.py

どこで使われているのか調べたところpclusterコマンドをインストールしたクラスター管理のサーバ内に展開されたファイルがありました。

# ll /home/ec2-user/pcluster291/lib/python3.7/site-packages/pcluster/resources/custom_resources/custom_resources_code
total 24
-rw-rw-r-- 1 ec2-user ec2-user 6983 Sep 15 13:55 cleanup_resources.py
drwxrwxr-x 3 ec2-user ec2-user  136 Oct 10 10:19 crhelper
-rw-rw-r-- 1 ec2-user ec2-user  554 Sep 15 13:55 __init__.py
-rw-rw-r-- 1 ec2-user ec2-user 3368 Sep 15 13:55 manage_docker_images.py
drwxrwxr-x 2 ec2-user ec2-user  204 Oct 10 10:19 __pycache__
-rw-rw-r-- 1 ec2-user ec2-user 2382 Sep 15 13:55 send_build_notification.py
-rw-rw-r-- 1 ec2-user ec2-user 1893 Sep 15 13:55 wait_for_update.py

templatesディレクトリ

コンピュートノード作成用のCloudformationのファイルが保存されていました。

> cat compute-fleet-hit-substack.rendered.cfn.yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  ComputeSubnetId:
    Type: String
  RootDevice:
    Type: String
  RootVolumeSize:
    Type: Number
    --- 省略 ---

おわりに

既存のParallelClusterを管理している環境でv2.9を新たに使う場合はIAMポリシー・ロールの確認忘れずに!

以上、コンサル部の大村@網走でした