如何疑難排解建立 SageMaker 功能群組時的許可問題?

上次更新日期︰2022 年 11 月 21 日

我正在嘗試建立 Amazon SageMaker 功能群組,但收到 "AccessDenied" (存取遭拒) 錯誤。

簡短說明

SageMaker "AccessDenied" (存取遭拒) 錯誤表示 AWS Identity and Access Management (IAM) 角色沒有足夠的許可來執行 Create Feature Group (建立功能群組) 操作。當執行角色許可遺失或設定錯誤時,您可能會遇到 "AccessDenied" (存取遭拒) 錯誤:

  • 缺少 AmazonSageMakerFeatureStoreAccess 政策和 Amazon Simple Storage Service (Amazon S3) 儲存貯體命名要求
  • 缺少 LakeFormation 許可
  • 缺少 AWS Key Management Service (KMS) 政策
  • Amazon S3 儲存貯體政策

解決方案

注意:如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本

若要在建立功能群組時檢視詳細的錯誤訊息,請從終端執行以下命令,並檢查 FailureReason (失敗原因):

$ aws sagemaker describe-feature-group --feature-group-name nameofthefeaturegroup

缺少 AmazonSageMakerfeatureStoreAccess 政策和 Amazon S3 儲存貯體命名要求

您正在使用的執行角色可能缺少 Amazon 受管的 AmazonSageMakerFeatureStore 政策。檢閱附加至執行角色的政策。然後,如果缺少 AmazonSageMakerFeatureStoreAccess 政策,請附加該政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetBucketAcl",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "arn:aws:s3:::*SageMaker*",
        "arn:aws:s3:::*Sagemaker*",
        "arn:aws:s3:::*sagemaker*"
      ]
    }
  ]
}

即使在新增 AmazonSageMakerFeatureStoreAccess 後,功能群組的建立也可能會失敗。由於該政策是存放在 S3 儲存貯體中的 Amazon 受管政策,因此儲存貯體的名稱中必須有 "sagemaker" 一詞。

缺少 Lake Formation 許可

功能群組的建立可能會因為 AWS Lake Formation 許可不足而失敗。建立功能群組時,會自動建立 AWS Glue 資料庫。任何使用 SageMaker 建立的功能群組都會建立為此 AWS Glue 資料庫中的資料表。

確認所用的執行角色已獲得建立 AWS Glue 資料庫的許可。如果執行角色沒有許可,請執行以下操作:

注意:AWS Lake Formation 需要授權每個主體 (使用者或角色),才能對 Lake Formation 受管資源執行動作。

  1. 開啟 LakeFormation 主控台
  2. 在左側邊欄中,選擇 Permissions (許可),然後選擇 Data Permissions (資料許可)
  3. 選擇 Grant (授與)
  4. principals (主體) 下拉式功能表中選擇 IAM execution role (IAM 執行角色),然後授與所需許可

如需有關授與資料庫許可的詳細資訊,請參閱 Granting permissions on a database or table shared with your account (授與您帳戶共用的資料庫或資料表的許可)。

缺少 AWS KMS 政策

由於缺少 AWS KMS 政策,CreateFeatureGroup API 呼叫可能會失敗。若要檢查,請檢閱執行角色的 IAM policies (IAM 政策),然後確認其附加了下列政策:

kms:GenerateDataKey
kms:Decrypt
kms: Encrypt

如果執行 CLI 命令後看不到上述政策,請附加這些政策,然後重試。

S3 儲存貯體政策

由於 Amazon S3 儲存貯體政策阻止存取儲存貯體,因此也可能發生 "AccessDenied" (存取遭拒) 錯誤。檢閱 S3 儲存貯體政策,然後檢查用於建立功能群組的執行角色是否具有儲存貯體的存取權。