AWS ParallelCluster で "Unexpected error when getting S3 bucket: Forbidden" が出力される原因と解決方法

AWS ParallelCluster で "Unexpected error when getting S3 bucket: Forbidden" が出力される原因と解決方法

Clock Icon2025.02.09

はじめに

AWS ParallelCluster でクラスターを作成・更新する際に表示される以下のメッセージの原因と解決方法を説明します。

{
  "level": "WARNING",
  "type": "AsyncTimedUrlValidator",
  "message": "Unexpected error when getting S3 bucket '[YOUR_BUCKET_NAME]': 'Forbidden'"
}

原因

このエラーはpclusterコマンドを実行する環境がカスタムブートストラップスクリプトを含む S3 バケットに対して必要な権限(IAM ポリシー)が不足しているときに発生します。

parallelcluster-s3-validataion.png

以下のようなクラスター設定ファイルを例に説明します。コンピュートノードの設定を例にしていますがヘッドノードも同様です。

cluster-config.yaml
Scheduling:
  SlurmQueues:
    - Name: compute
      ComputeSettings:
        LocalStorage:
          RootVolume:
            Size: 35
      Iam:
        S3Access:  # コンピュートノードに付与されるS3バケットのアクセス権限
          - BucketName: [YOUR_BUCKET_NAME]
            EnableWriteAccess: false
      CustomActions:  # カスタムブートストラップスクリプトの設定
        OnNodeConfigured:
          Sequence:
            - Script: s3://[YOUR_BUCKET_NAME]/scripts/install.sh  # ここで指定したS3バケットへのアクセス権限が必要

S3Access セクションでコンピュートノードにはバケットへのアクセス権限が付与されます。pcluster コマンドの実行環境には自動で権限は付与されません。権限不足のままだと「Forbidden」が出るため、事前に必要な権限を設定しておくとエラーを回避できます。

影響度について

実際にブートストラップスクリプトを利用する各ノードに権限が与えられていればクラスター自体の動作に支障はありません。しかし、pclusterコマンドの実行環境でバケット検証時にエラーを避けるためにも権限付与が望ましいです。

S3 バケットへの権限自動付与について

クラスターの作成・更新時に必要となる IAM ポリシーを自動的に作成し、各ノードへ付与するにはあらかじめ IAM 関連の権限を用意しておく必要があります。

AWS_ParallelCluster_の_AWS_Identity_and_Access_Management_アクセス許可_-_AWS_ParallelCluster.png

最新の情報は該当のドキュメントをご参照ください。

以下の記事では IAM 関連の設定を含めた権限の設定方法を紹介しています。

https://dev.classmethod.jp/articles/setup-guide-for-iam-role-in-parallelcluster-3x-ec2-instance/

解決方法

pclusterコマンドを実行する環境に対して、カスタムブートストラップスクリプト用の S3 バケットへのアクセス権限を付与します。

pcluster コマンドを実行する環境用に必要な IAMポリシー 作成

以下の内容で新しい IAM ポリシーを作成します。

PclusterBootstrapPolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::[YOUR_BUCKET_NAME]",
                "arn:aws:s3:::[YOUR_BUCKET_NAME]/*"
            ],
            "Effect": "Allow",
            "Sid": "S3Read"
        }
    ]
}

コンピュートノード向けに自動作成された IAM ポリシーを流用しています。

IAM ロールへ 新規作成の IAM ポリシーをアタッチ

作成したポリシーをpclusterコマンドを実行する環境の IAM ロールにアタッチします。

権限の確認

以下のコマンドでクラスターの作成、更新時に同じワーニングのメッセージが出力されないことを確認します。

# クラスター作成時の例
pcluster create-cluster -n ${CLUSTER_NAME} -c ./config.yaml --dryrun true

# クラスター更新時の例
pcluster update-cluster -n ${CLUSTER_NAME} -c ./config.yaml --dryrun true

まとめ

  • カスタムブートストラップスクリプトを使用する場合、そのスクリプトを格納した S3 バケットへのアクセス権限が必要です
  • pclusterコマンドを実行する環境には手動で権限を付与する必要があります

おわりに

pcluster ベーシックユーザーポリシーの S3 の権限は以下の様になっていました。

  1. parallelcluster-*で始まるバケットにはフルアクセス
  2. aws-parallelcluster-*で始まるバケットにもフルアクセス
  3. *-aws-parallelcluster*で終わるバケットには読み取り専用アクセス
{
    "Action": [
        "s3:*"
    ],
    "Resource": [
        "arn:aws:s3:::parallelcluster-*",
        "arn:aws:s3:::aws-parallelcluster-*"
    ],
    "Effect": "Allow",
    "Sid": "S3ResourcesBucket"
},
{
    "Action": [
        "s3:Get*",
        "s3:List*"
    ],
    "Resource": "arn:aws:s3:::*-aws-parallelcluster*",
    "Effect": "Allow",
    "Sid": "S3ParallelClusterReadOnly"
}

そう考えると、カスタムブートストラップ用の S3 バケットは、1-3 のパターンのどれかの命名規則で作成しておくと追加の権限設定を最小化できます。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.