実行ロールに AmazonSageMakerFullAccess ポリシーをアタッチしましたが、Amazon SageMaker AI トレーニングジョブが失敗し、AccessDenied エラーが発生するため、この問題をトラブルシューティングしたいです。
簡単な説明
AWS Identity and Access Management (IAM) ポリシーで次の Amazon Simple Storage Service (Amazon S3) アクションを許可していない場合、AccessDenied エラーが発生することがあります、。
- s3:ListBucket
- s3:GetObject
- s3:PutObject
SageMaker AI API コールにより、必要なアクセス許可が異なります。たとえば、CreateModel API では s3:GetObject のみが必要ですが、CreateTrainingJob API には s3:GetObject、s3:PutObject、s3:ListObject が必要です。
解決策
AccessDenied エラーを解決するには、シナリオに応じて次の手順を実行します。
暗号化された入力バケット
AWS Key Management Service (AWS KMS) を使用して S3 バケットのデータを暗号化した場合は、アクセス許可を確認します。実行ロールにアタッチされている IAM ポリシーでは、kms:encrypt アクションと kms:decrypt アクションを許可する必要があります。AWS KMS キーポリシーが実行ロールにアクセスを付与していることを確認します。
ジョブのリソース設定で、機械学習 (ML) ストレージボリュームに AWS KMS キーを使用できます。AWS KMS キーを使用する場合、IAM ポリシーでは kms:CreateGrant アクションを許可する必要があります。詳細については、「AWS KMS の権限付与」を参照してください。
注: ML ストレージボリュームを暗号化することをおすすめします。
Python SDK を使用して estimator.EstimatorBase クラスの抽象化を実装する際は、パラメータ output_kms_key および volume_kms_key を、kwargs キーワード引数経由で渡します。このアクションは、継承側のクラスに output_kms_key および volume_kms_key が存在するかどうかに関係なく実行してください。詳細については、Amazon SageMaker Python SDK のウェブサイトで「エスティメーター」を参照してください。
権限境界
実行ロールで権限境界を定義すると、SageMaker AI は IAM ポリシーと権限境界の両方で許可されているアクションのみを実行します。IAM ポリシーと権限境界で、必要な Amazon S3 アクションが許可されていることを確認します。
バケットポリシー
入力バケットがバケットポリシーを使用する場合、そのバケットポリシーは実行ロールに必要な Amazon S3 アクションの実行を許可する必要があります。
SageMaker AI 実行ロールへのアクセスを拒否しているため、AccessDenied エラーが発生するバケットポリシーの例を次に示します。
{
"Version": "2012-10-17",
"Id": "ExamplePolicy01",
"Statement": [
{
"Sid": "ExampleStatement01",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::Account-ID:role/SageMakerExecutionRole"
},
"Action": [
"s3:GetObject",
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::awsdoc-example-bucket/*",
"arn:aws:s3:::awsdoc-example-bucket"
]
}
]
}
注: 実行ロールへのアクセスを許可するには、Effect の値を Deny から Allow に置き換えます。
AWS アカウント間のアクセス
別の AWS アカウントが Amazon S3 データを所有している場合は、両方のアカウントが AWS KMS キーにアクセスできることを確認します。トレーニングジョブに AWS KMS キーを指定しない場合、SageMaker AI はデフォルトである Amazon S3 サーバー側の暗号化キーを使用します。他のアカウントは、デフォルトの Amazon S3 サーバー側暗号化キーを共有したり使用したりできません。
SageMaker AI 実行ロールの IAM ポリシーと S3 バケットポリシーに、アカウント間のアクセス許可があることを確認してください。
詳細については、「Amazon SageMaker AI モデルを別の AWS アカウントにデプロイする方法を教えてください」を参照してください。
関連情報
Amazon S3 が返す 403 Access Denied エラーのトラブルシューティング方法を教えてください
SageMaker 実行ロールの使用方法