我们只需要对Jupyter Notebook中的c.ContentsManager.files_handler_class函数进行修改,就可以禁用Amazon SageMaker Notebook的下载功能。
Amazon SageMaker Notebook 是一个托管的机器学习的计算实例,上面运行着 Jupyter Notebook 应用程序。用户可以通过 Jupyter Notebook 运行 Python 代码来进行机器学习的模型的开发和训练。Jupyter Notebook 允许用户下载原始 .ipynb 文件,甚至提供了一个下载按钮。企业客户出于安全和合规的考虑,希望数据科学家/模型工程师仅从 SageMaker Notebook 实例访问用于机器学习训练的数据,并且希望限制他们将数据下载到本地计算机。
本文将演示如何在 Amazon SageMaker Notebook 上禁止用户下载原始文件。
原理
Jupyter Notebook 的下载功能是由 c.ContentsManager.files_handler_class 实现的,我们只需要对这个函数进行修改,就可以实现禁止下载的功能。由于 SageMaker Notebook 不会对/home/ec2-user/SageMaker 目录以外的任何变更持久化,所以我们需要通过生命周期配置,在每次 SageMaker Notebook 实例启动的时候进行变更。
操作
1. 在 SageMaker 的控制面板上选择 Lifecycle Configuration,然后选择 Notebook Instance,并点击 Create configuration 来创建一个新的生命周期配置。
2. 将以下内容填到 Start notebook 的脚本中,并点击创建。
3. 在创建新的 notebook 实例或者修改现有 notebook 的实例时候,点击 Additional configuration,选择第 2 步创建的 disable-download 生命周期配置。这样上面的脚本就会在每次 SageMaker Notebook 启动的时候对 Jupyter Notebook 的配置进行变更。
测试
打开 Jupyter Lab 尝试下载原文件,应该会返回 File wasn’t available 的错误:
权限管理
如果数据科学家/模型工程师知道管理员是通过修改 Jupyter Notebook 的配置文件来禁止下载功能的,那么就可以通过修改配置文件的方式将下载功能恢复。所以在第二部使用的脚本的最后部分,修改了 Jupyter Notebook 的配置文件的访问权限,并且移除了 ec2-user 的无密码 sudo 权限。这样用户就无法更改 Jupyter Notebook 的配置文件。
局限性
由于数据科学家/模型工程师没有 root 的权限,无法自行安全第三方的插件或者库。需要管理员用同样的方式,通过生命周期的脚本将所需要的插件和库安装到 SageMaker Notebook 实例上。