
序言
在不断发展的云计算领域,保持强大的安全性并确保合规性对于各类组织来说都是一个关键挑战。随着企业越来越多地采用云技术,跨平台管理和保护数据的复杂性也在急剧增加。
Amazon Bedrock[1] 以其强大的机器学习和人工智能服务为基础,为组织开发和部署智能应用程序提供了一个可扩展且安全的环境。然而,要充分利用这些创新成果,必须实施一种简化的安全和合规性方法。
将 Elastic 与 Amazon Bedrock 集成,可以显著增强您云环境中的安全监控和合规管理。这种集成利用 Elastic 的搜索、可观测性和安全功能,优化了您对 Amazon Bedrock 上托管的应用程序和数据的管理和保护方式。
Elastic 的 安全信息和事件管理 (SIEM) 功能[2] 可用于分析日志和监控由在 Amazon Bedrock 上运行的应用程序生成的事件。这允许实时检测潜在的安全威胁,并自动采取响应措施来减轻风险。
本文将指导您设置 Amazon Bedrock 集成并启用预构建的检测规则,以简化您的安全操作。我们将涵盖以下关键方面:
1. Elastic Amazon Bedrock 集成的前提条件:了解设置 Elastic Amazon Bedrock 集成以实现云安全的核心要求。
2. 设置 Amazon Bedrock 集成:逐步指导您在现有 AWS 基础设施中设置 Amazon Bedrock。
3. 启用预构建安全规则:如何利用 预构建规则[3] 检测高置信度的策略违规和其他安全威胁。
4. 探索高置信度不当行为检测:深入了解一个特定的预构建规则,该规则旨在检测 Amazon Bedrock 日志中的高置信度不当行为。
5. 演示一个针对 Amazon Bedrock 的漏洞利用场景:使用示例 Python 脚本模拟与 Amazon Bedrock 模型的交互,以测试可能触发 Elastic 预构建检测规则的漏洞利用场景。
Elastic Amazon Bedrock 集成的前提条件
Elastic 与 Amazon Bedrock 集成
Amazon Bedrock 集成通过 Elastic Agent 收集 Amazon Bedrock 模型调用日志和运行时指标。有关集成的更深入信息,请参阅我们的 文档[4]。
以下是成功配置 Amazon Bedrock Elastic 集成的前提条件:
• AWS 账户设置
• Elastic Cloud 要求
• Terraform(可选)
AWS 账户设置
• 有效的 AWS 账户:确保您拥有一个有效的 AWS 账户,并具有在 Amazon Bedrock 上部署和管理资源的适当权限。
• Amazon Bedrock 设置:确认 Amazon Bedrock 已在您的 AWS 环境中正确配置并正常运行。这包括设置 AI 模型、数据集和应用程序所需的其他资源。有关设置的更多信息,请参阅 开始使用 Amazon Bedrock[5]。
• IAM 角色和权限:创建或配置具有必要权限的身份和访问管理 (IAM) 角色,以允许 Elastic 访问 Amazon Bedrock 资源。这些角色应具有足够的权限,能够读取 AWS 服务的日志、指标和跟踪。更多详细信息请参阅我们的 AWS 文档[6]。
Elastic Cloud 要求
| 版本 | 0.7.0 (Beta) |
| 兼容的 Kibana 版本 | 8.13.0 或更高版本用于集成版本 0.2.0 及以上。最低 Kibana 版本 8.12.0 |
| 支持的无服务器项目类型 | 安全性,可观测性 |
| 订阅级别 | 基本版 |
| 支持级别 | Elastic |
注意:由于该集成处于 Beta 发布阶段,请在 Elastic 堆栈的管理面板的浏览集成部分启用 显示 Beta 集成。

Terraform
Terraform[7] 是由 HashiCorp 创建的开源基础设施即代码 (IaC) 工具,允许您以一致且可重复的方式定义、配置和管理云和本地基础设施。
这是一个可选步骤,但在本文的后续部分中,我们将使用该工具来设置所需的 AWS 基础设施。有关安装和文档的详细信息,请参阅 这里[8]。
设置 Amazon Bedrock 集成
在本文的这一部分中,我们将分两个部分介绍如何设置 Amazon Bedrock 与 Elastic 的集成:
1. 使用 Terraform 设置 AWS 基础设施:我们将逐步讲解如何使用 Terraform 设置 AWS 基础设施。我们将创建一个 S3 存储桶,一个具有必要 IAM 角色和策略的 EC2 实例,以访问 S3 存储桶,并配置安全组以允许 SSH 访问。该设置非常适合需要 EC2 实例与 S3 交互的场景,例如数据处理或存储。
2. Elastic Agent 和集成设置:我们将逐步讲解如何在 AWS EC2 实例上安装 Elastic Agent 并配置 Amazon Bedrock 集成。
使用 Terraform 设置 AWS 基础设施
高层次的配置过程将涉及以下步骤:
1. 配置
providers.tf2. 配置
variables.tf3. 配置
outputs.tf4. 配置
main.tf
providers.tf
文件通常包含您在项目中使用的任何 Terraform 提供程序的配置。在我们的示例中,它包括 AWS 提供程序的配置。这里是我们的 providers.tf
文件的 示例内容[9]。providers.tf
中提到的 profile
应该配置在用户空间的 AWS 凭证文件中 (~/.aws/credentials)
。请参阅 配置和凭证文件设置 - AWS 命令行界面[10],这在 Elastic 的 AWS 文档[11] 的凭证部分中也有强调。
variables.tf
文件包含在您的 Terraform 配置中使用的变量定义。对于我们的场景,它包括 aws_region 和 resource_labels 的定义。这里是我们的 variables.tf
文件的 示例内容[12]。
outputs.tf
文件通常包含您的 Terraform 配置的输出定义。这些输出可用于在基础设施配置完成后显示有用的信息。这里是我们的 outputs.tf
文件的 示例内容[13]。
main.tf
文件通常包含所有这些资源的集合,如数据源、S3 存储桶和存储桶策略、Amazon Bedrock 模型调用日志配置、SQS 队列配置、EC2 实例所需的 IAM 角色和策略、Elastic Agent 安装及日志流和 Amazon Bedrock Guardrail 配置。这里是我们的 main.tf
文件的 示例内容[14]。
一旦 main.tf
根据要求配置好,我们就可以初始化、规划并应用 terraform 配置。
terraform init // 初始化目录并在后端设置状态文件
terraform plan // 创建执行计划
terraform apply // 应用配置,即执行步骤
要销毁 terraform 之前创建的基础设施,可以使用 terraform destroy
命令。
一旦基础设施设置完成,必要的资源标识符将通过 outputs.tf
提供。我们可以通过以下步骤对创建的基础设施进行基本验证:
1. 验证通过 Terraform 创建的 S3 存储桶,可以使用 aws cli 命令参考 list-buckets — AWS CLI 1.34.10 Command Reference[15] 或通过 AWS 控制台导航进行验证。
2. 验证通过 Terraform 创建的 SQS 队列,可以使用 aws cli 命令参考 list-queues — AWS CLI 1.34.10 Command Reference[16] 或通过 AWS 控制台导航进行验证。
3. 验证通过 AWS 控制台创建的 EC2 实例,并通过 使用 EC2 实例连接 - Amazon Elastic Compute Cloud[17] 连接到 EC2 实例,并运行
aws s3 ls example-bucket-name
检查实例是否有权访问创建的 S3 存储桶。4. 验证通过 Terraform 创建的 Amazon Bedrock Guardrail,可以使用 Amazon Bedrock API ListGuardrails - Amazon Bedrock[18] 或通过 AWS 控制台导航进行验证。
设置 Elastic Agent 和集成设置
要在 AWS EC2 实例上安装 Elastic Agent 并配置 Amazon Bedrock 集成,请使用 Elastic Agent 策略 | Fleet 和 Elastic Agent 指南 [8.15][19] 中的引导步骤创建代理策略。然后通过 使用 EC2 实例连接 - Amazon Elastic Compute Cloud[20] 连接到基础设施设置步骤中创建的 EC2 实例,并使用 安装 Elastic Agents | Fleet 和 Elastic Agent 指南 [8.15][21] 中的引导步骤安装 Elastic Agent。在代理安装过程中,请记住选择在此设置过程开始时创建的代理策略,并根据创建的实例使用相关的代理安装方法。最后,确保代理配置正确,并且有来自代理的传入数据。
要在新创建的策略中配置 Amazon Bedrock 集成,请使用引导步骤添加 Amazon Bedrock 集成:将 Elastic Agent 集成添加到策略[22]。启用 Beta 集成以使用 Amazon Bedrock 集成,如下图所示。

使用 AWS 访问密钥配置集成,以访问配置了 Amazon Bedrock 的 AWS 账户。使用从 S3 存储桶收集日志,并指定在设置步骤中创建的存储桶 ARN。请注意,在设置过程中使用 S3 存储桶或 SQS 队列 URL 中的一个,不要同时使用两者。将此集成添加到配置了 EC2 实例的现有策略中。

验证 Amazon Bedrock 模型调用日志的摄取
Elastic Agent 和集成设置完成后,我们可以通过以下示例 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[23]。如果用户没有访问该模型的权限,可以按照 访问 Amazon Bedrock 基础模型[24] 的建议,从模型访问页面请求访问,或者我们可以选择将 API 调用更改为用户可以访问的任何现有模型。
成功执行上述 API 调用后,Amazon Bedrock 模型调用日志将被填充,并且在 Kibana 中 logs-aws_bedrock.invocation-default
应该被填充这些调用日志。我们可以使用以下简单的 ES|QL 查询返回最近摄取的事件。
from logs-aws_bedrock.invocation-* | LIMIT 10
启用预构建检测规则
要启用预构建检测规则,首先登录到 Elastic 实例,从左侧导航栏导航到 Security → Rules → Detection rules (SIEM)。从标签部分过滤“数据源:Amazon Bedrock”。
启用可用的预构建规则。对于预构建规则,设置信息包含设置 AWS Guardrails for Amazon Bedrock 的帮助指南,如果按照示例正确执行并且 terraform 具有 Amazon Bedrock Guardrail 配置,则在 使用 Terraform 设置 AWS 基础设施[25] 步骤中已完成。请注意,此设置对于某些规则生成警报至关重要 - 我们需要确保在基础设施设置阶段未跳过的情况下相应地设置防护栏。

探索高置信度不当行为检测
让我们模拟一个真实世界的场景,其中用户查询一个被 Amazon Bedrock 模型拒绝的话题。在 Amazon UI 控制台中导航到 Amazon Bedrock 部分,并使用左侧导航栏导航到防护栏子部分。在我们的设置说明期间创建的示例防护栏中,使用测试选项运行带有防护栏的模型调用并查询配置的被拒绝话题。

重复查询至少 6 次,因为预构建规则设计用于警报高于 5 的高置信度阻止。当警报计划运行时,我们可以看到 检测到异常高置信度不当行为阻止
的警报。

演示一个针对 Amazon Bedrock 的漏洞利用场景
要模拟一个 Amazon Bedrock 安全绕过,我们需要一个漏洞模拟脚本来与 Amazon Bedrock 模型交互。我们提供的漏洞脚本示例模拟以下攻击模式:
• 尝试多次连续请求使用被拒绝的模型资源
• 在 Amazon Bedrock 中生成多次连续的验证异常错误
• 用户持续生成高输入令牌数,提交大量请求,并接收大量响应,模仿资源耗尽的模式
• 结合反复的高置信度“阻止”操作,并伴随特定的违规代码,如“MISCONDUCT”,表明持续的滥用或尝试探测模型的伦理边界
class BedrockModelSimulator:
def __init__(self, profile_name, region_name):
# 创建一个 Boto3 会话客户端用于交互
def generate_args_invoke_model(self, model_id, user_message, tokens):
# 生成模型调用参数
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```python
try:
# 使用正确的调用参数调用模型
except ClientError as e:
# 错误信息
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 exhaustion>>"
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 攻击发现功能分析这些警报时,脚本会创建攻击链,显示各种警报之间的关系,使分析人员清楚地了解多个警报可能是更大攻击的一部分。

结论
将 Elastic 与 Amazon Bedrock 集成,使组织能够在最大限度地利用 AI 和机器学习的好处的同时,保持一个安全且合规的云环境。通过利用 Elastic 的先进安全和可观测性工具,企业可以主动检测威胁,自动生成合规报告,并深入了解其云操作。企业越来越依赖不透明的数据源和技术来揭示最严重的威胁——我们对透明安全的承诺在我们的开放工件、集成和源代码中得以体现。
引用链接
[1]
Amazon Bedrock: https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html[2]
安全信息和事件管理 (SIEM) 功能: https://www.elastic.co/security/siem[3]
预构建规则: https://www.elastic.co/guide/en/security/current/rules-ui-management.html[4]
文档: https://www.elastic.co/docs/current/integrations/aws_bedrock[5]
开始使用 Amazon Bedrock: https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started.html[6]
AWS 文档: https://www.elastic.co/docs/current/integrations/aws#requirements[7]
Terraform: https://www.terraform.io/[8]
这里: https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli[9]
示例内容: https://gist.github.com/shashank-elastic/290218cd4e787f65fbcbfd6423a0ca85#file-providers-tf[10]
配置和凭证文件设置 - AWS 命令行界面: https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html#cli-configure-files-format-profile[11]
AWS 文档: https://www.elastic.co/docs/current/integrations/aws#aws-credentials[12]
示例内容: https://gist.github.com/shashank-elastic/290218cd4e787f65fbcbfd6423a0ca85#file-variables-tf[13]
示例内容: https://gist.github.com/shashank-elastic/290218cd4e787f65fbcbfd6423a0ca85#file-outputs-tf[14]
示例内容: https://gist.github.com/shashank-elastic/290218cd4e787f65fbcbfd6423a0ca85#file-main-tf[15]
list-buckets — AWS CLI 1.34.10 Command Reference: https://docs.aws.amazon.com/cli/latest/reference/s3api/list-buckets.html[16]
list-queues — AWS CLI 1.34.10 Command Reference: https://docs.aws.amazon.com/cli/latest/reference/sqs/list-queues.html[17]
使用 EC2 实例连接 - Amazon Elastic Compute Cloud: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-connect-methods.html#ec2-instance-connect-connecting-console[18]
ListGuardrails - Amazon Bedrock: https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListGuardrails.html[19]
Elastic Agent 策略 | Fleet 和 Elastic Agent 指南 [8.15]: https://www.elastic.co/guide/en/fleet/current/agent-policy.html[20]
使用 EC2 实例连接 - Amazon Elastic Compute Cloud: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-connect-methods.html#ec2-instance-connect-connecting-console[21]
安装 Elastic Agents | Fleet 和 Elastic Agent 指南 [8.15]: https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html[22]
将 Elastic Agent 集成添加到策略: https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html[23]
Anthropic Claude Messages API - Amazon Bedrock: https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-messages.html[24]
访问 Amazon Bedrock 基础模型: https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html[25]
使用 Terraform 设置 AWS 基础设施: https://www.elastic.co/security-labs/[slug]?tab=t.0#bookmark=id.5wbf10usmxhz




