Forum Discussion
Automate ASM "Ready to Be Enforced" Attack Signatures
- Feb 07, 2023
In case anyone is still looking for a way to do this, I created a Big-IQ script that can be pushed to your ASM devices. Here's what it does:
- It checks the HA status, and exits the script if the HA status is Standby
 - It uses iControl REST to create a file that lists the policy hashes for each of your ASM policies
 - It uses a bash for loop to loop through each of your ASM policy hashes, and Enforces Ready Signatures for each policy, and apply each policy
 
This is a plug-n-play script, so you shouldn't need to modify it at all. I've used it on v15.1.5 and v15.1.8.
------------------------------------------------------------------------------------------------------------------------
# Determines HA Status, creates variable, then loops through it on Active devices
bash
cd /var/tmp/# Static Variables
CREDS=admin# Writes HA Status to a file
tmsh show /cm failover-status | grep Status > /var/tmp/ha-status.txt
chmod 755 /var/tmp/ha-status.txt# Exits script if the HA Status file contains the string STANDBY
if grep -q STANDBY /var/tmp/ha-status.txt; then
exit
fi# Creates variable with list of policy hashes, then prints variable contents to txt file (excluding parent and default policies)
FILENAME=$(curl -kvu $CREDS http://localhost/mgmt/tm/asm/policies | jq -r '.items[]
printf "$FILENAME\n" > /var/tmp/policy-hashes.txtFILENAME="policy-hashes.txt"
LINES=$(cat $FILENAME)# ASM - Enforces Ready Entities and Applies Policies - All Policies
for LINE in $LINES
do
curl -kvu $CREDS -X PATCH "https://localhost/mgmt/tm/asm/policies/$LINE/signatures?\$select=&\$filter=hasSuggestions+eq+false+AND+wasUpdatedWithinEnforcementReadinessPeriod+eq+false+and+performStaging+eq+true" -u $CREDS -k -v -H "Content-Type: application/json" -d '{"performStaging":false}' | jq .
LINK=\"https://localhost/mgmt/tm/asm/policies/$LINE\"
curl -kvu $CREDS POST https://localhost/mgmt/tm/asm/tasks/apply-policy -k -v -H "Content-Type: application/json" -d "{\"policyReference\": {\"link\": $LINK }}" | jq .
sleep 10s
done------------------------------------------------------------------------------------------------------------------------
If you want to exclude specific policies, such as a Parent or Template policy, you can change the line where the FILENAME variable is created to exclude those policies like this:
FILENAME=$(curl -kvu $CREDS http://localhost/mgmt/tm/asm/policies | jq -r '.items[] | select(.name!="asm_parent") | select(.name!="asm_template") | .id')
 
Hello,
If you use 
https://localhost/mgmt/tm/asm/policies/[policy-id]/signatures?\$filter=hasSuggestions+eq+false+AND+wasUpdatedWithinEnforcementReadinessPeriod+eq+true&\$top=1 
You will see the first signature result showed as something like :
   {
      "hasSuggestions": false,
      "isInherited": true,
      "lastUpdateMicros": 1.738315306e+15,
      "kind": "tm:asm:policies:signatures:signaturestate",
      "selfLink": "https://localhost/mgmt/tm/asm/policies/3QzapERGGfTUVBI6Hxs-qg/signatures/amSV16c_VltvPV2ipzycCw?ver\u003d17.1.2",
      "signatureReference": {
        "link": "https://localhost/mgmt/tm/asm/signatures/iSs1nGK_jlGi14pryZi0qA?ver\u003d17.1.2",
        "isUserDefined": false,
        "name": "Unicode Fullwidth ASCII variant",
        "signatureId": 299999999
      },
      "wasUpdatedWithinEnforcementReadinessPeriod": true,
      "isPriorRuleEnforced": false,
      "performStaging": false,
      "id": "amSV16c_VltvPV2ipzycCw",
      "alarm": true,
      "block": true,
      "enabled": true,
      "learn": true
    }
That show the items "hasSuggestions" and "wasUpdatedWithinEnforcementReadinessPeriod" and their value .
Thank you i just found out this morning myself also how the $filter is working exactly.
I did the exact same thing your telling and got it working in my ansible task now (something i forgot the mention)
- name: reporting_attack_signatures | Get Attack Signatures that are Ready to be Enforced
  ansible.builtin.uri:
    url: >
      https://{{ inventory_hostname }}/mgmt/tm/asm/policies/{{ list_policy_asm_item.id }}/signatures/
      ?$filter=hasSuggestions+eq+false+AND+wasUpdatedWithinEnforcementReadinessPeriod+eq+false
    method: GET
    user: "{{ ansible_user }}"
    password: "{{ ansible_password }}"
    force_basic_auth: true
    status_code: 200
  register: results_policy_signatures
  delegate_to: localhost
  loop: "{{ list_policy_asm }}"
  loop_control:
    loop_var: list_policy_asm_item
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com