亚马逊AWS官方博客
使用 Amazon CodeWhisperer 和 Amazon CodeGuru 在 Amazon SageMaker notebook 中提供人工智能驱动的代码建议和安全防御工具扫描
今天,我们很高兴地宣布,在 SageMaker notebook 中提供 Amazon CodeWhisperer 和 Amazon CodeGuru 安全防御工具扩展。这些由人工智能驱动的扩展可在您键入代码时提供代码建议,从而有助于加快机器学习开发,并确保代码安全无忧且遵循 AWS 最佳实践。
在这篇博文中,我们将展示如何在 Studio 和 SageMaker notebook 实例中开始使用 Amazon CodeGuru 安全防御工具和 CodeWhisperer。
解决方案概览
CodeWhisperer 扩展是一款人工智能编码助手,可为开发人员提供 notebook 中的实时代码建议。开发人员可以在 Studio 和 SageMaker notebook 实例中免费使用 CodeWhisperer。该编码助手可实时生成单行或全功能代码建议。该编码助手能理解代码中的语义和上下文,并根据 AWS 和开发最佳实践推荐建议,提高开发人员工作的效率、质量和速度。
CodeGuru 安全防御工具扩展为 Studio 和 SageMaker notebook 实例提供安全和代码质量扫描。这有助于 notebook 用户检测安全漏洞,例如注入缺陷、数据泄露、弱加密或 notebook 单元内缺少加密的情况。您还可以检测影响计算 notebook 的可读性、可重现性和正确性的许多常见问题,例如滥用机器学习库 API、无效的运行顺序和不确定性。当在 notebook 中发现漏洞或质量问题时,CodeGuru 会生成建议,使您能够根据 AWS 安全最佳实践修复这些问题。
在以下各节中,我们将展示如何安装每种扩展并讨论其功能,演示这些工具如何提高开发人员的整体工作效率。
先决条件
如果您是第一次使用 Studio,首先需要创建 SageMaker 域。此外,使用 AWS Identity and Access Management(IAM),确保您拥有对 CodeWhisperer 和 CodeGuru 的适当访问权限。
您可以在任何 AWS 区域使用这些扩展,但对 CodeWhisperer 的请求将通过 us-east-1
区域进行处理。如果该区域支持 CodeGuru,则会向 Studio 域所在区域的 CodeGuru 发送请求。对于所有不支持的区域,请求将通过 us-east-1
进行处理。
使用 SageMaker notebook 设置 CodeWhisperer
在本节中,我们将演示如何使用 SageMaker Studio 设置 CodeWhisperer。
更新 IAM 权限以使用扩展
您可以在任何区域使用 CodeWhisperer 扩展,但对 CodeWhisperer 的所有请求都将通过 us-east-1
区域进行处理。
要使用 CodeWhisperer 扩展,请确保您拥有必要的权限。在 IAM 控制台上,向 SageMaker 用户执行角色添加以下策略:
安装 CodeWhisperer 扩展
您可以通过命令行安装 CodeWhisperer 扩展。在本节中,我们将介绍所涉及的步骤。在开始之前,请完成以下步骤:
- 在文件菜单上,选择新建和终端。
- 运行以下命令来安装扩展:
刷新浏览器,即可成功安装 CodeWhisperer 扩展。
在 Studio 中使用 CodeWhisperer
完成安装步骤后,可以通过打开一个新的 notebook 或 Python 文件来使用 CodeWhisperer。在我们的示例中,我们将打开一个 notebook 示例。
您将在 notebook 底部看到一个名为 CodeWhisperer 的工具栏。这显示了 CodeWhisperer 的常用快捷方式,以及暂停代码建议、打开代码参考日志和获取 CodeWhisperer 文档链接的功能。
代码参考日志将标记或筛选类似于开源训练数据的代码建议。获取关联的开源项目的存储库 URL 和许可证,以便您能够更轻松地查看它们并添加属性。
首先,将光标放在 notebook 代码块中,CodeWhisperer 就会开始提出建议。如果您看不到建议,请在 Windows 中按 Alt+C 或者在 Mac 中按 Option+C,手动调用建议。
下面的视频展示了如何使用 CodeWhisperer 在 Studio 中读取数据文件并对数据文件执行描述性统计。
在 SageMaker notebook 实例中使用 CodeWhisperer
要在 notebook 实例中使用 CodeWhisperer,请完成以下步骤:
- 导航到 SageMaker notebook 实例。
- 确保您已将之前的 CodeWhisperer 策略附加到 notebook 实例的 IAM 角色。
- 添加权限后,选择打开 JupyterLab。
- 安装扩展。通过使用终端,在文件菜单上选择新建和终端,然后输入以下命令:
- 命令完成后,在文件菜单上,选择关闭以重新启动 Jupyter 服务器。
- 刷新浏览器窗口。
现在,您将看到 CodeWhisperer 扩展已安装并可供使用。
让我们在 Python 文件中测试一下。
- 在文件菜单上,选择新建和 Python 文件。
以下视频显示了如何创建一个函数,将 JSON 文件转换为 CSV。
使用 SageMaker notebook 设置 CodeGuru 安全防御工具
在本节中,我们将演示如何使用 SageMaker Studio 设置 CodeGuru 安全防御工具。
更新 IAM 权限以使用扩展
要使用 CodeGuru 安全防御工具扩展,请确保您拥有必要的权限。完成以下步骤,使用 IAM 更新权限策略:
- 首选:在 IAM 控制台上,可以将
AmazonCodeGuruSecurityScanAccess
托管策略附加到您的 IAM 身份。此策略授予允许用户处理扫描的权限,包括创建扫描、查看扫描信息和查看扫描结果。 - 对于自定义策略,请输入以下权限:
- 将此策略附加到将使用 CodeGuru 安全防御工具扩展的任何用户或角色。
有关更多信息,请参阅 IAM 中的策略和权限。
安装 CodeGuru 安全防御工具扩展
您可以通过命令行安装 CodeGuru 安全防御工具扩展。 在开始之前,请完成以下步骤:
- 在文件菜单上,选择新建和终端。
- 运行以下命令,在
conda
环境中安装该扩展:
刷新浏览器,即可成功安装 CodeGuru 扩展。
运行代码扫描
以下步骤演示如何使用示例文件运行第一次 CodeGuru 安全扫描:
- 使用以下代码创建一个名为
example.ipynb
的新 notebook 进行测试:
下面的代码故意加入了常见的不良做法,以展示 Amazon CodeGuru 安全防御工具的功能。
- 重要说明:请确保已安装 CodeGuru-Security 扩展,并且在打开 notebook 时 LSP 服务器显示
Fully initialized
,如下所示。
如果您没有看到扩展已完全初始化,请返回上一节安装扩展并完成安装步骤。
- 启动扫描。您可以通过以下方式之一启动扫描:
- 选择文件中的任何代码单元,然后选择灯泡图标。
- 选择(右键单击)文件中的任何代码单元,然后选择运行 CodeGuru 扫描。
- 选择文件中的任何代码单元,然后选择灯泡图标。
扫描开始后,扫描状态将显示为 CodeGuru:正在扫描。
几秒钟后,扫描完成,状态将更改为 CodeGuru:扫描已完成。
查看和处理结果
扫描完成后,您的代码可能会出现一些带下划线的结果。将鼠标悬停在带下划线的代码上,将出现一个弹出窗口,其中包含发现结果的简要摘要。要访问有关发现结果的其他详细信息,请右键单击任何单元,并选择显示诊断面板。
这将打开一个面板,其中包含与发现结果相关的其他信息和建议,它们位于 notebook 文件底部。
根据建议对代码进行更改后,您可以重新运行扫描以检查问题是否已解决。请务必注意,修改代码后,扫描结果将消失,您需要重新运行扫描才能再次查看。
启用自动代码扫描
默认情况下,自动扫描处于禁用状态。您可以选择启用自动代码扫描,并设置扫描运行的频率和 AWS 区域。要启用自动代码扫描,请完成以下步骤。
- 在 Studio 中,在设置菜单上选择高级设置编辑器。
- 对于自动扫描,选择启用。
- 指定以秒为单位的扫描频率和 CodeGuru 安全防御工具扫描的区域。
在我们的示例中,我们将 CodeGuru 配置为在 us-east-1
区域每 240 秒执行一次自动安全扫描。您可以为支持 CodeGuru 安全防御工具的任何区域修改此值。
总结
SageMaker Studio 和 SageMaker notebook 实例现在支持人工智能驱动的 CodeWhisperer 和 CodeGuru 扩展,有助于您更快地编写安全代码。我们鼓励您试用这两个扩展。要了解有关适用于 SageMaker 的 CodeGuru 安全防御工具的更多信息,请参阅开始使用适用于 JupyterLab 和 SageMaker Studio 的 Amazon CodeGuru 扩展;要了解有关适用于 SageMaker 的 CodeWhisperer 的更多信息,请参阅使用 Amazon SageMaker Studio 设置 CodeWhisperer。如有任何反馈意见,请在评论中与我们分享!
关于作者
Raj Pathak 是一名高级解决方案架构师和技术专家,专注于金融服务(保险、银行、资本市场)和机器学习。他专门研究自然语言处理(NLP)、大型语言模型(LLM)以及机器学习基础设施和运营项目(MLOps)。
Gaurav Parekh 是一名解决方案架构师,协助 AWS 客户构建大规模的现代架构。他的核心专业领域包括数据分析、联网和技术战略。工作之余,Gaurav 喜欢打板球、踢足球和打排球。
Arkaprava De 是 AWS 的高级软件工程师。他在 Amazon 工作了 7 年多,目前正致力于改善 Amazon SageMaker Studio IDE 的使用体验。您可以在 LinkedIn 上找到他。
Prashant Pawan Pisipati 是 Amazon Web Services(AWS)的首席产品经理。他曾在 AWS 和 Alexa 开发过各种产品,目前专注于协助机器学习从业者通过 AWS 服务提高工作效率。