如何共享关联AWS SageMaker的JupyterLab项目?
可行性结论
这个需求完全可以实现,不需要强制迁移到SageMaker Studio,你当前用的经典SageMaker Notebook实例(JupyterLab环境)原生支持多用户共享访问,所有计算、存储资源都归属你的账号,同事不需要单独申请AWS资源配额就能编辑、运行代码。
具体操作步骤
- 第一步:配置IAM访问权限
先给需要访问的同事分配对应IAM身份的最小权限,不需要给EC2、S3等底层服务的操作权限:- 可以是你账号下创建的IAM用户,也可以是通过IAM Identity Center接入的企业身份
- 附加的权限只需要包含两部分:SageMaker控制台查看该实例的权限、
sagemaker:CreatePresignedNotebookInstanceUrl(生成实例访问链接)的权限,资源范围直接限定到你要共享的那台实例即可,避免越权访问其他资源 - 不要给同事分配实例启停、修改、删除的权限,除非你需要让他们参与实例运维;Notebook运行时默认使用你创建实例时绑定的执行角色权限,所有API调用、资源调度都走这个角色,不会触发同事身份的权限校验。
- 第二步:配置实例多用户工作区隔离
经典Notebook实例默认所有登录用户共用/home/ec2-user/SageMaker目录,很容易出现文件互相覆盖的问题,加个生命周期配置就能给每个用户分配独立工作目录:- 先停止目标Notebook实例,等状态变为「已停止」
- 新建一个生命周期配置,绑定到实例的启动脚本,脚本内容参考如下:
#!/bin/bash set -e # 提取当前登录用户的IAM身份标识 CURRENT_USER=$(echo "$REMOTE_USER" | cut -d'/' -f2) USER_WORKSPACE="/home/ec2-user/SageMaker/workspaces/$CURRENT_USER" # 首次登录用户自动创建独立工作目录 if [ ! -d "$USER_WORKSPACE" ]; then mkdir -p "$USER_WORKSPACE" chown ec2-user:ec2-user "$USER_WORKSPACE" # 把你提前放在/shared目录下的公共代码、数据集软链接到用户工作区,用户可以直接读取,修改的话会存在自己的目录里不影响公共文件 ln -s /home/ec2-user/SageMaker/shared/* "$USER_WORKSPACE/" 2>/dev/null || true fi # 配置JupyterLab默认打开用户自己的工作目录 echo "c.ServerApp.root_dir = '$USER_WORKSPACE'" >> /home/ec2-user/.jupyter/jupyter_notebook_config.py - 保存配置后重新启动实例,你自己的原有文件可以提前移动到
shared目录下,所有登录用户都能看到。
- 第三步:开放访问入口
配置完成后同事有两种访问方式:- 长期访问:同事登录对应IAM身份后,进入SageMaker控制台找到共享的实例,点击「打开JupyterLab」即可直接进入环境
- 临时访问:你可以直接调用接口生成最长有效期12小时的预签名访问链接发给同事,对方不需要登录控制台,点链接就能直接进入环境,适合临时协作用户。
注意事项
- 所有登录用户共用这台Notebook实例的CPU、内存、GPU资源,如果多人同时跑大负载任务会出现资源抢占,你可以根据使用人数升级实例规格,也可以在Jupyter里配置单用户资源配额,限制每个用户的资源使用上限。
- 所有在实例上触发的操作,包括调用S3存储、启动训练任务、部署推理服务等,产生的费用全部计入你的账号,可以通过CloudTrail日志对应到每个登录的IAM身份,做操作审计。
- 如果需要做代码版本协同,直接在实例里预装Git,对接你常用的代码仓库即可,用户在自己的工作区提交代码走正常PR流程就行,不要直接开放公共目录的写权限。
内容的提问来源于stack exchange,提问作者Otherness
相关产品推荐
相关产品推荐

