如何在AWS SageMaker Studio JupyterLab(4.x版本)中阻止文件下载
阻止AWS SageMaker Studio JupyterLab 4.x下载指定文件类型的方案
1. 强制绑定生命周期配置,禁用“无脚本”启动选项
用户能跳过生命周期配置是因为可以选择“无脚本”启动会话,通过IAM策略限制该行为,强制用户必须使用指定的生命周期配置:
创建IAM策略,拒绝用户在调用CreateApp API时不指定生命周期配置:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "sagemaker:CreateApp", "Resource": "arn:aws:sagemaker:REGION:ACCOUNT_ID:user-profile/*/app/*", "Condition": { "Null": { "sagemaker:LifecycleConfigName": "true" } } } ] }
将该策略附加到相关的IAM角色/用户,这样用户启动JupyterLab会话时必须选择指定的生命周期配置,无法跳过。
2. 通过生命周期配置修改JupyterLab行为,拦截下载
在强制启用的生命周期配置中,添加启动脚本修改JupyterLab的设置,阻止特定文件类型的下载:
方案A:添加服务器中间件拦截下载请求
创建on-start.sh脚本,在Jupyter服务器中注入中间件,拦截.csv、.ipynb文件的下载请求:
#!/bin/bash set -e # 创建自定义服务器扩展文件 cat > /home/sagemaker-user/.jupyter/block_download.py << EOF from notebook.base.handlers import IPythonHandler import tornado.web import re class BlockDownloadHandler(IPythonHandler): def prepare(self): # 匹配请求路径中的文件后缀 file_pattern = re.compile(r'\.(csv|ipynb)$', re.IGNORECASE) if file_pattern.search(self.request.path): raise tornado.web.HTTPError(403, "Download of CSV/IPYNB files is prohibited") def _jupyter_server_extension_points(): return [{ 'module': 'block_download', 'handler': BlockDownloadHandler, 'url': '/files/(.*)', }] def load_jupyter_server_extension(nbapp): nbapp.log.info("BlockDownload extension loaded successfully") EOF # 修改Jupyter配置文件加载扩展 echo "c.ServerApp.extra_extensions = ['block_download']" >> /home/sagemaker-user/.jupyter/jupyter_server_config.py # 确保权限正确 chown -R sagemaker-user:sagemaker-user /home/sagemaker-user/.jupyter
方案B:修改JupyterLab UI隐藏下载选项
如果需要从UI层面禁用下载按钮,可在生命周期脚本中修改JupyterLab的配置:
#!/bin/bash set -e # 创建JupyterLab配置目录 mkdir -p /home/sagemaker-user/.jupyter/labconfig # 添加配置隐藏下载菜单 cat > /home/sagemaker-user/.jupyter/labconfig/page_config.json << EOF { "disabledExtensions": ["@jupyterlab/filebrowser-extension:download"], "settings": { "@jupyterlab/filebrowser-extension:browser": { "showDownloadButton": false } } } EOF chown -R sagemaker-user:sagemaker-user /home/sagemaker-user/.jupyter/labconfig
这个方法会隐藏文件浏览器中的下载按钮,但需要注意部分用户可能通过其他方式(比如API请求)下载,建议结合方案A使用。
3. 补充:限制S3数据源的访问(如果文件来自S3)
如果Studio中的文件存储在S3桶中,可通过S3桶策略限制用户直接下载:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::YOUR_BUCKET/*", "Condition": { "StringLike": { "s3:prefix": ["*.csv", "*.ipynb"] } } } ] }
但该策略仅针对S3中的文件,对Studio本地创建的文件无效,需配合前面的方法使用。
内容的提问来源于stack exchange,提问作者Kalana Madusanka
相关产品推荐
相关产品推荐

