Amazon SageMaker のトレーニングジョブで発生する、Amazon S3 AccessDenied エラーの解決方法を教えてください。

最終更新日: 2020 年 9 月 3 日

AmazonSageMakerFullAccess ポリシーが実行ロールにアタッチされているにもかかわらず、Amazon SageMaker トレーニングジョブが AccessDenied エラーで失敗します。

簡単な説明

AccessDenied エラーの発生は、次に示す Amazon Simple Storage Service (Amazon S3) アクションの内で 1 つ以上を、AWS Identity and Access Management (IAM) ポリシーが許可していないことを示します。

  • s3:ListBucket
  • s3:GetObject
  • s3:PutObject

必要な許可は、呼び出す SageMaker API によって異なります。たとえば、CreateModel API で必要な Amazon S3 アクションは s3:GetObject のみです。一方、CreateTrainingJob API の場合には、s3:GetObject、s3:PutObject、および s3:ListObject が必要になります。各 API で必要な許可の詳細については、「Amazon SageMaker ロール」を参照してください。

解決方法

AccessDenied エラーは、通常、次のシナリオで発生します。

暗号化された入力バケット

S3 バケット内のデータが AWS Key Management Service (AWS KMS) で暗号化されている場合は、以下を確認してください。

  • 実行ロールにアタッチされている IAM ポリシーで、kms: encrypt および kms: decrypt アクションが許可されていること。詳細については「Amazon SageMaker ロール」を参照してください。
  • AWS KMS キーポリシーが IAM ロールへのアクセスを許可していること。詳細については、「Using key policies in AWS KMS」を参照してください。
  • ジョブのリソースにおける設定で、機械学習(ML)ストレージボリュームに KMS キーを指定する場合は、KMS: CreateGrant アクションを IAM ポリシーで許可しておく必要があります。詳細については、「Using grants」を参照してください。機械学習ストレージボリューム暗号化の詳細については、「暗号化を使用して保管時のデータを保護する」を参照してください。

アクセス許可の境界

実行ロールでアクセス許可の境界を定義すると、SageMaker では、IAM ポリシーとアクセス許可の境界で同時に許可されているアクションのみを実行します。必要な Amazon S3 アクションが、IAM ポリシーとアクセス許可の境界において許可されていることを確認します。

バケットポリシー

入力バケットでバケットポリシーを使用する場合には、そのバケットポリシーが実行ロールに対し、必要な Amazon S3 アクションの実行を許可していることを確認します。バケットポリシーの詳細については、「Amazon S3 でのポリシーとアクセス許可」を参照してください。

SageMaker 実行ロールへのアクセスが拒否されるため、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"
            ]
        }
    ]
}

クロスアカウント Amazon S3 アクセス

別の AWS アカウントが Amazon S3 データを所有している場合は、以下を確認してください。

  • 両方のアカウントが、AWS KMS キーにアクセスできること。トレーニングジョブに KMS キーを指定しない場合、SageMaker はデフォルトで Amazon S3 のサーバー側の暗号化キーを使用します。デフォルトの Amazon S3 のサーバー側の暗号化キーを、別の AWS アカウントと共有したり、別の AWS アカウントで使用したりすることはできません。
  • SageMaker 実行ロールの IAM ポリシーと S3 バケットポリシーに、クロスアカウント許可があること。

詳細については、「Amazon SageMaker モデルを別の AWS アカウントにデプロイするにはどうすればよいですか?」を参照してください。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?