Shashank K S

简化安全性:将 Amazon Bedrock 与 Elastic 集成

本文将指导您设置 Amazon Bedrock 集成并启用 Elastic 的预建检测规则,以简化您的安全操作。

阅读时间:15 分钟检测工程产品更新启用
Streamlining Security: Integrating Amazon Bedrock with Elastic

前言

在不断变化的云计算环境中,对于各种规模的企业来说,在确保合规性的同时维护稳健的安全性都是一项严峻的挑战。随着企业越来越多地采用云技术,跨各种平台管理和保护数据的复杂性也成倍增加。

Amazon Bedrock 凭借其强大的机器学习和人工智能服务基础,为企业开发和部署智能应用程序提供了一个可扩展的安全环境。然而,要充分利用这些创新的潜力,就必须对安全性和合规性实施简化的方法。

将 Elastic 与 Amazon Bedrock 集成,可显著增强云环境中的安全监控和合规性管理。该集成利用 Elastic 的搜索、可观察性和安全功能,可优化您管理和保护 Amazon Bedrock 上托管的应用程序和数据的方式。

Elastic 的安全信息和事件管理 (SIEM) 功能可用于分析日志和监控 Amazon Bedrock 上运行的应用程序所产生的事件。这样就可以实时检测潜在的安全威胁,并自动采取应对措施来降低风险。

本文将指导您设置 Amazon Bedrock 集成,并启用我们预置的检测规则,以简化您的安全操作。我们将涵盖以下主要方面:

  1. 弹性 Amazon Bedrock 集成的先决条件:了解为云安全设置 Elastic Amazon Bedrock 集成的核心要求。
  2. 设置 Amazon Bedrock 集成:在现有 AWS 基础架构中设置 Amazon Bedrock 的分步说明。
  3. 启用预置安全规则:如何利用预置规则检测高可信度策略违规和其他安全威胁。
  4. 探索高置信度不当行为区块检测:深入了解特定的预构建规则,该规则旨在检测 Amazon Bedrocklogs 中的高置信度不当行为块。
  5. 演示 Amazon Bedrock 的漏洞利用案例场景:使用示例 python 脚本模拟与 Amazon Bedrock 模型的交互,以测试可能触发 Elastic 预建检测规则的漏洞利用场景。

弹性 Amazon Bedrock 集成的先决条件

亚马逊 Bedrock 的弹性集成

Amazon Bedrock 集成通过 Elastic Agent 收集 Amazon Bedrock 模型调用日志和运行时指标。如需深入了解集成情况,请参阅我们的文档。

以下是完整、成功配置 Amazon Bedrock Elastic Integration 的先决条件列表:

  • AWS 账户设置
  • 弹性云要求
  • Terraform (可选)

AWS 账户设置

  • 活跃的 AWS 账户:确保您拥有具有适当权限的活动 AWS 账户,以便在 Amazon Bedrock 上部署和管理资源。
  • Amazon Bedrock 设置:确认 Amazon Bedrock 已在您的 AWS 环境中正确配置和运行。这包括设置人工智能模型、数据集和其他应用所需的资源。有关设置的更多信息,请参阅亚马逊 Bedrock 入门
  • IAM 角色和权限:创建或配置具有必要权限的身份和访问管理 (IAM) 角色,以允许 Elastic 访问 Amazon Bedrock 资源。这些角色应具有足够的权限来读取 AWS 服务的日志、指标和跟踪。有关要求的其他详细信息,请参阅我们的AWS 文档

弹性云要求

版本0.7.0 (测试版)
兼容的 Kibana 版本集成版本 0.2.0 及以上需要 8.13.0 或更高版本。最低 Kibana 版本 8.12.0
支持的无服务器项目类型安全可观察性
订阅级别基础级
支持程度Elastic

注意:由于该集成处于测试版阶段,请在弹性堆栈管理窗格的浏览集成部分启用显示测试版集成。

Terraform

Terraform是由 HashiCorp 创建的开源基础设施即代码(IaC)工具,可让您以一致和可重复的方式定义、配置和管理云计算和企业内部基础设施。

这是一个可选步骤,但很有必要,因为在文章接下来的章节中,我们将使用该工具来设置所需的 AWS 基础架构。点击此处深入了解安装和文档。

设置亚马逊 Bedrock 集成

在本文的这一部分,我们将分两部分介绍设置 Amazon Bedrock 与 Elastic 集成的步骤:

  1. 使用 Terraform 设置 AWS 基础架构:在本节中,我们将介绍使用 Terraform 设置 AWS 基础架构的步骤。我们将创建一个 S3 存储桶、一个带有访问 S3 存储桶所需 IAM 角色和策略的 EC2 实例,并配置安全组以允许 SSH 访问。这种设置非常适合需要 EC2 实例与 S3 进行交互(如数据处理或存储)的场景。
  2. 弹性代理和集成设置:在本节中,我们将介绍在 AWS EC2 实例上安装 Elastic Agent 和配置 Amazon Bedrock Integration 的步骤。

使用 Terraform 设置 AWS 基础设施

高级配置过程包括以下步骤:

  1. 配置 providers.tf
  2. 配置 variables.tf
  3. 配置 outputs.tf
  4. 配置 main.tf

providers.tf 文件通常包含项目中使用的任何 Terraform 提供程序的配置。在我们的示例中,它包括 AWS 提供商的配置。以下是providers.tf 文件的内容示例providers.tf 中提到的profile 应配置在 AWS 凭据文件(~/.aws/credentials) 的用户空间中。请参阅 "配置和凭据文件设置 - AWS 命令行界面",Elastic 的AWS 文档中的凭据部分也强调了这一点。

variables.tf 文件包含整个 Terraform 配置中使用的变量定义。在我们的方案中,它包括 aws_region 和 resource_labels 的定义。以下是variables.tf 文件的内容示例

outputs.tf 文件通常包含 Terraform 配置的输出定义。这些输出可用于在基础架构配置完成后显示有用的信息。以下是outputs.tf 文件的内容示例

main.tf 文件通常包含所有这些资源的集合,如数据源、S3 桶和桶策略、Amazon Bedrock 模型调用日志配置、SQS 队列配置、安装 Elastic Agent 和流日志的 EC2 实例所需的 IAM 角色和策略以及 Amazon Bedrock Guardrail 配置。以下是main.tf 文件的内容示例

main.tf 根据要求进行配置后,我们就可以初始化、规划和应用 Terraform 配置。

terraform init // initializes the directory and sets up state files in backend
terraform plan // command creates an execution plan
terraform apply // command applies the configuration aka execution step

要拆除 terraform 之前创建的基础设施,可以使用terraform destroy 命令。

基础架构设置完成后,必要的资源标识符将通过outputs.tf. 提供。我们可以使用以下步骤对创建的基础架构进行基本验证:

  1. 验证 Terraform 创建的 S3 Bucket ,可以使用 aws cli 命令参考 列表-buckets - AWS CLI 1.34.10 命令参考 或通过 AWS 控制台导航来验证。2.验证从 terraform 创建的 SQS 队列,可以使用 aws cli 命令参考list-queues - AWS CLI 1.34.10 命令参考或通过 AWS 控制台导航来验证。
  2. 从 AWS 控制台验证已创建的 EC2 实例,并 使用 EC2 Instance Connect - Amazon Elastic Compute Cloud 通过 Connect 连接到 ec2 -instance ,然后运行aws s3 ls example-bucket-name 检查实例是否可以访问已创建的 S3 存储桶。
  3. 验证从 Terraform 创建的 Amazon Bedrock Guardrail,可以使用 Amazon Bedrock APIListGuardrails - Amazon Bedrock或通过 AWS 控制台导航来验证。

设置弹性代理和集成设置

要在 AWS EC2 实例上安装 Elastic Agent 并配置 Amazon Bedrock 集成,请使用 Elastic Agent 策略 | Fleet 和 Elastic Agent 指南 [8.15] 中的指导步骤创建代理 策略 。然后,通过 使用 EC2 Instance Connect - Amazon Elastic Compute Cloud 中的 Connect 登录基础架构设置步骤中创建的 ec2 -实例 ,并使用 Install Elastic Agents | Fleet and Elastic Agent Guide [8.15] 中的指导步骤安装弹性代理。在代理安装过程中,请记住选择在设置过程开始时创建的代理策略,并根据创建的实例使用相关的代理安装方法。最后,确保代理已正确配置,并有来自代理的传入数据。

要在新创建的策略中配置 Amazon Bedrock 集成,请使用指导步骤添加 Amazon Bedrock 集成:在策略中添加弹性代理集成。启用 Beta 集成以使用 Amazon Bedrock 集成,如下图所示。

配置与 AWS 访问密钥的集成,以访问配置了 Amazon Bedrock 的 AWS 账户。使用从 S3 桶收集日志,并指定在设置步骤中创建的桶 ARN。请注意,在设置过程中应使用 S3 Bucket 或 SQS Queue URL,而不是同时使用两者。将此集成添加到配置 ec2-instance 的现有策略中。

验证亚马逊岩石模型调用日志输入

完成弹性代理和集成设置后,我们可以使用以下示例 API 调用对集成进行基本验证,以确定日志是否按预期摄取:

aws bedrock-runtime converse \
--model-id "anthropic.claude-3-5-sonnet-20240620-v1:0" \
--messages '[{"role":"user","content":[{"text":"Hello "}]}]' \
--inference-config '{"maxTokens":2000,"stopSequences":[],"temperature":1,"topP":0.999}' \
--additional-model-request-fields '{"top_k":250}' \
--region us-east-1

示例 API 调用假定使用 aws cli 进行了工作设置,并且可以访问基础模型Anthropic Claude Messages API - Amazon Bedrock。如果用户没有访问模型的权限,可以按照访问亚马逊 Bedrock 基础模型中的建议,直接从模型访问页面请求访问模型,或者我们也可以选择将应用程序接口调用改为用户可以访问的任何现有模型。

成功执行上述 API 调用后,Amazon Bedrock Model 调用日志将被填充,Kibanalogs-aws_bedrock.invocation-default 中应填充这些调用日志。我们可以使用以下简单的 ES|QL 查询来返回最近摄取的事件。

from logs-aws_bedrock.invocation-* | LIMIT 10

启用预制检测规则

要启用预建检测规则,首先要登录到弹性实例,然后从左侧窗格导航到安全 → 规则 → 检测规则 (SIEM)。从标签部分筛选 "数据源:从标签部分筛选 "Amazon Bedrock"。

启用可用的预置规则。对于预构建的规则,设置信息中包含为 Amazon Bedrock 设置 AWS Guardrails 的辅助指南,如果正确遵循示例且 terraform 具有 Amazon Bedrock Guardrail 配置,则可在 使用 Terraform 设置 AWS 基础架构 步骤中完成 设置 。请注意,此设置对于某些规则生成警报至关重要,如果在基础架构设置阶段跳过,我们需要确保相应的护栏设置。

探索高可信度不当行为阻碍检测

让我们模拟一个真实世界的场景:用户查询一个被亚马逊 Bedrock 模型拒绝的主题。导航到 Amazon UI 控制台中的 Amazon Bedrock 部分,然后使用左侧导航窗格导航到 Safeguards 下的 Guardrails 子部分。在本练习中使用我们在设置说明中创建的示例护栏,并使用测试选项来运行带有护栏的模型调用,并查询配置的拒绝主题。

重复查询至少 6 次,因为预建规则的设计目的是对大于 5 的高置信度区块发出警报。当警报计划运行时,我们可以看到一个警报弹出,内容是 Unusual High Confidence Misconduct Blocks Detected.

演示亚马逊 Bedrock 的漏洞案例场景

要模拟 Amazon Bedrock 安全绕过,我们需要一个漏洞利用模拟脚本来与 Amazon Bedrock 模型交互。我们提供的漏洞利用脚本示例模拟了以下攻击模式:

  • 尝试多次连续请求使用 AWS Bedrock 中被拒绝的模型资源
  • 在 Amazon Bedrock 中连续生成多个验证异常错误
  • 用户持续产生大量输入标记,提交大量请求,并收到大量响应,模仿资源耗尽模式
  • 将反复出现的高置信度 "BLOCKED "行动与 "MISCONDUCT "等特定违规代码相结合,表明持续滥用或试图探究模型的道德底线
class BedrockModelSimulator:
   def __init__(self, profile_name, region_name):
       // Create a Boto3 Session Client for Ineration 
   def generate_args_invoke_model(self, model_id, user_message, tokens): 	// Generate Model Invocation parameters
       guardrail_id = <<GUARDRAIL_ID>>
       guardrail_version = <<GUARDRAIL_VERSION>>

       guardrail_config = {
           "guardrailIdentifier": guardrail_id,
           "guardrailVersion": guardrail_version,
           "trace": "enabled"
       }
       conversation = [
           {
               "role": "user",
               "content": [{"text": user_message}],
           }
       ]
       inference_config = {"maxTokens": tokens, "temperature": 0.7, "topP": 1}
       additional_model_request_fields = {}

       kwargs = {
           "modelId": model_id,
           "messages": conversation,
           "inferenceConfig": inference_config,
           "additionalModelRequestFields": additional_model_request_fields
	    "guardrailConfig" : guardrail_config
       }
       return kwargs
  
   def invoke_model(self, invocation_arguments):
       for _ in range(count):
           try:
               // Invoke Model With right invocation_arguments
           except ClientError as e:
               // Error meesage

def main():
   profile_name = <<AWS Profile>>
   region_name = 'us-east-1'
   denied_model_id = // Use a denied model   
   denied_model_user_message = // Sample Message 
   available_model_id = // Use an available model  
   validation_exception_user_message = // Sample Message 
   resource_exploit_user_message = // A very big message for resource exhuastion
   denied_topic_user_message = // Sample Message that can query denied topic configured
   simulator = BedrockModelSimulator(profile_name, region_name)
   denied_model_invocation_arguments = simulator.generate_args_invoke_model(denied_model_id, denied_model_user_message, 200)
   simulator.invoke_model(denied_model_invocation_arguments)
   validation_exception_invocation_arguments = simulator.generate_args_invoke_model(available_model_id, validation_exception_user_message, 6000)
   simulator.invoke_model(validation_exception_invocation_arguments)
   resource_exhaustion_invocation_arguments = simulator.generate_args_invoke_available_model(available_model_id, resource_exploit_user_message, 4096)
   simulator.invoke_model(resource_exhaustion_invocation_arguments)
   denied_topic_invocation_arguments = simulator.generate_args_invoke_available_model_guardrail(available_model_id, denied_topic_user_message, 4096)
   simulator.invoke_model(denied_topic_invocation_arguments)

if __name__ == "__main__":
   main()

注:GUARDRAIL_ID 和 GUARDRAIL_VERSION 可在outputs.tf

在受控环境中执行时,所提供的脚本会模拟利用场景,从而在 Elastic Security 中生成检测警报。在使用 "弹性攻击发现 "功能分析这些警报时,脚本会创建攻击链,显示各种警报之间的关系,让分析人员清楚地了解多个警报可能是更大攻击的一部分。

结论

将 Elastic 与 Amazon Bedrock 集成后,企业就能维护安全、合规的云环境,同时最大限度地发挥人工智能和机器学习的优势。通过利用 Elastic 先进的安全和可观察性工具,企业可以主动检测威胁,自动进行合规性报告,并深入了解其云操作。企业越来越依赖于不透明的数据源和技术来揭示最严重的威胁--我们对透明安全的承诺体现在我们的开放式产品、集成和源代码中。

分享这篇文章