Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用boto3从IAM CreateRole事件的cloudtrail事件中提取rolename、策略_Python 3.x_Aws Lambda_Boto3_Amazon Iam_Aws Event Bridge - Fatal编程技术网

Python 3.x 如何使用boto3从IAM CreateRole事件的cloudtrail事件中提取rolename、策略

Python 3.x 如何使用boto3从IAM CreateRole事件的cloudtrail事件中提取rolename、策略,python-3.x,aws-lambda,boto3,amazon-iam,aws-event-bridge,Python 3.x,Aws Lambda,Boto3,Amazon Iam,Aws Event Bridge,正在尝试创建EventBridge规则以从源“aws.iam”获取事件“CreateRole” 来自cloudtrail的事件具有一个包含3个元素的数组“资源”,即rolename、arn、account_id。它们的模式如下: "Resources": [ { "ResourceType": "AWS::IAM::Role",

正在尝试创建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"
                }
            ]
因此,使用role_name可以为bot3获取一个客户端。但由于数组中元素的随机顺序,在某些情况下无法获取正确的角色名称,并且无法获取boto3客户端

尝试使用boto3客户端直接获取角色名,但不可用。要获取角色,需要传递参数rolename:

response = client.get_role(
    RoleName='string'
)
那么,我如何从具有随机faishon元素顺序的原始事件中获取角色名呢

我还可以在EventBridge规则中定义一个规则,以便发送的事件以用户指定的模式出现吗

请分享任何提示或例子


感谢

EventBridge允许您根据事件和规则模式与数组进行匹配。你可以看到一个参考资料

例如,考虑一个包含以下内容的事件模式:

  "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不控制事件到达的顺序。如果需要在读取事件之前将事件按特定顺序排列,则可能需要对其进行排序


EventBridge在“详细信息”块内发送事件。因此,要访问roleName的信息,请使用以下方法:

role_name = event['detail']['requestParameters']['roleName']
这确实奏效了


此外,如果您在CloudTrail中观看相同的事件,这会让人感到困惑,因为CloudTrail实际上显示了原始事件,而没有将其封装在“detail”对象中。

您定义“正确的角色名称”的标准是什么?如何区分“正确”的角色和其他角色?实际上,CreateRole被封装在EventBridge返回的另一个对象中。这就是为什么我做得不对。
>>> 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': 'Bob'}, {'score': 1, 'name': 'Skippy'}]
role_name = event['detail']['requestParameters']['roleName']