使用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用户身份,需补充以下步骤:
创建SageMaker执行角色
- 登录AWS IAM控制台,进入「角色」页面,点击「创建角色」
- 选择「SageMaker」作为受信任实体类型,点击「下一步」
- 为角色添加权限:至少包含S3全权限(匹配现有IAM用户的权限范围),以及SageMaker相关权限(如
AmazonSageMakerFullAccess,也可按需缩小权限范围) - 完成角色创建后,记录该角色的ARN(格式类似
arn:aws:iam::123456789:role/SageMakerExecutionRole)
为现有IAM用户添加角色切换权限
- 在IAM控制台找到你的IAM用户「my-name」,进入「权限」标签页
- 添加自定义权限策略,允许该用户切换到刚创建的SageMaker执行角色,示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789:role/SageMakerExecutionRole" } ] }
在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代码即可
- 使用
验证S3 board配置
- 确保
board对象是基于目标S3存储桶创建的,示例代码:board <- vetiver::board_s3(bucket = "ml-bucket-my-name") - 确认临时凭证拥有该存储桶的读写权限
- 确保
内容的提问来源于stack exchange,提问作者TheGoat
相关产品推荐
相关产品推荐

