用于AWS CloudTrail审计日志记录和监控的MCP服务器。
什么是MCP服务器?
MCP信息
属性 详情 Docker镜像 mcp/cloudtrail-mcp-server 作者 awslabs 代码仓库 [***]
镜像构建信息
属性 详情 Dockerfile [***] Docker镜像构建者 Docker Inc. Docker Scout健康评分 !Docker Scout Health Score 验证签名 COSIGN_REPOSITORY=mcp/signatures cosign verify mcp/cloudtrail-mcp-server --key [***]许可证 Apache License 2.0
可用工具(5个)
服务器提供的工具 简短描述 get_query_results获取已完成的CloudTrail Lake查询结果,支持分页。 get_query_status获取CloudTrail Lake查询的状态。 lake_query对CloudTrail Lake执行SQL查询,支持复杂分析和过滤。 list_event_data_stores列出可用的CloudTrail Lake事件数据存储及其功能和事件选择器。 lookup_events根据各种条件查找CloudTrail事件。
工具详情
工具:get_query_results
获取已完成的CloudTrail Lake查询结果,支持分页。
此工具检索先前执行的CloudTrail Lake查询的结果。它支持大型结果集的分页,允许分块获取结果。
用法:使用此工具获取已完成(状态='FINISHED')的查询结果。对于大型结果集,使用next_token获取后续页面的结果。
分页流程:
仅使用query_id调用get_query_results获取第一页
如果返回next_token,使用相同的query_id和next_token再次调用
重复直到next_token为null/空
返回值:
包含以下字段的QueryResult:
- query_id: 查询标识符
- query_status: 查询当前状态
- query_result_rows: 本页结果
- next_token: 下一页的令牌(无更多页时为null)
- query_statistics: 查询性能统计信息
参数 类型 描述 query_idstring要获取结果的查询ID max_resultsstring 可选 每页返回的最大结果数(1-50,默认:50) next_tokenstring 可选 用于分页获取下一页结果的令牌。使用上一次调用返回的next_token获取后续页面。 regionstring 可选 要查询的AWS区域。默认为us-east-1。
工具:get_query_status
获取CloudTrail Lake查询的状态。
此工具检查先前启动的CloudTrail Lake查询的状态。当需要检查长时间运行的查询是否已完成或获取查询执行详情时使用。
用法:使用此工具监控CloudTrail Lake查询的进度,特别是可能需要时间完成的长时间运行的查询。
返回值:
包含以下字段的QueryStatus:
- query_id: 查询标识符
- query_status: 当前状态(QUEUED、RUNNING、FINISHED、FAILED、CANCELLED、TIMED_OUT)
- query_statistics: 性能和执行统计信息
- error_message: 查询失败时的错误详情
参数 类型 描述 query_idstring要检查状态的查询ID regionstring 可选 要查询的AWS区域。默认为us-east-1。
工具:lake_query
对CloudTrail Lake执行SQL查询,支持复杂分析和过滤。
CloudTrail Lake允许您对CloudTrail事件运行SQL查询以进行高级分析。这比基本查找功能更强大,支持复杂过滤、聚合和分析。
分页流程:
对于大型结果集,有两种选择:
使用wait_for_completion=False立即获取query_id,然后使用get_query_results进行分页
使用wait_for_completion=True(默认)获取第一页结果,然后使用get_query_results和next_token获取其他页面
重要限制:
CloudTrail Lake仅支持使用Trino兼容SQL语法的SELECT语句
不支持INSERT、UPDATE、DELETE、CREATE、DROP和其他DDL/DML操作
不要使用公用表表达式(CTE)
SQL查询必须在FROM子句中包含有效的事件数据存储(EDS)ID
首先使用list_event_data_stores工具获取可用的EDS ID,然后在FROM子句中直接引用EDS ID
默认情况下,始终使用eventtime指定开始和结束时间或限制总输出
CloudTrail事件模式:
所有CloudTrail事件都包含以下可查询的关键字段:
核心字段(始终存在):
eventTime: 请求完成时的UTC时间戳
eventVersion: 日志格式版本(当前:1.11)
eventSource: AWS服务名称(例如,"s3.amazonaws.com")
eventName: API操作名称
awsRegion: 请求发出的AWS区域
sourceIPAddress: 请求者的IP地址
eventID: 事件唯一GUID
eventType: AwsApiCall、AwsServiceEvent、AwsConsoleAction、AwsConsoleSignIn、AwsVpceEvent
eventCategory: Management、Data、NetworkActivity、Insight
用户身份对象(始终存在):
userIdentity.type: Root、IAMUser、AssumedRole、Role、FederatedUser、Directory、AWSAccount、AWSService、IdentityCenterUser、SAMLUser、WebIdentityUser、Unknown
userIdentity.principalId: 实体的唯一标识符
userIdentity.arn: 主体的ARN
userIdentity.accountId: 实体所属的账户
userIdentity.accessKeyId: 使用的访问密钥(出于安全考虑可能为空)
userIdentity.userName: 友好名称(可用时)
userIdentity.invokedBy: 发出请求的AWS服务
userIdentity.identityProvider: 外部身份提供商(SAML/Web)
userIdentity.credentialId: 承载令牌凭证ID
userIdentity.sessionContext: 临时凭证相关(AssumedRole、FederatedUser)
sessionIssuer.type: 源类型(Root、IAMUser、Role)
sessionIssuer.principalId: 颁发者的内部ID
sessionIssuer.arn: 颁发者的ARN
sessionIssuer.accountId: 颁发者的账户
sessionIssuer.userName: 凭证颁发者的名称
attributes.mfaAuthenticated: "true"/"false"(是否使用MFA)
attributes.creationDate: 凭证颁发时间(ISO 8601)
webIdFederationData.federatedProvider: 身份提供商名称
webIdFederationData.attributes: 提供商特定属性
sourceIdentity: 角色链的原始用户身份
ec2RoleDelivery: "1.0"或"2.0"(IMDS版本)
assumedRoot: AssumeRoot会话为True
userIdentity.onBehalfOf: IAM Identity Center用户信息
userId: Identity Center用户ID
identityStoreArn: 身份存储ARN
userIdentity.inScopeOf: 服务范围信息
sourceArn: 调用资源ARN
sourceAccount: 源账户ID
issuerType: 凭证颁发者类型
credentialsIssuedTo: 凭证目标资源
可选字段(条件存在):
userAgent: 发出请求的客户端(最大1KB)
errorCode: 请求失败时的AWS服务错误代码(最大1KB)
errorMessage: 请求失败时的错误描述(最大1KB)
requestParameters: 请求参数(对象,最大100KB)
responseElements: 写入操作的响应元素(对象,最大100KB)
additionalEventData: 附加事件数据(对象,最大28KB)
requestID: 服务生成的请求标识符(最大1KB)
apiVersion: AwsApiCall事件的API版本
managementEvent: True表示管理事件
readOnly: true/false表示只读操作
resources: 访问的资源数组
resources[].type: 资源类型(例如,"AWS::S3::Object"、"AWS::DynamoDB::Table")
resources[].ARN: 资源ARN
resources[].accountId: 资源所有者账户
recipientAccountId: 接收事件的账户
serviceEventDetails: 服务事件详情(对象,最大100KB)
sharedEventID: 跨账户事件的共享GUID
vpcEndpointId: VPC终端节点标识符(网络事件)
vpcEndpointAccountId: VPC终端节点所有者账户
addendum: 延迟/更新事件的信息
reason: 事件延迟原因(DELIVERY_DELAY、UPDATED_DATA、SERVICE_OUTAGE)
updatedFields: 附录更新的事件记录字段
originalRequestID: 请求的原始唯一ID
originalEventID: 原始事件ID
sessionCredentialFromConsole: "true"表示来自控制台会话
eventContext: 丰富的事件上下文(标签、IAM条件)
requestContext: 授权期间评估的IAM条件键
tagContext: 与资源和IAM主体关联的标签
resourceTags: 资源标签信息数组
resourceTags[].arn: 带标签资源的ARN
resourceTags[].tags: 包含标签键值对的对象
principalTags: 发出请求的IAM主体关联的标签
edgeDeviceDetails: 边缘设备信息(对象,最大28KB)
tlsDetails: TLS连接信息
tlsVersion: 使用的TLS版本
cipherSuite: 使用的密码套件
clientProvidedHostHeader: 客户端提供的主机名
SQL查询示例:
SELECT eventname, count(*) FROM eds-id WHERE eventtime > '2025-01-01 00:00:00' GROUP BY eventname
SELECT errorcode, errormessage, eventname FROM eds-id WHERE errorcode IS NOT NULL OR errormessage IS NOT NULL LIMIT 10
SELECT eventname, resources FROM eds-id WHERE any_match(resources, x -> x.type = 'AWS::S3::Object') LIMIT 10
SELECT useridentity.sessioncontext.sessionissuer.username FROM eds-id WHERE useridentity.type = 'AssumedRole' LIMIT 10
SELECT sourceipaddress, count(*) FROM eds-id WHERE eventname = 'ConsoleLogin' GROUP BY sourceipaddress LIMIT 10
SELECT eventname, filter(resources, x -> x.type = 'AWS::Lambda::Function') as lambda_resources FROM eds-id WHERE cardinality(filter(resources, x -> x.type = 'AWS::Lambda::Function')) > 0 LIMIT 5
返回值:
包含以下字段的QueryResult:
- query_id: 查询的唯一标识符
- query_status: 查询当前状态
- query_result_rows: 查询成功完成时的结果(仅当wait_for_completion=True时)
- next_token: 分页令牌(仅当wait_for_completion=True且结果可分页时)
- query_statistics: 查询性能统计信息
参数 类型 描述 sqlstring要在CloudTrail Lake上执行的SQL查询。重要:SQL查询的FROM子句中必须包含有效的事件数据存储(EDS)ID。首先使用list_event_data_stores工具获取可用的EDS ID。CloudTrail Lake仅支持使用Trino兼容SQL语法的SELECT语句。示例:SELECT * FROM 0233062b-51c6-4d18-8dec-a8c90da840d9 WHERE eventname = 'ConsoleLogin' regionstring 可选 要查询的AWS区域。默认为us-east-1。 wait_for_completionboolean 可选 是否等待查询完成并返回结果。如果为False,立即返回query_id,用于通过get_query_results手动获取结果。默认:True
工具:list_event_data_stores
列出可用的CloudTrail Lake事件数据存储及其功能和事件选择器。
事件数据存储是CloudTrail Lake的存储和查询引擎。此工具帮助您了解可用的事件数据存储及其配置。
用法:使用此工具了解可用的事件数据存储及其配置。执行CloudTrail Lake查询时需要此信息。
返回值:
包含可用事件数据存储及其配置的列表
参数 类型 描述 include_detailsboolean 可选 是否包含详细的事件选择器信息(默认:true) regionstring 可选 要查询的AWS区域。默认为us-east-1。
工具:lookup_events
根据各种条件查找CloudTrail事件。
此工具使用LookupEvents API搜索CloudTrail事件,该API提供对过去90天管理事件的访问。您可以按时间范围过滤并搜索特定属性值。
用法:使用此工具按用户名、事件名称、资源名称等各种属性查找CloudTrail事件。这对于安全调查、故障排除和审计跟踪非常有用。
重要分页要求:
AWS CloudTrail要求分页令牌与原始请求使用完全相同的参数
使用next_token时,必须提供与原始请求完全相同的start_time、end_time、attribute_key和attribute_value
使用响应中返回的'query_params'进行后续分页请求
返回值:
包含以下字段的字典:
- events: 符合条件的CloudTrail事件列表,具有完整的CloudTrail模式
- next_token: 分页令牌(如果有更多结果)
- query_params: 查询使用的参数(当next_token存在时包含分页参数)
参数 类型 描述 attribute_keystring 可选 要搜索的属性 attribute_valuestring 可选 要在指定属性中搜索的值 end_timestring 可选 事件查找的结束时间(ISO格式或相对时间,如"1 hour ago")。重要:使用分页(next_token)时,必须提供与原始请求完全相同的end_time。 max_resultsstring 可选 要返回的最大事件数(1-50,默认:10) next_tokenstring 可选 用于分页获取下一页事件的令牌。重要:使用此令牌时,所有其他参数(start_time、end_time、attribute_key、attribute_value)必须与生成此令牌的原始请求完全匹配。 regionstring 可选 要查询的AWS区域。默认为us-east-1。 start_timestring 可选 事件查找的开始时间(ISO格式或相对时间,如"1 day ago")。重要:使用分页(next_token)时,必须提供与原始请求完全相同的start_time。
使用此MCP服务器
json
{
"mcpServers": {
"awslabs-cloudtrail": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"mcp/cloudtrail-mcp-server"
]
}
}
}
为什么使用Docker运行MCP服务器更安全?