我的 Amazon SageMaker 訓練任務失敗,並出現 AccessDenied 錯誤,即使 AmazonSageMakerFullAccess 政策連接至執行角色也是如此。
簡短描述
AccessDenied 錯誤表示您的 AWS Identity and Access Management (IAM) 政策不允許執行下列一或多個 Amazon Simple Storage Service (Amazon S3) 動作:
- s3:ListBucket
- s3:GetObject
- s3:PutObject
您需要的許可取決於您呼叫的 SageMaker API。例如,CreateModel API 所需的唯一 Amazon S3 動作是 s3:GetObject。但是,CreateTrainingJob API 需要 s3:GetObject、s3:PutObject 及 s3:ListObject。如需有關每個 API 所需許可的詳細資訊,請參閱 SageMaker 角色。
解決方法
AccessDenied 錯誤通常發生在下列情況。
加密的輸入儲存貯體
如果 S3 儲存貯體中的資料已使用 AWS Key Management Service (KMS) 加密,請執行以下操作:
- 確保連接至執行角色的 IAM 政策允許 kms:encrypt 和 kms:decrypt 動作。如需詳細資訊,請參閱 SageMaker 角色。
- 確保 AWS KMS key 政策授予對 IAM 角色的存取權。如需詳細資訊,請參閱在 AWS KMS 中使用金鑰政策。
- 如果在任務的資源組態中將 AWS KMS key 用於機器學習 (ML) 儲存磁碟區,則 IAM 政策必須允許 kms:CreateGrant 動作。如需詳細資訊,請參閱使用授權。如需有關加密 ML 儲存磁碟區的詳細資訊,請參閱使用加密保護靜態資料。
- 當使用 Python SDK 實作 estimator.EstimatorBase 類別的抽取時,您必須透過 kwargs 關鍵字引數傳遞 output_kms_key 和 volume_kms_key 參數。無論在繼承類別的記錄顯示狀態如何,都必須完成此操作。如需詳細資訊,請參閱估算器。
許可界限
如果您為執行角色定義許可界限,則 SageMaker 只能執行 IAM 政策和許可界限允許的動作。請確保 IAM 政策和許可界限允許所需的 Amazon S3 動作。
儲存貯體政策
如果輸入儲存貯體使用儲存貯體政策,請確保儲存貯體政策允許執行角色執行所需的 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 key。如果您未為訓練任務指定 AWS KMS key,則 SageMaker 會預設為 Amazon S3 伺服器端加密金鑰。預設 Amazon S3 伺服器端加密金鑰無法與其他 AWS 帳戶共用或使用。
- 確保 SageMaker 執行角色的 IAM 政策和 S3 儲存貯體政策具有跨帳戶許可。
如需詳細資訊,請參閱如何將 Amazon SageMaker 模型部署至不同的 AWS 帳戶?
相關資訊
如何對 Amazon S3 的「403 存取遭拒」錯誤進行疑難排解?