You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R与Vetiver在AWS SageMaker部署ML模型遇权限错误

问题

基于palmer penguins数据集开发R语言模型,参考Julia Silge的博客流程,当前在AWS SageMaker上为Vetiver模型生成并构建Docker镜像时,运行以下代码:

new_image_uri <- 
  vetiver_sm_build(
  bucket = "ml-bucket-my-name",
  name = "penguin_model",
  board = board
)

出现错误:

* Lockfile written to 'vetiver_renv.lock'.
WARN [2023-08-09 23:19:06.410]: Couldn't call 'get_role' to get Role ARN from role name my-name to get Role path.
Error: The current AWS identity is not a role: arn:aws:iam::123456789:user/my-name, therefore it cannot be used as a SageMaker execution role

此前参考DJ Navarro的博客搭建AWS环境,已创建具备S3全权限的IAM用户,询问还需哪些步骤才能将模型固定到S3存储桶的board中。

解决方案

核心问题是Vetiver在SageMaker上构建镜像时要求使用SageMaker专属执行角色,而非普通IAM用户身份,需补充以下步骤:

  1. 创建SageMaker执行角色

    • 登录AWS IAM控制台,进入「角色」页面,点击「创建角色」
    • 选择「SageMaker」作为受信任实体类型,点击「下一步」
    • 为角色添加权限:至少包含S3全权限(匹配现有IAM用户的权限范围),以及SageMaker相关权限(如AmazonSageMakerFullAccess,也可按需缩小权限范围)
    • 完成角色创建后,记录该角色的ARN(格式类似arn:aws:iam::123456789:role/SageMakerExecutionRole)
  2. 为现有IAM用户添加角色切换权限

    • 在IAM控制台找到你的IAM用户「my-name」,进入「权限」标签页
    • 添加自定义权限策略,允许该用户切换到刚创建的SageMaker执行角色,示例策略如下:
      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole",
                  "Resource": "arn:aws:iam::123456789:role/SageMakerExecutionRole"
              }
          ]
      }
      
  3. 在R环境中切换到SageMaker执行角色

    • 使用paws包调用角色切换,生成临时凭证并配置环境变量:
      library(paws)
      sts <- sts()
      role_creds <- sts$assume_role(
          RoleArn = "arn:aws:iam::123456789:role/SageMakerExecutionRole",
          RoleSessionName = "sagemaker-session"
      )
      Sys.setenv(
          AWS_ACCESS_KEY_ID = role_creds$Credentials$AccessKeyId,
          AWS_SECRET_ACCESS_KEY = role_creds$Credentials$SecretAccessKey,
          AWS_SESSION_TOKEN = role_creds$Credentials$SessionToken
      )
      
    • 重新运行vetiver_sm_build代码即可
  4. 验证S3 board配置

    • 确保board对象是基于目标S3存储桶创建的,示例代码:
      board <- vetiver::board_s3(bucket = "ml-bucket-my-name")
      
    • 确认临时凭证拥有该存储桶的读写权限

内容的提问来源于stack exchange,提问作者TheGoat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:15:13