通过 Amazon CodeWhisperer 加速安全自动化 安全博客
使用 Amazon CodeWhisperer 加速安全自动化
关键要点
在快速变化的安全环境中,团队必须能够迅速修复安全风险。许多组织正在寻找自动化手段来处理手动处理的安全问题。Amazon CodeWhisperer 是一款 AI 编码助手,它在你的集成开发环境IDE中实时生成单行或完整功能的代码建议,帮助你快速构建软件。借助 CodeWhisperer,安全团队可以加速编写针对 AWS Security Hub 中汇总的各种安全发现的安全自动化脚本的过程。
在本文中,我们将介绍当前安全自动化面临的一些挑战,并指导你如何使用 CodeWhisperer、Amazon EventBridge 和 AWS Lambda 来自动化处理 Security Hub 的发现问题。
当前安全自动化面临的挑战
许多安全自动化方法,包括 Lambda 和 AWS Systems Manager Automation,要求具备软件开发技能。此外,手动编写修复代码对安全专业人员来说是一项耗时的工作。为了解决这些挑战,CodeWhisperer 成为有开发经验的安全专业人员的助推器,以快速有效地生成代码来修复安全发现。
安全专业人员仍需培养软件开发技能,以实现稳健的解决方案。工程师应仔细审查和验证生成的任何代码,因为手动审查仍对安全至关重要。
解决方案概述
下图展示了 Security Hub 产生的发现如何被 EventBridge 接收,接着 EventBridge 调用 Lambda 函数进行处理。Lambda 代码使用 CodeWhisperer 生成。
Security Hub 与 EventBridge 集成,以便你可以自动处理发现的问题,利用 Lambda 等其他服务。为了开始自动修复发现的问题,你可以配置规则来确定将这些发现发送到哪里。该解决方案将执行以下操作:
将 Amazon Security Hub 的发现导入 EventBridge。使用 EventBridge 规则调用 Lambda 函数进行处理。使用 CodeWhisperer 生成 Lambda 函数代码。需要注意的是,Security Hub 发现修复的自动化有两种类型:
部分自动化:由人工操作人员手动选择 Security Hub 中的发现,并对选定的发现应用自动修复工作流。端到端自动化:一旦在 Security Hub 中生成发现,就会启动自动修复工作流,无需人工干预。重要提示:当你使用端到端自动化时,我们强烈建议你首先在非生产环境中彻底测试工作流的效率和影响,然后再在生产环境中实施。
前提条件
要跟进本教程,确保你具备以下前提条件:
一个 AWS 账户Visual Studio Code (VS Code) 或其他支持的 JetBrains IDEPython本地在你的 IDE 中启用 CodeWhisperer开启 AWS Config启用 Security Hub,并选择 NIST 特别出版物 80053 修订版 5实施安全自动化
在此场景中,你的任务是确保你 AWS 账户中的所有 Amazon Simple Storage Service (Amazon S3) 存储桶已启用版本控制。此外,你希望以程序化和自动化的方式进行此操作,以便在将来可以在不同的 AWS 账户中重用。
为此,你将执行以下步骤:
使用 CodeWhisperer 生成修复脚本创建 Lambda 函数使用 EventBridge 将 Lambda 函数与 Security Hub 集成在 Security Hub 中创建自定义操作创建一个 EventBridge 规则,指向 Lambda 函数运行修复使用 CodeWhisperer 生成修复脚本
第一步是在 VS Code 中创建一个脚本,以便 CodeWhisperer 为你的 Lambda 函数生成 Python 代码。你将使用此 Lambda 函数来修复由 [S314] S3 存储桶应使用版本控制 控制生成的 Security Hub 发现。
注意:CodeWhisperer 的底层模型由生成式 AI 驱动,因此 CodeWhisperer 的输出是非确定性的。因此,该服务推荐的代码会因用户而异。通过修改初始代码注释以提示 CodeWhisperer 的回应,用户可以更改相应输出以满足其需求。客户应将 CodeWhisperer 生成的所有代码经过典型的测试和审查程序,以验证其无误且符合适用的组织安全政策。要了解有关与 CodeWhisperer 一起使用提示工程的最佳实践,请参阅这篇 AWS 博客文章。
生成修复脚本打开一个新的 VS Code 窗口,然后打开或创建一个新文件夹来存放你的文件。创建一个名为 cwblogremediationpy 的 Python 文件,如图 2 所示。将以下导入添加到 Python 文件中。 python import json import boto3因为你已经在文件中添加了上下文,所以现在可以通过自然语言注释提示 CodeWhisperer。在你的文件中,在导入语句下方,输入以下注释,然后按 Enter。 python # 创建一个 Lambda 函数,该函数在从 Amazon EventBridge 触发后为 S3 存储桶开启版本控制按 Tab 接受 CodeWhisperer 提供的第一个建议以使用 Lambda 函数处理程序,如图 3 所示。按 Enter 获取 CodeWhisperer 的函数建议。确保你收到的建议与以下内容相似。由于 CodeWhisperer 是非确定性的,因此其建议可能会有所不同。 python import json import boto3
创建一个 Lambda 函数,该函数在从 Amazon EventBridge 触发后为 S3 存储桶开启版本控制
def lambdahandler(event context) s3 = boto3client(s3) bucket = event[detail][requestParameters][bucketName] response = s3putbucketversioning( Bucket=bucket VersioningConfiguration={ Status Enabled } ) print(response) return { statusCode 200 body jsondumps(为存储桶 bucket 启用版本控制) }7 稍作停留,查看 [用户操作和快捷键](https//docsawsamazoncom/codewhisperer/latest/userguide/actionsandshortcutshtml)。按 Tab 接受建议。8 你可以根据自己的用例更改函数主体。为从 EventBridge 事件中获取 S3 存储桶的 Amazon 资源名称 (ARN),用以下行替换 bucket 变量:pythonbucket = event[detail][findings][0][Resources][0][Id]9 要提示 CodeWhisperer 从存储桶 ARN 中提取存储桶名称,请使用以下注释:python
从存储桶的 ARN 中提取 S3 存储桶名称
你的函数代码应如下所示:pythonimport jsonimport boto3

创建一个 Lambda 函数,该函数在从 Amazon EventBridge 触发后为 S3 存储桶开启版本控制
def lambdahandler(event context) s3 = boto3client(s3) bucket = event[detail][findings][0][Resources][0][Id] # 从存储桶的 ARN 中提取 S3 存储桶名称 bucket = bucketsplit()[5]
response = s3putbucketversioning( Bucket=bucket VersioningConfiguration={ Status Enabled })print(response)return { statusCode 200 body jsondumps(为存储桶 bucket 启用版本控制)}10 为 cwblogremediationpy 创建一个 zip 文件。在本地文件管理器中找到该文件,右键点击文件并选择 压缩/打包。你将在下一节中使用此 zip 文件。
创建 Lambda 函数
下一步是使用你生成的自动化脚本创建 Lambda 函数,该函数将为适用的 S3 存储桶启用版本控制。
创建 Lambda 函数打开 AWS Lambda 控制台。在左侧导航栏中,选择 Functions,然后选择 Create function。选择 Author from Scratch,并为该函设置以下配置:对于 Function name,输入 secremediationfunction。对于 Runtime,选择 Python 312。对于 Architecture,选择 x8664。对于 Permissions,选择 Create a new role with basic Lambda permissions。选择 Create function。为将本地代码上传到 Lambda,选择 Upload from,然后选择 zip file,上传你打包的文件。确认成功创建 Lambda 函数。在 Lambda 的 Code source 部分,你应在新标签中看到自动化脚本的代码,如图 4 所示。西游加速服务器官网选择 Code 选项卡。向下滚动到 Runtime settings 面板,选择 Edit。对于 Handler,输入 cwblogremediationlambdahandler 作为函数处理程序,然后选择 Save,如图 5 所示。为了安全起见,并遵循最小权限原则,你还应向 Lambda 函数的角色添加一条内联策略,以执行启用 S3 存储桶版本控制所需的任务。在 Lambda 控制台中,导航到 Configuration 选项卡,然后在左侧导航栏中选择 Permissions。选择 Role name,如图 6 所示。在 Add permissions 下拉菜单中,选择 Create inline policy。选择 JSON,将以下策略添加到策略编辑器中,然后选择 Next。 json { Version 20121017 Statement [ { Sid VisualEditor0 Effect Allow Action s3PutBucketVersioning Resource } ] }将策略命名为 PutBucketVersioning,选择 Create policy。在 Security Hub 中创建自定义操作
在此步骤中,你将在 Security Hub 中创建自定义操作。
创建自定义操作打开 Security Hub 控制台。在左侧导航栏中,选择 Settings,然后选择 Custom actions。选择 Create custom action。提供以下信息,如图 8 所示:对于 Name,输入 TurnOnS3Versioning。对于 Description,输入 将为特定 S3 存储桶启用版本控制的操作。对于 Custom action ID,输入 TurnOnS3Versioning。选择 Create custom action。记下 Custom action ARN。在创建 EventBridge 中与该自定义操作关联的规则时需要此 ARN。创建 EventBridge 规则以指向 Lambda 函数
接下来要创建一个 EventBridge 规则,用于捕获自定义操作。你将定义一个 EventBridge 规则,该规则匹配来自确认已转发的 Security Hub 中的发现事件。
创建 EventBridge 规则转到 EventBridge 控制台。在右侧,选择 Create rule。在 Define rule detail 页面,为你的规则提供一个 name 和 description,表示规则的目的例如,你可以使用与自定义操作相同的名称和描述。然后选择 Next。向下滚动到 Event pattern,然后执行以下操作:对于 Event source,确保选择 AWS services。对于 AWS service,选择 Security Hub。对于 Event type,选择 Security Hub Findings Custom Action。选择 Specific custom action ARN(s),然后输入之前创建的自定义操作的 ARN。当你提供这些信息时,Event pattern 将被更新。
选择 Next。在 Select target(s) 步骤中,在 Select a target 下拉菜单中选择 Lambda function。然后在 Function 下拉菜单中选择 secremediationfunction。选择 Next。在 Configure tags 步骤中,选择 Next。在 Review and create 步骤中,选择 Create rule。运行自动化
你的自动化已设置完毕,并且你现在可以测试自动化。此测试涵盖部分自动化工作流,因为你将手动选择发现并将修复工作流应用于一个或多个选定的发现。
重要提示:如前所述,如果你决定进行端到端自动化,应该在非生产环境中评估工作流的影响。此外,您可能需要考虑创建 预防性控制,以最小化整个环境中事件发生的风险。
运行自动化在 Security Hub 控制台的 Findings 选项卡中,按 Title 添加筛选,输入标题并选择该筛选。选择 IS 并输入 “S3 通用存储桶应启用版本控制”区分大小写。选择 Apply。在过滤后的列表中,选择一个活动发现的 Title。在开始自动化之前,检查 S3 存储桶当前的配置,以确认你的自动化是否有效。展开发现的 Resources 部分。在 Resource ID 下,选择 S3 存储桶的链接。这会在 S3 控制台上打开一个新标签,仅显示此 S3 存储桶。在你的浏览器中,返回 Security Hub 标签页不要关闭 S3 标签页稍后你需要返回去,在左侧选择同一发现,如图 10 所示。![图 10 筛选
发表评论