Guest User

Untitled

a guest
Dec 12th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.54 KB | None | 0 0
  1. import boto3
  2. import sys
  3. import fileinput
  4.  
  5. client = boto3.client('waf')
  6.  
  7. app_name = sys.argv[1]
  8. acl_action = sys.argv[2]
  9. rule_action = sys.argv[3]
  10. ip_set = ''
  11. rule = ''
  12. acl = ''
  13.  
  14.  
  15. def get_token():
  16. return client.get_change_token()['ChangeToken']
  17.  
  18.  
  19. def create_ip_set(app):
  20. return client.create_ip_set(
  21. Name=app + '-WAF-WitheList-IPs',
  22. ChangeToken=get_token()
  23. )
  24.  
  25.  
  26. def update_ip_set(ip_set_id):
  27. return client.update_ip_set(
  28. IPSetId=ip_set_id,
  29. ChangeToken=get_token(),
  30. Updates=[
  31. {
  32. 'Action': 'INSERT',
  33. 'IPSetDescriptor': {
  34. 'Type': 'IPV4',
  35. 'Value': '200.46.145.2/32'
  36. }
  37. },
  38. ]
  39. )
  40.  
  41.  
  42. def create_rule(app):
  43. return client.create_rule(
  44. Name=app + '-WAF-WitheList-Rule',
  45. MetricName=app + 'WAFWitheListRuleMetric',
  46. ChangeToken=get_token()
  47. )
  48.  
  49.  
  50. def update_rule(rule_id, ip_set_id):
  51. return client.update_rule(
  52. RuleId=rule_id,
  53. ChangeToken=get_token(),
  54. Updates=[
  55. {
  56. 'Action': 'INSERT',
  57. 'Predicate': {
  58. 'Negated': False,
  59. 'Type': 'IPMatch',
  60. 'DataId': ip_set_id
  61. }
  62. },
  63. ]
  64. )
  65.  
  66.  
  67. def create_acl(app, action):
  68. return client.create_web_acl(
  69. Name=app + '-WAF-WitheList-ACL',
  70. MetricName=app + 'WAFWitheListACLMetric',
  71. DefaultAction={
  72. 'Type': action
  73. },
  74. ChangeToken=get_token()
  75. )
  76.  
  77.  
  78. def update_acl(rule_id, acl_id, acl_act, rule_act):
  79. return client.update_web_acl(
  80. WebACLId=acl_id,
  81. ChangeToken=get_token(),
  82. Updates=[
  83. {
  84. 'Action': 'INSERT',
  85. 'ActivatedRule': {
  86. 'Priority': 1,
  87. 'RuleId': rule_id,
  88. 'Action': {
  89. 'Type': rule_act
  90. }
  91. }
  92. },
  93. ],
  94. DefaultAction={
  95. 'Type': acl_act
  96. }
  97. )
  98.  
  99.  
  100. def replace_acl_id(acl_id):
  101. with fileinput.FileInput('parameters.json', inplace=True) as file:
  102. for line in file:
  103. print(line.replace('ACL_ID_REPLACE', acl_id), end='')
  104.  
  105.  
  106. ip_sets_list = client.list_ip_sets(
  107. Limit=100
  108. )
  109.  
  110. for i in ip_sets_list['IPSets']:
  111. if i['Name'] == app_name + '-WAF-WitheList-IPs':
  112. ip_set = i
  113.  
  114. if not ip_set:
  115. print('IPSet Not found, creating')
  116. ip_set = create_ip_set(app_name)['IPSet']
  117. update_ip_set(ip_set['IPSetId'])
  118. else:
  119. print('Updating IPSet')
  120. update_ip_set(ip_set['IPSetId'])
  121.  
  122. rules_list = client.list_rules(
  123. Limit=100
  124. )
  125.  
  126. for i in rules_list['Rules']:
  127. if i['Name'] == app_name + '-WAF-WitheList-Rule':
  128. rule = i
  129.  
  130. if not rule:
  131. print('Rule Not found, creating')
  132. rule = create_rule(app_name)['Rule']
  133. update_rule(rule['RuleId'], ip_set['IPSetId'])
  134. else:
  135. print('Updating Rule')
  136. update_rule(rule['RuleId'], ip_set['IPSetId'])
  137.  
  138. acls_list = client.list_web_acls(
  139. Limit=100
  140. )
  141.  
  142. for i in acls_list['WebACLs']:
  143. if i['Name'] == app_name + '-WAF-WitheList-ACL':
  144. acl = i
  145.  
  146. if not acl:
  147. print('WebACL Not found, creating')
  148. acl = create_acl(app_name, 'ALLOW')['WebACL']
  149. print('ACL ID: ' + acl['WebACLId'])
  150. update_acl(rule['RuleId'], ip_set['IPSetId'], acl['WebACLId'], acl_action, rule_action)
  151. else:
  152. print('Updating WebACL')
  153. print('ACL ID: ' + acl['WebACLId'])
  154. update_acl(rule['RuleId'], acl['WebACLId'], acl_action, rule_action)
  155. replace_acl_id(acl['WebACLId'])
Add Comment
Please, Sign In to add comment