Skip to content

Commit 538983e

Browse files
committed
feat: Process sqs:CreateQueue event
1 parent 20434e6 commit 538983e

3 files changed

Lines changed: 115 additions & 1 deletion

File tree

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import boto3
2+
3+
from .common import *
4+
5+
sqs = boto3.client('sqs')
6+
7+
8+
def process_event(event: dict, set_tag: bool = False) -> dict:
9+
""" Process CloudTrail event for SQS """
10+
11+
result = dict()
12+
13+
if event['eventName'] == 'CreateQueue':
14+
result['resource_id'] = _process_create_queue(event, set_tag)
15+
else:
16+
message = f"Cannot process event: {event['eventName']}, eventID: {event['eventID']}"
17+
result['error'] = message
18+
19+
return result
20+
21+
22+
def _process_create_queue(event: dict, set_tag: bool = False) -> list:
23+
""" Process CreateQueue event """
24+
25+
if set_tag is True:
26+
if 'tags' not in event['requestParameters'] or \
27+
check_contain_mandatory_tag_dict(event['requestParameters']['tags']) is False:
28+
sqs.tag_queue(
29+
QueueUrl=event['responseElements']['queueUrl'],
30+
Tags={
31+
'User': get_user_identity(event)
32+
}
33+
)
34+
35+
return [event['requestParameters']['queueName']]
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
{
2+
"eventVersion": "1.11",
3+
"userIdentity": {
4+
"type": "IAMUser",
5+
"principalId": "YOUR_PRINCIPAL_ID",
6+
"arn": "arn:aws:iam::000000000000:user/test_user",
7+
"accountId": "000000000000",
8+
"accessKeyId": "YOUR_ACCESS_KEY_ID",
9+
"userName": "test_user",
10+
"sessionContext": {
11+
"attributes": {
12+
"creationDate": "2025-09-05T02:33:23Z",
13+
"mfaAuthenticated": "true"
14+
}
15+
}
16+
},
17+
"eventTime": "2025-09-05T10:43:21Z",
18+
"eventSource": "sqs.amazonaws.com",
19+
"eventName": "CreateQueue",
20+
"awsRegion": "ap-northeast-2",
21+
"sourceIPAddress": "127.0.0.1",
22+
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36",
23+
"requestParameters": {
24+
"queueName": "test-queue",
25+
"attributes": {
26+
"Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__owner_statement\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"000000000000\"},\"Action\":[\"SQS:*\"],\"Resource\":\"arn:aws:sqs:ap-northeast-2:000000000000:test-queue\"}]}",
27+
"ReceiveMessageWaitTimeSeconds": "0",
28+
"SqsManagedSseEnabled": "true",
29+
"DelaySeconds": "0",
30+
"KmsMasterKeyId": "",
31+
"RedrivePolicy": "",
32+
"MessageRetentionPeriod": "345600",
33+
"MaximumMessageSize": "1048576",
34+
"VisibilityTimeout": "30",
35+
"RedriveAllowPolicy": ""
36+
},
37+
"tags": {
38+
"TestKey": "TestValue"
39+
}
40+
},
41+
"responseElements": {
42+
"queueUrl": "https://sqs.ap-northeast-2.amazonaws.com/000000000000/test-queue"
43+
},
44+
"requestID": "ded62e37-7691-5699-bb20-4f03b7984293",
45+
"eventID": "b5a8ec24-29c1-4ebd-8dbb-3e328e66818f",
46+
"readOnly": false,
47+
"resources": [
48+
{
49+
"accountId": "000000000000",
50+
"type": "AWS::SQS::Queue",
51+
"ARN": "arn:aws:sqs:ap-northeast-2:000000000000:test-queue"
52+
}
53+
],
54+
"eventType": "AwsApiCall",
55+
"managementEvent": true,
56+
"recipientAccountId": "000000000000",
57+
"eventCategory": "Management",
58+
"tlsDetails": {
59+
"tlsVersion": "TLSv1.3",
60+
"cipherSuite": "TLS_AES_128_GCM_SHA256",
61+
"clientProvidedHostHeader": "sqs.ap-northeast-2.amazonaws.com"
62+
},
63+
"sessionCredentialFromConsole": "true"
64+
}

test/services/test_services.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,4 +413,19 @@ def test_create_repository(self):
413413
self.assertEqual(result['region'], 'ap-northeast-2')
414414
self.assertEqual(result['event_name'], 'CreateRepository')
415415
self.assertEqual(result['source_ip_address'], '127.0.0.1')
416-
self.assertEqual(result['event_source'], 'ecr')
416+
self.assertEqual(result['event_source'], 'ecr')
417+
418+
419+
class SQSTest(unittest.TestCase):
420+
def test_create_queue(self):
421+
with open('./samples/sqs_CreateQueue.json') as f:
422+
data = json.loads(f.read())
423+
424+
result = build_result(data)
425+
426+
self.assertEqual(result['resource_id'], ['test-queue'])
427+
self.assertEqual(result['identity'], 'user/test_user')
428+
self.assertEqual(result['region'], 'ap-northeast-2')
429+
self.assertEqual(result['event_name'], 'CreateQueue')
430+
self.assertEqual(result['source_ip_address'], '127.0.0.1')
431+
self.assertEqual(result['event_source'], 'sqs')

0 commit comments

Comments
 (0)