亚马逊AWS官方博客

使用 Amazon CodeWhisperer 和 Amazon CodeGuru 在 Amazon SageMaker notebook 中提供人工智能驱动的代码建议和安全防御工具扫描

Amazon SageMaker 提供了两个选项,可以启动完全托管的 notebook,用于探索数据和构建机器学习(ML)模型。第一个选项是可在 Amazon SageMaker Studio(用于机器学习的完全集成式开发环境(IDE))中访问的、快速启动的协作式 notebook。您可以在 Studio 中快速启动 notebook,在不中断工作的情况下轻松上调或下调底层计算资源,甚至只需点击几下,就能以链接的形式共享 notebook。除了创建 notebook 外,您还可以在 Studio 的单一管理面板中执行所有机器学习开发步骤,以构建、训练、调试、跟踪、部署和监控模型。第二个选项是 Amazon SageMaker notebook 实例,这是一个在云端运行 notebook 的完全托管式机器学习计算实例,可让您更好地控制 notebook 的配置。

今天,我们很高兴地宣布,在 SageMaker notebook 中提供 Amazon CodeWhispererAmazon 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),确保您拥有对 CodeWhispererCodeGuru 的适当访问权限。

您可以在任何 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 用户执行角色添加以下策略:

{
"Version": "2012-10-17",
"Statement": [
          {
               	"Sid": "CodeWhispererPermissions",
               	"Effect": "Allow",
               	"Action": ["codewhisperer:GenerateRecommendations"],
				"Resource": "*"
          }
    ]
}

安装 CodeWhisperer 扩展

您可以通过命令行安装 CodeWhisperer 扩展。在本节中,我们将介绍所涉及的步骤。在开始之前,请完成以下步骤:

  1. 文件菜单上,选择新建终端
  2. 运行以下命令来安装扩展:
    conda activate studio
    pip install amazon-codewhisperer-jupyterlab-ext
    jupyter server extension enable amazon_codewhisperer_jupyterlab_ext
    conda deactivate
    restart-jupyter-server

刷新浏览器,即可成功安装 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,请完成以下步骤:

  1. 导航到 SageMaker notebook 实例。
  2. 确保您已将之前的 CodeWhisperer 策略附加到 notebook 实例的 IAM 角色。
  3. 添加权限后,选择打开 JupyterLab
  4. 安装扩展。通过使用终端,在文件菜单上选择新建终端,然后输入以下命令:
    pip install amazon-codewhisperer-jupyterlab-ext
    jupyter server extension enable amazon_codewhisperer_jupyterlab_ext
  5. 命令完成后,在文件菜单上,选择关闭以重新启动 Jupyter 服务器。
  6. 刷新浏览器窗口。

现在,您将看到 CodeWhisperer 扩展已安装并可供使用。

让我们在 Python 文件中测试一下。

  1. 文件菜单上,选择新建Python 文件

以下视频显示了如何创建一个函数,将 JSON 文件转换为 CSV。

使用 SageMaker notebook 设置 CodeGuru 安全防御工具

在本节中,我们将演示如何使用 SageMaker Studio 设置 CodeGuru 安全防御工具。

更新 IAM 权限以使用扩展

要使用 CodeGuru 安全防御工具扩展,请确保您拥有必要的权限。完成以下步骤,使用 IAM 更新权限策略:

  1. 首选:在 IAM 控制台上,可以将 AmazonCodeGuruSecurityScanAccess 托管策略附加到您的 IAM 身份。此策略授予允许用户处理扫描的权限,包括创建扫描、查看扫描信息和查看扫描结果。
  2. 对于自定义策略,请输入以下权限:
    { 
        "Version": "2012-10-17",
        "Statement": [ 
            { 
                "Sid": "AmazonCodeGuruSecurityScanAccess",
                "Effect": "Allow",
                "Action": [ 
                    "codeguru-security:CreateScan",
                    "codeguru-security:CreateUploadUrl",
                    "codeguru-security:GetScan",
                    "codeguru-security:GetFindings" 
                ],
                "Resource": "arn:aws:codeguru-security:*:*:scans/*" 
            } 
        ] 
    }
  3. 将此策略附加到将使用 CodeGuru 安全防御工具扩展的任何用户或角色。

有关更多信息,请参阅 IAM 中的策略和权限

安装 CodeGuru 安全防御工具扩展

您可以通过命令行安装 CodeGuru 安全防御工具扩展。 在开始之前,请完成以下步骤:

  1. 文件菜单上,选择新建终端
  2. 运行以下命令,在 conda 环境中安装该扩展:
    conda activate studio
    pip install amazon-codeguru-jupyterlab-extension
    conda deactivate

刷新浏览器,即可成功安装 CodeGuru 扩展。

运行代码扫描

以下步骤演示如何使用示例文件运行第一次 CodeGuru 安全扫描:

  1. 使用以下代码创建一个名为 example.ipynb 的新 notebook 进行测试:
    import torch
    # import tensorflow as tf
    
        
    def tensorflow_avoid_using_nondeterministic_api_noncompliant():
        data = tf.ones((1, 1))
        # Noncompliant: Determinism of tf.compat.v1.Session
        # can not be guaranteed in TF2.
        Ítf.config.experimental.enable_op_determinism()
        tf.compat.v1.Session(
            target='', graph=None, config=None
        )
        layer = tf.keras.layers.Input(shape=[1])
        model = tf.keras.models.Model(inputs=layer, outputs=layer)
        model.compile(loss="categorical_crossentropy", metrics="AUC")
        model.fit(x=data, y=data)
        
    def pytorch_sigmoid_before_bceloss_compliant():
        # Compliant: `BCEWithLogitsLoss` function integrates a `Sigmoid`
        # layer and the `BCELoss` into one class
        # and is numerically robust.
        loss = nn.BCEWithLogitsLoss()
    
        input = torch.randn(3, requires_grad=True)
        target = torch.empty(3).random_(2)
        output = loss(input, target)
        output.backward()

下面的代码故意加入了常见的不良做法,以展示 Amazon CodeGuru 安全防御工具的功能。

  1. 重要说明:请确保已安装 CodeGuru-Security 扩展,并且在打开 notebook 时 LSP 服务器显示 Fully initialized,如下所示。

如果您没有看到扩展已完全初始化,请返回上一节安装扩展并完成安装步骤。

  1. 启动扫描。您可以通过以下方式之一启动扫描:
    • 选择文件中的任何代码单元,然后选择灯泡图标。
    • 选择(右键单击)文件中的任何代码单元,然后选择运行 CodeGuru 扫描

扫描开始后,扫描状态将显示为 CodeGuru:正在扫描

几秒钟后,扫描完成,状态将更改为 CodeGuru:扫描已完成

查看和处理结果

扫描完成后,您的代码可能会出现一些带下划线的结果。将鼠标悬停在带下划线的代码上,将出现一个弹出窗口,其中包含发现结果的简要摘要。要访问有关发现结果的其他详细信息,请右键单击任何单元,并选择显示诊断面板

这将打开一个面板,其中包含与发现结果相关的其他信息和建议,它们位于 notebook 文件底部。

根据建议对代码进行更改后,您可以重新运行扫描以检查问题是否已解决。请务必注意,修改代码后,扫描结果将消失,您需要重新运行扫描才能再次查看。

启用自动代码扫描

默认情况下,自动扫描处于禁用状态。您可以选择启用自动代码扫描,并设置扫描运行的频率和 AWS 区域。要启用自动代码扫描,请完成以下步骤。

  1. 在 Studio 中,在设置菜单上选择高级设置编辑器
  2. 对于自动扫描,选择启用
  3. 指定以秒为单位的扫描频率和 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。如有任何反馈意见,请在评论中与我们分享!


Original URL: https://aws.amazon.com/blogs/machine-learning/ai-powered-code-suggestions-and-security-scans-in-amazon-sagemaker-notebooks-using-amazon-codewhisperer-and-amazon-codeguru/

关于作者

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 服务提高工作效率。