在创建 SageMaker 功能组时如何解决权限问题?

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

我正在尝试创建 Amazon SageMaker 功能组,但我收到了“AccessDenied”错误。

简短描述

SageMaker“AccessDenied”错误表明 AWS Identity and Access Management(IAM)角色没有足够的权限来执行创建功能组操作。当执行角色权限缺失或配置错误时,您可能会收到“AccessDenied”错误:

  • 缺少 AmazonSageMakerFeatureStoreAccess 策略和 Amazon Simple Storage Service(Amazon S3)存储桶命名要求
  • 缺少 LakeFormation 权限
  • 缺少 AWS Key Management Service(AWS KMS)策略
  • Amazon S3 存储桶策略

解决方法

注意:如果您在运行 AWS 命令行界面(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 执行角色),然后授予所需的权限

有关授予数据库权限的更多信息,请参阅授予与您的账户共享的数据库或表的权限

缺少 AWS KMS 策略

由于缺少 AWS KMS 策略,CreateFeatureGroup API 调用可能会失败。要进行检查,请查看执行角色的 IAM 策略,然后确认其附加了以下策略:

kms:GenerateDataKey
kms:Decrypt
kms: Encrypt

如果运行 CLI 命令后上述策略不可见,请附加策略,然后重试。

S3 存储桶策略

由于 Amazon S3 存储桶策略禁止访问存储桶,也可能会出现“AccessDenied”错误。查看 S3 存储桶策略,然后检查用于创建功能组的执行角色是否具有该存储桶的访问权限。