[小ネタ] SageMaker HyperPod の実行ロールでおなじみの AmazonSageMakerClusterInstanceRolePolicy は sagemaker- から始まる S3 バケットのみ権限を持っている

[小ネタ] SageMaker HyperPod の実行ロールでおなじみの AmazonSageMakerClusterInstanceRolePolicy は sagemaker- から始まる S3 バケットのみ権限を持っている

SageMaker HyperPod の実行ロールでおなじみの AmazonSageMakerClusterInstanceRolePolicy について触れてみました。
Clock Icon2024.12.16

こんにちは!AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。

みなさんは SageMaker HyperPod 触っていますでしょうか。

今回はタイトルの通り AmazonSageMakerClusterInstanceRolePolicy について触れていきたいと思います。

先日、検証で SageMaker HyperPod クラスター立ち上げていたところ、次のようなエラーに遭遇しました。

Instance i-0c4022df984497be9 failed to provision with the following error: "Execution role provided does not have permissions to access the bucket s3://hyprpd-lustre-hyperpod-lifecycle-XXXXXXXXXXXX/config/. Please ensure that the role has minimum permissions to read the bucket (s3:ListBucket, s3:GetObject)." Note that multiple instances may be impacted.

調査していく中で AmazonSageMakerClusterInstanceRolePolicy の権限が原因であることにたどり着きました。

SageMaker HyperPod の実行ロール

SageMaker HyperPod の実行ロールはインスタンスグループに所属するインスタンスに IAM の権限を付与する仕組みです。主に CloudWatch Logs へのログの記録、S3 からのライフサイクルスクリプトの取得、 SSM での接続用途で利用されます。

ちなみにインスタンスからも、実行ロールがアタッチされていることがわかります。

[cloudshell-user@ip-10-134-21-86 ~]$ aws ssm start-session \
> --target sagemaker-cluster:7tg6o65u86i5_controller-group-i-0feb8f2b463f1793c

Starting session with SessionId: takakuni-fgii8cpoodhhxsisqrhctldbsi
# aws sts get-caller-identity
{
    "UserId": "AROAZCAS4AKS3WJ7DCAXX:SageMaker",
    "Account": "123456789012",
    "Arn": "arn:aws:sts::123456789012:assumed-role/hyprpd-lustre-hyperpod-role/SageMaker"
}
#

ユーザー管理の VPC でホストする場合は、別途権限が必要になったりします。

{
    "Effect": "Allow",
    "Action": [
        "ec2:CreateNetworkInterface",
        "ec2:CreateNetworkInterfacePermission",
        "ec2:DeleteNetworkInterface",
        "ec2:DeleteNetworkInterfacePermission",
        "ec2:DescribeNetworkInterfaces",
        "ec2:DescribeVpcs",
        "ec2:DescribeDhcpOptions",
        "ec2:DescribeSubnets",
        "ec2:DescribeSecurityGroups",
        "ec2:DetachNetworkInterface"
    ],
    "Resource": "*"
}
{
    "Effect": "Allow",
    "Action": "ec2:CreateTags",
    "Resource": [
        "arn:aws:ec2:*:*:network-interface/*"
    ]
}

AmazonSageMakerClusterInstanceRolePolicy

AmazonSageMakerClusterInstanceRolePolicy は AWS から提供される SageMaker HyperPod クラスター用の AWS 管理ポリシーです。

基本的にはこちらを使っていただくと、ポリシー管理の手離れがよく運用できます。

https://docs.aws.amazon.com/ja_jp/aws-managed-policy/latest/reference/AmazonSageMakerClusterInstanceRolePolicy.html

中身を見てみましょう。

なんということでしょう。 S3 バケットの名前が決まっているではありませんか。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "CloudwatchLogStreamPublishPermissions",
			"Effect": "Allow",
			"Action": [
				"logs:PutLogEvents",
				"logs:CreateLogStream",
				"logs:DescribeLogStreams"
			],
			"Resource": [
				"arn:aws:logs:*:*:log-group:/aws/sagemaker/Clusters/*:log-stream:*"
			]
		},
		{
			"Sid": "CloudwatchLogGroupCreationPermissions",
			"Effect": "Allow",
			"Action": ["logs:CreateLogGroup"],
			"Resource": ["arn:aws:logs:*:*:log-group:/aws/sagemaker/Clusters/*"]
		},
		{
			"Sid": "CloudwatchPutMetricDataAccess",
			"Effect": "Allow",
			"Action": ["cloudwatch:PutMetricData"],
			"Resource": ["*"],
			"Condition": {
				"StringEquals": {
					"cloudwatch:namespace": "/aws/sagemaker/Clusters"
				}
			}
		},
		{
			"Sid": "DataRetrievalFromS3BucketPermissions",
			"Effect": "Allow",
			"Action": ["s3:ListBucket", "s3:GetObject"],
			"Resource": ["arn:aws:s3:::sagemaker-*"],
			"Condition": {
				"StringEquals": {
					"aws:ResourceAccount": "${aws:PrincipalAccount}"
				}
			}
		},
		{
			"Sid": "SSMConnectivityPermissions",
			"Effect": "Allow",
			"Action": [
				"ssmmessages:CreateControlChannel",
				"ssmmessages:CreateDataChannel",
				"ssmmessages:OpenControlChannel",
				"ssmmessages:OpenDataChannel"
			],
			"Resource": "*"
		}
	]
}

私の遭遇したエラーだと、ライフサイクルに指定した S3 バケットは hyprpd-lustre から始まっているため、エラーが起きているようです。

S3 バケットの名前を変える or 別途 IAM ポリシーをアタッチして回避しましょう。

まとめ

以上、「SageMaker HyperPod の実行ロールでおなじみの AmazonSageMakerClusterInstanceRolePolicy は sagemaker- から始まる S3 バケットのみ権限を持っている」でした。

SageMaker HyperPod を触っていて、つまりやすいポイントな気がしたのでブログにしてみました。

参考になれば幸いです。

AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.