如何解决如何使用 boto3 从 IAM CreateRole 事件的 cloudtrail 事件中提取角色名称、策略
尝试创建 EventBridge 规则以从源“aws.iam”获取事件“CreateRole”。
来自 cloudtrail 的事件有一个包含 3 个元素的数组“resources”,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"
},"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'
)
我是否也可以在 EventBridge 规则中定义一个规则,以便发送的事件以用户指定的模式出现?
谢谢
解决方法
EventBridge 允许您根据事件和规则模式匹配数组。您可以看到参考 https://docs.aws.amazon.com/eventbridge/latest/userguide/arrays-in-eventbridge-event-patterns.html
例如,考虑一个包含以下内容的事件模式。
"resources": [
"arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f","arn:aws:ec2:us-east-1:111122223333:instance/i-b188560f","arn:aws:ec2:us-east-1:444455556666:instance/i-b188560f",]
此示例模式匹配包含以下文本的事件,因为模式数组中的第一项与事件数组中的第二项匹配。
"resources": [
"arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:eb56d16b-bbf0-401d-b893-d5978ed4a025:autoScalingGroupName/ASGTerminate","arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f"
]
EventBridge 不控制事件到达的顺序。如果您需要在阅读事件之前按特定顺序排列事件,则可能需要对其进行排序。
来自https://stackoverflow.com/a/57714526
>>> from operator import itemgetter
>>> arr = [{'score': 10,'name': 'Bob'},{'score': 15,'name':'Susan'},{'score': 1,'name': 'Skippy'}]
>>> sorted(arr,key=itemgetter('score'),reverse=True)
[{'score': 15,'name': 'Susan'},{'score': 10,'name': 'Skippy'}]
,
EventBridge 在“详细信息”块内发送事件。因此,要访问 roleName 的信息,请使用以下内容:
role_name = event['detail']['requestParameters']['roleName']
这确实有效。
如果您在 CloudTrail 中观看相同的事件也会令人困惑,它实际上显示了原始事件,而没有将其封装在“详细信息”对象中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。