Code Monkey home page Code Monkey logo

trustedasmpolicies's Introduction

TrustedASMPolicies

**iControlLX extension to export ASM policies from and import onto trusted devices

The process of exporting ASM policies from BIG-IPs where they are authored and then importing them on enforcement devices has multiple steps and is complex. This extension provides a simplified user experience for querying, exporting, importing, and deleting ASM policies on trusted devices.

Building the Extension

The repository includes the ability to simply run

npm run-script build

in the repository root folder. In order for this run-script to work, you will need to be on a linux workstation with the rpmbuild utility installed.

Alternatively rpm builds can be downloaded from the releases tab on github.

Installing the Extension

The installation instructions for iControlLX rpm packages are found here:

Installing iControlLX Extensions

This extension has been tested on TMOS version 13.1.1 and the API Service Gateway container.

General Control Parameters

This extension extends the iControl REST URI namespace at:

/mgmt/shared/TrustedASMPolicies

There are three main operations available.

GET Requests

GET requests follow the common TrustedDevice syntax and take the following parameters:

Parameter Value
targetHost The trusted device host or if not supplied the local device.
targetUUID The trusted device UUID or if not supplied the local device.
policyName The name of the ASM policy you want to query.
policyUUID The UUID of the ASM policy you want to query.

You can supply targetHost or targetUUID. If you supply targetUUID the targetHost and targetPort will be resolved for you.

In addition you can specify the targetUUID as a path parameter to keep the user experience the same as the TrustProxy extension.

/mgmt/shared/TrustedASMPolicies/7390b3b8-7682-4554-83e5-764e4f26703c

If supplied as a path variable, the targetUUD does not need to send as a query variable.

The policyName query variable is optional and will filter the results to the first policy with name starting with the supplied policyName value.

The policyUUID query variable is optional and will filter the results to the policy with UUID matching the supplied policyUUID value.

In addition ou can specify the policyUUID as a path variable after the targetUUID in the path.

/mgmt/shared/TrustedASMPolicies/7390b3b8-7682-4554-83e5-764e4f26703c/DkhEogaI2u5fwK_kKo5Ctw

Query for all ASM policies on a trusted Device

GET https://172.13.1.103/mgmt/shared/TrustedASMPolicies?targetHost=172.13.1.106

Response

[
    {
        "id": "DkhEogaI2u5fwK_kKo5Ctw",
        "name": "linux-high",
        "enforcementMode": "blocking",
        "lastChanged": "2018-12-26T16:55:52Z",
        "lastChange:": "Security Policy /Common/linux-high [update]: Enforcement Mode was set to Blocking. { audit: policy = /Common/linux-high, username = admin, client IP = 192.168.0.65 }",
        "state": "AVAILABLE",
        "path": "/Common/linux-high"
    },
    {
        "id": "HjoMjahFu2fw2_hft6toj",
        "name": "linux-medium",
        "enforcementMode": "blocking",
        "lastChanged": "2018-12-26T16:55:52Z",
        "lastChange:": "Security Policy /Common/linux-medium [update]: Enforcement Mode was set to Blocking. { audit: policy = /Common/linux-medium, username = admin, client IP = 192.168.0.65 }",
        "state": "AVAILABLE",
        "path": "/Common/linux-medium"
    }
]
GET https://172.13.1.103/mgmt/shared/TrustedASMPolicies/8c79ab99-fa76-4e6e-a03a-5610620e4fee

Response

[
    {
        "id": "DkhEogaI2u5fwK_kKo5Ctw",
        "name": "linux-high",
        "enforcementMode": "blocking",
        "lastChanged": "2018-12-26T16:55:52Z",
        "lastChange:": "Security Policy /Common/linux-high [update]: Enforcement Mode was set to Blocking. { audit: policy = /Common/linux-high, username = admin, client IP = 192.168.0.65 }",
        "state": "AVAILABLE",
        "path": "/Common/linux-high"
    },
    {
        "id": "HjoMjahFu2fw2_hft6toj",
        "name": "linux-medium",
        "enforcementMode": "blocking",
        "lastChanged": "2018-12-26T16:55:52Z",
        "lastChange:": "Security Policy /Common/linux-medium [update]: Enforcement Mode was set to Blocking. { audit: policy = /Common/linux-medium, username = admin, client IP = 192.168.0.65 }",
        "state": "AVAILABLE",
        "path": "/Common/linux-medium"
    }
]

Query for an ASM by name or id on a trusted device

GET https://172.13.1.103/mgmt/shared/TrustedASMPolicies?targetHost=172.13.1.106&policyName=linux-high

Response

{
    "id": "DkhEogaI2u5fwK_kKo5Ctw",
    "name": "linux-high",
    "enforcementMode": "blocking",
    "lastChanged": "2018-12-26T16:55:52Z",
    "lastChange:": "Security Policy /Common/linux-high [update]: Enforcement Mode was set to Blocking. { audit: policy = /Common/linux-high, username = admin, client IP = 192.168.0.65 }",
    "state": "AVAILABLE",
    "path": "/Common/linux-high"
}
GET https://172.13.1.103/mgmt/shared/TrustedASMPolicies/8c79ab99-fa76-4e6e-a03a-5610620e4fee/DkhEogaI2u5fwK_kKo5Ctw

Response

{
    "id": "DkhEogaI2u5fwK_kKo5Ctw",
    "name": "linux-high",
    "enforcementMode": "blocking",
    "lastChanged": "2018-12-26T16:55:52Z",
    "lastChange:": "Security Policy /Common/linux-high [update]: Enforcement Mode was set to Blocking. { audit: policy = /Common/linux-high, username = admin, client IP = 192.168.0.65 }",
    "state": "AVAILABLE",
    "path": "/Common/linux-high"
}

Retrieving an ASM XLM policy file from a trsuted source device

The GET method can also be used to retrieve an exported ASM policy as an XML file. To retrieve the exported ASM policy as an XML file you must supply the following variables:

Parameter Value
sourceHost The trusted device host to export the ASM policy.
sourceUUID The trusted device UUID to export the ASM policy.
policyId The ID of the ASM policy you want to delete from the target host.
policyName The name of the ASM policy you want to delete from the target host.

You can supply either the sourceHost or sourceUUID.

You can supply either the policyId or policyName.

You MUST not supply a targetHost or targetUUID, as these will trigger a query for ASM policies on a device.

GET https://172.13.1.103/mgmt/shared/TrustedASMPolicies?sourceHost=172.13.1.106&policyName=linux-high
GET https://172.13.1.103/mgmt/shared/TrustedASMPolicies?sourceUUID=8c79ab99-fa76-4e6e-a03a-5610620e4fee&policyId=DkhEogaI2u5fwK_kKo5Ctw

DELETE Requests

DELETE requests follow the common TrustedDevice syntax and take the following parameters:

Parameter Value
targetHost The trusted device host or if not supplied the local device.
targetUUID The trusted device UUID or if not supplied the local device.
policyId The ID of the ASM policy you want to delete from the target host.
policyName The name of the ASM policy you want to delete from the target host.
async Set to 'true' and to enable async mode where a response with a taskId is returned immediately.
taskId 'policyId' must be set with 'taskId' set to the async taskId returned from an async DELETE. It will return the status of the DELETE process without further processing.

You can supply targetHost or targetUUID. If you supply targetUUID the targetHost and targetPort will be resolved for you.

In addition you can specify the targetUUID as a path parameter to keep the user experience the same as the TrustProxy extension.

/mgmt/shared/TrustedASMPolicies/7390b3b8-7682-4554-83e5-764e4f26703c

If supplied as a path variable, the targetUUD does not need to send as a query variable.

You can supply either the policyId or the policyName query variable, but you must supply at least one fo these to specify policy to delete on the target device.

DELETE https://172.13.1.103/mgmt/shared/TrustedASMPolicies/8c79ab99-fa76-4e6e-a03a-5610620e4fee?policyId=DkhEogaI2u5fwK_kKo5Ctw

Response

{}

Additionally, in keeping with the TrustedProxy model, policies can also be deleted using only the URI path variables for both the trusted device UUID and the policy ID.

DELETE https://172.13.1.103/mgmt/shared/TrustedASMPolicies/8c79ab99-fa76-4e6e-a03a-5610620e4fee/DkhEogaI2u5fwK_kKo5Ctw

Of course, policies can be deleted using targetHost IP address and policyName query variables.

DELETE https://172.13.1.103/mgmt/shared/TrustedASMPolicies?targetHost=172.13.1.106&policyName=linux-high

Response

{}

DELETE https://172.13.1.103/mgmt/shared/TrustedASMPolicies?targetHost=172.13.1.106&policyName=linux-high&async=true

Response

{
    "id": "DkhEogaI2u5fwK_kKo5Ctw",
    "targetHost": "172.13.1.103",
    "targetPort": 443,
    "state": "DELETING",
    "taskId": "ac233d2b-f512-4ce2-b54d-b0c0074faf40"
}

POST Requests

POST requests import ASM policies on a target trusted device. The source of the policy can either be exported from a different trusted device, or can be downloaded from a non-BIG-IP URL.

Exporting from a BIG-IP device

The source policy to be exported from a trusted device is specified us the following parameters:

Parameter Value
sourceHost The trusted device which currently has the policy to export.
sourceUUID The trusted device UUID which currently has the policy to export.
policyId The ID of the ASM policy you want to export from a source trusted device.
policyName The name of the ASM policy you want to export from the source trusted device.

You can specify either the sourceHost or the sourceUUID to identify the source trusted device.

You can specify either the policyId or the policyName to identify the ASM policy to export.

The target device to import the policy is specified using the following parameters:

Parameter Value
targetHost The trusted device host or if not supplied the local device.
targetHosts List of trusted device hosts to import the source policy.
targetUUID The trusted device UUID or if not supplied the local device.
targetUUIDs List of trusted device UUIDs to import the source policy.
targetPolicyName Required name for the policy on the target device.

These variables can be defined as either query variables or part of the POST body.

POST https://172.13.1.103/mgmt/shared/TrustedASMPolicies?sourceHost=172.13.1.101&targetHost=172.13.1.106&policyName=linux-high&targetPolicyName=imported-linux-high
POST https://172.13.1.103/mgmt/shared/TrustedASMPolicies?sourceHost=172.13.1.101&targetHosts=172.13.1.106,172.13.1.107,172.13.1.108&policyName=linux-high&targetPolicyName=imported-linux-high
POST https://172.13.1.103/mgmt/shared/TrustedASMPolicies

{
    "sourceHost": "172.13.1.101",
    "targetHost": "172.13.1.106",
    "policyName": "linux-high",
    "targetPolicyName": "imported-linux-high"
}
POST https://172.13.1.103/mgmt/shared/TrustedASMPolicies

{
    "sourceUUID": "b80652cb-20bd-4e81-a6a6-c306fd643af7",
    "targetUUID": "8c79ab99-fa76-4e6e-a03a-5610620e4fee",
    "policyId": "DkhEogaI2u5fwK_kKo5Ctw",
    "targetPolicyName": "imported-linux-high"
}
POST https://172.13.1.103/mgmt/shared/TrustedASMPolicies

{
    "sourceHost": "172.13.1.101",
    "targetHosts": ["172.13.1.106","172.13.1.107","172.13.1.108"]
    "policyName": "linux-high",
    "targetPolicyName": "imported-linux-high"
}
POST https://172.13.1.103/mgmt/shared/TrustedASMPolicies

{
    "sourceUUID": "b80652cb-20bd-4e81-a6a6-c306fd643af7",
    "targetUUIDs": ["8c79ab99-fa76-4e6e-a03a-5610620e4fee","92d0aa7c-a08e-41dd-a114-9192ae040f4c","415c9787-8513-4480-a037-f1f87c8a6851"],
    "policyId": "DkhEogaI2u5fwK_kKo5Ctw",
    "targetPolicyName": "imported-linux-high"
}

When the request is submitted, a returned policy status matching the GET request format is returned immediately. The process is asynchronous. There is a state attribute which can be quried using GET requests which should transition through the following states:

state Value Meaning
REQUESTED The process has been requested, but not initialized
EXPORTING The policy is being exported from the source device
DOWNLOADING The exported policy is being downloaded from the source device
UPLOADING The exported policy is being uploaded to the target device
IMPORTING The policy is being imported on the target device
AVAILABLE The policy has been applied on the target device
ERROR An error has occurred during the process and the restnoded log should be checked for details

Response

{
    "id": "DkhEogaI2u5fwK_kKo5Ctw",
    "name": "linux-high",
    "enforcementMode": "blocking",
    "state": "EXPORTING"
}

Query the current state

GET https://172.13.1.103/mgmt/shared/TrustedASMPolicies?targetHost=173.13.1.106&policyName=linux-high

Response

[
    {
        "id": "DkhEogaI2u5fwK_kKo5Ctw",
        "name": "linux-high",
        "enforcementMode": "blocking",
        "lastChanged": "2018-12-26T16:55:52Z",
        "lastChange:": "Security Policy /Common/linux-high [update]: Enforcement Mode was set to Blocking. { audit: policy = /Common/linux-high, username = admin, client IP = 192.168.0.65 }",
        "state": "UPLOADING",
        "path": "/Common/linux-high"
    }
]

Downloading from a non-BIG-IP URL

The source of the ASM policy can be downloaded from a non-BIG-IP URL using the following parameters:

Parameter Value
url The non-BIG-UP HTTP/HTTPS/FILE URL to download the previously exported ASM policy XML file.

The target device to import the policy is specified using the following parameters:

Parameter Value
targetHost The trusted device host or if not supplied the local device.
targetUUID The trusted device UUID or if not supplied the local device.
targetPolicyName The required name for the policy on the target device.

These variables can be defined as either query variables or part of the POST body.

The following requests are equivalent.

POST https://172.13.1.103/mgmt/shared/TrustedASMPolicies?url=https://raw.githubusercontent.com/f5devcentral/f5-asm-policy-template-v13/master/application_ready_template_v13/Drupal_8/Drupal_8_Ready_Template_6.1.2_v13.xml&targetHost=172.13.1.101&targetPolicyName=Drupal_8_Ready_Template
POST https://172.13.1.103/mgmt/shared/TrustedASMPolicies

{
    "url": "https://raw.githubusercontent.com/f5devcentral/f5-asm-policy-template-v13/master/application_ready_template_v13/Drupal_8/Drupal_8_Ready_Template_6.1.2_v13.xml"
    "targetHost": "172.13.1.106",
    "targetPolicyName": "Drupal_8_Ready_Template"
}

The response is given in the same GET format, following the following states:

state Value Meaning
REQUESTED The process has been requested, but not initialized
DOWNLOADING The exported policy is being downloaded from the source device
UPLOADING The exported policy is being uploaded to the target device
IMPORTING The policy is being imported on the target device
AVAILABLE The policy has been applied on the target device
ERROR An error has occurred during the process and the restnoded log should be checked for details

trustedasmpolicies's People

Contributors

jgruber avatar jgruberf5 avatar 0xhiteshpatel avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.