amazon-web-services - 使用 Lambda 从 CloudTrail API 调用中提取信息
问题描述
我设置了一条 CloudWatch 规则,以在创建新 AWS 账户时触发 Lambda 函数。我正在使用来自 CloudTrail 的 API 调用和 EventName CreateAccountResult
。在 CloudTrail 日志中,它基本上为我提供了以下详细信息:
"serviceEventDetails": {
"createAccountStatus": {
"id": "string",
"state": "SUCCEEDED",
"accountName": "****",
"accountId": " *accountID* ",
"requestedTimestamp": "date/time",
"completedTimestamp": "date/time"
触发的 lambda 函数是用 Python 3.7 编写的,并使用此账户 ID 创建一个 AWS 连接器,连接到名为 Trend Micro Deep Security 的程序。目前,我手动获取此帐户 ID,将其与变量交换,然后运行脚本:
import http.client
import mimetypes
def lambda_handler(event,context):
account = ' *accountID* '
conn = http.client.HTTPSConnection("app.deepsecurity.trendmicro.com", 443)
payload = "{\n \"crossAccountRoleArn\": \"arn:aws:iam::" + account + ":role/*role*\",\n \"workspacesEnabled\": true\n}"
headers = {
'api-version': 'v1',
'Content-Type': 'application/json',
'api-secret-key': 'string'
}
conn.request("POST", "/api/awsconnectors", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
我希望能够做的是将一些代码写入 lambda 函数,该函数从触发 Lambda 函数的 CloudTrail 事件中提取账户 ID,并使用它来替换变量字符串以完成此脚本,本质上是自动化该过程。
有人知道实现这一目标的方法吗?
先感谢您!
编辑:我需要能够在实施之前对此进行测试,但我无法自由地创建帐户以进行反复试验。如果您还可以提供一种从现有 CloudTrail 日志中提取帐户 ID 的方法,以便我可以测试其功能,那将不胜感激。
我一直在测试使用 EC2 实例来提取实例 ID,但 AWS 帐户创建和 EC2 实例创建似乎相差太大而无法准确测试。
解决方案
多谢你们!
一直在修补这个答案以得出结论。看起来我们的触发器略有不同......
{
"detail": {
"eventSource": [
"organizations.amazonaws.com"
],
"eventName": [
"CreateAccountResult"
]
}
}
不过,我们还没有完全验证这一点,只是基于修改 EC2 实例以接受创建的帐户的测试。看起来 CloudTrail 日志的输出有点不同,但看起来键通常是相同的:
{
"eventVersion": "1.05",
"userIdentity": {
"accountId": "###",
"invokedBy": "AWS Internal"
},
"eventTime": "date/time",
"eventSource": "organizations.amazonaws.com",
"eventName": "CreateAccountResult",
"awsRegion": "us-east-1",
"sourceIPAddress": "AWS Internal",
"userAgent": "AWS Internal",
"requestParameters": null,
"responseElements": null,
"eventID": "###",
"readOnly": false,
"eventType": "AwsServiceEvent",
"recipientAccountId": "###",
"serviceEventDetails": {
"createAccountStatus": {
"id": " car-#### ",
"state": "SUCCEEDED",
"accountName": "****",
"accountId": " *accountID* ",
"requestedTimestamp": "date/time",
"completedTimestamp": "date/time"
}
}
}
推荐阅读
- sharepoint - azure adal 无法在 sharepoint 文档库中上传文件
- javascript - 为什么不通过 jquery 将布尔值分配给下拉列表?
- python - django:当 2 个字段具有相同值时过滤查询集
- angular - 我如何在打字稿中为 Angular 5 设置 zindex
- angular - 我什么时候应该在 Angular 2+ 中使用 TS 导入类型?
- amazon-web-services - 基于 S3 触发器更新 S3 上的文件
- sql-server - 使用 SQL 参数返回“参数类型错误”
- java - Antlr3 SQL语法中无法提供宿主变量
- windows - 使用 ExtendedSubCommandsKey(和 python _winreg)的 Windows 级联上下文菜单
- c++ - 我应该使用什么信号来终止/杀死 Windows 上的应用程序?