尝试创建 EventBridge 规则以从源“aws.iam”获取事件“CreateRole”。
来自 cloudtrail 的事件有一个数组“资源”,其中包含 3 个元素:rolename、arn、account_id。他们有这样的模式:
"Resources": [
{
"ResourceType": "AWS::IAM::Role",
"ResourceName": "********gdggdgd***"
},
{
"ResourceType": "AWS::IAM::Role",
"ResourceName": "arn:aws:iam::<account_id>:role/sample-test-5"
},
{
"ResourceType": "AWS::IAM::Role",
"ResourceName": "sample-test-5"
}
]
但是这些元素的顺序是随机的,在某些事件中角色名称 - sample-test-5作为第一个元素出现,在某些事件中它出现在中间或最后。
现在在 lambda 内部,使用 json 提取角色名称,如下所示:
role_name = event['Resources'][0]['ResourceName']
以便使用role_name 可以获得boto3 的客户端。但由于数组中元素的随机顺序,在某些情况下无法获取正确的role_name,无法获取boto3客户端。
尝试使用 boto3 客户端直接获取角色名称,但这不可用。要获取角色,需要传递参数rolename:
response = client.get_role(
RoleName='string'
)
那么如何从具有随机 faishon 元素顺序的原始事件中获取角色名称。
我还可以在 EventBridge 规则中定义一个规则,以便发送的事件以用户指定的模式出现吗?
请分享任何指示或示例。
谢谢