├── LICENSE ├── README.rst ├── _figures ├── 1.jpg ├── 1.png ├── 10.jpg ├── 100.jpg ├── 101.jpg ├── 102.jpg ├── 103.jpg ├── 104.jpg ├── 105.jpg ├── 107.jpg ├── 108.jpg ├── 108.png ├── 109.jpg ├── 109.png ├── 11.jpg ├── 110.jpg ├── 110.png ├── 111.jpg ├── 112.jpg ├── 113.jpg ├── 12.jpg ├── 2.jpg ├── 200.jpg ├── 201.png ├── 202.jpg ├── 25.jpg ├── 26.jpg ├── 27.jpg ├── 28.jpg ├── 29.jpg ├── 3.jpg ├── 30.jpg ├── 31.jpg ├── 32.jpg ├── 33.jpg ├── 34.jpg ├── 35.jpg ├── 36.jpg ├── 37.jpg ├── 38.jpg ├── 39.jpg ├── 4.jpg ├── 40.jpg ├── 41.jpg ├── 42.jpg ├── 43.jpg ├── 44.jpg ├── 45.jpg ├── 46.jpg ├── 47.jpg ├── 48.jpg ├── 49.jpg ├── 5-6.jpg ├── 5.jpg ├── 50.jpg ├── 51.jpg ├── 52.jpg ├── 53.jpg ├── 54.jpg ├── 55.jpg ├── 56.jpg ├── 57.jpg ├── 58.jpg ├── 59.jpg ├── 60.jpg ├── 61.jpg ├── 62.jpg ├── 63.jpg ├── 64.jpg ├── 65.jpg ├── 66.jpg ├── 67.jpg ├── 68.jpg ├── 69.jpg ├── 7.jpg ├── 70.jpg ├── 71.jpg ├── 72.jpg ├── 73.jpg ├── 74.jpg ├── 75.jpg ├── 76.jpg ├── 77.jpg ├── 78.jpg ├── 79.jpg ├── 8.jpg ├── 80.jpg ├── 81.jpg ├── 82.jpg ├── 83.jpg ├── 83.png ├── 84.jpg ├── 85.jpg ├── 86.jpg ├── 87.jpg ├── 88.jpg ├── 89.jpg ├── 9.jpg ├── 90.jpg ├── 91.jpg ├── 92.jpg ├── 93.jpg ├── 94.jpg ├── 95.jpg ├── 96.jpg ├── 97.jpg ├── 98.jpg ├── 99.jpg ├── Auction.png └── Diagram.png └── postman ├── F5 Cloud Services LAB.postman_collection.json └── F5 Cloud Services LAB.postman_environment.json /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 F5 DevCentral 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | F5 Cloud Services – API Lab 2 | =========================== 3 | Spring 2020 4 | 5 | .. contents:: Table of Contents 6 | 7 | Overview 8 | ######## 9 | 10 | This lab will take you through setting up and basic usage of the following F5 Cloud Services: 11 | 12 | * **F5 DNS Cloud Service**: secondary DNS backed by globally-distributed anycast network with built-in DDoS protection 13 | 14 | * **F5 DNS Load Balancer Cloud Service**: global availability and performance with health-check and built-in DDoS protection 15 | 16 | * **F5 Essential App Protect Service**: mitigate risk of exploits, targeted attacks & threats to web applications 17 | 18 | In the course of this lab you will create application infrastructure using F5 Cloud Services to support: 19 | 20 | * Secondary DNS for backup of primary with high availability, scale & security 21 | 22 | * Secondary DNS and DNS load balancing services with DDoS protection 23 | 24 | * Load balance pools of app instances across multiple clouds (Azure & AWS) 25 | 26 | * Geo-proximity traffic routing for performance and/or compliance (GDPR, etc.) 27 | 28 | * Web app protection against common high-risk web exploits 29 | 30 | * Application protection against external IPs flagged as malicious 31 | 32 | * Risk mitigation against coordinated attack trends & vulnerabilities 33 | 34 | The estimated time to complete the lab is ~45 minutes. 35 | 36 | Prerequisites 37 | ############## 38 | 39 | * F5 Cloud Services account: sign up `here `_ 40 | 41 | * Postman: download `here `_ 42 | 43 | **IMPORTANT NOTE**: If you originally signed up for F5 Cloud Services through a Limited User invitation (such as an email invite from another lab or from a different account owner), then it is possible that you haven't yet completed a full registration. 44 | 45 | You can quickly tell if you have a full account by looking at your account(s) in the `F5 Cloud Services Portal `_. If you do now see any "Accounts you own:" and only see "Accounts you've been granted access to" as a **"Limited User"**, then you will need to create a full account & update user info before you can proceed with this lab. You can do so in the step 5(c) below via the F5 Cloud Services API using the Postman request titled "Set User Info (optional)", the details of which are outlined below after the Login. 46 | 47 | Environment and Setup 48 | ##################### 49 | 50 | 1. APIs and Services 51 | ********************* 52 | 53 | The setup & configuration of the services will be done by sending API requests to the following services: 54 | 55 | * **F5 Cloud Services API**: create, use, and remove the services in the scope of this lab 56 | 57 | * **Lab service API**: facilitates auxiliary functions for the lab only: creating DNS entries, sending targeted requests & traffic to the apps/services, etc. 58 | 59 | 60 | The following diagram captures the core components of this Lab: 61 | 62 | .. figure:: _figures/Diagram.png 63 | 64 | 65 | 2. Application Scenario 66 | *********************** 67 | 68 | In order to fully explore the capabilities of F5 Cloud Services, you will be able to use an existing application with a set of live instances across different clouds and geographic locations. This app is `"BuyTime Auction" `_, a fictitious multi-instance deployment that helps to simulate a globally deployed app topology. Unsurprisingly, robust security, global availability, zero downtime, 69 | and performance are critical for this application, while the app Developers & DevOps are used to consuming app infrastructure as-a-Service. 70 | 71 | The following are the demo application instances: 72 | 73 | .. csv-table:: 74 | :header: "Name", "Geography", "Cloud/Region", "IP", "URI" 75 | 76 | "AU", "Australia", "AWS - Asia Pacific (Sydney)", "54.206.13.195", "http://au-auction.securelab.online/" 77 | "EU1", "Europe", "AWS – Europe (Paris)", "35.180.122.91", "http://eu1-auction.securelab.online/" 78 | "NA1", "North America", "AWS - US East (N. Virginia)", "34.229.48.248", "http://na1-auction.securelab.online/" 79 | "NA2", "North America", "AWS – US East (N. Virginia)", "18.232.64.254", "http://na2-auction.securelab.online/" 80 | "NA3", "North America", "Azure – US East", "52.249.252.91", "http://na3-auction.securelab.online/" 81 | 82 | 83 | The following diagram is a simplified architecture of the Auction application: 84 | 85 | 86 | .. figure:: _figures/Auction.png 87 | 88 | 89 | 3. Postman Configuration 90 | ************************ 91 | 92 | `a)` Open Postman, create a Postman account if you don’t have one and choose to do so, and sign in. 93 | 94 | `b)` Use the "Run in Postman" button below to import collection and environment to the Postman or manually import it from the `Git repo for this lab `_ 95 | 96 | .. image:: https://run.pstmn.io/button.svg 97 | :target: https://app.getpostman.com/run-collection/222d7e7804f37069898b#?env%5BF5%20Cloud%20Services%20LAB%5D=W3sia2V5IjoiSE9TVE5BTUUiLCJ2YWx1ZSI6ImFwaS5jbG91ZHNlcnZpY2VzLmY1LmNvbSIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiQVBJX1ZFUlNJT04iLCJ2YWx1ZSI6InYxIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJETlNfV0VCX0FETUlOIiwidmFsdWUiOiI1NC4yMTEuMTIuMTczIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJBQ0NPVU5UX05BTUUiLCJ2YWx1ZSI6IiIsImVuYWJsZWQiOnRydWV9LHsia2V5IjoiVVNFUl9FTUFJTCIsInZhbHVlIjoiIiwiZW5hYmxlZCI6dHJ1ZX0seyJrZXkiOiJVU0VSX1BBU1NXT1JEIiwidmFsdWUiOiIiLCJlbmFibGVkIjp0cnVlfV0= 98 | 99 | `c)` Choose "Postman for Windows" and open collection in Postman 100 | 101 | .. figure:: _figures/1.png 102 | 103 | 104 | You will now see your collection (left side) with calls in several categories, as well as environment variables (top right). 105 | 106 | .. figure:: _figures/2.jpg 107 | 108 | 109 | You are now ready to interface with F5 Cloud Services using Postman. 110 | 111 | 112 | 113 | 4. Postman Environment Variables Detail 114 | *************************************** 115 | 116 | 117 | 118 | The Postman environment contains a number of variables. To see them, select **Manage Environments** and click **F5 Cloud Services LAB**. 119 | 120 | .. figure:: _figures/3.jpg 121 | :height: 100px 122 | :width: 200 px 123 | :scale: 250 % 124 | :alt: alternate text 125 | :align: center 126 | 127 | 128 | 129 | You will now see the list of environment variables: 130 | 131 | .. figure:: _figures/4.jpg 132 | :height: 100px 133 | :width: 200 px 134 | :scale: 250 % 135 | :alt: alternate text 136 | :align: center 137 | 138 | 139 | 140 | You will later need to add the variables highlighted in bold. 141 | 142 | 143 | 144 | .. csv-table:: 145 | :header: " ", "Variable", "Description" 146 | :widths: 5, 15, 40 147 | 148 | "1", "HOSTNAME", "F5 API URL" 149 | "2", "API_VERSION", "Version of API used" 150 | "3", "DNS_WEB_ADMIN", "Labs DNS API" 151 | "4", "ACCOUNT_NAME", "Name of your F5 Cloud Services portal account which is retrieved in Get User Membership call to get account ID to work in" 152 | "5", "**USER_EMAIL**", "**Email of the main user in the F5 Cloud Services portal**" 153 | "6", "**USER_PASSWORD**", "**Password of the main user in the F5 Cloud Services portal**" 154 | "7", "ACCESS_TOKEN", "Token for authenticating API calls used by your main user account" 155 | "8", "USER_ID", "ID of your main user" 156 | "9", "ACCOUNT_ID", "ID of your main user’s primary account (where you will create instances)" 157 | "10", "DNS_CATALOG_ID", "Unique ID for DNS service catalog" 158 | "11", "WAF_CATALOG_ID", "Unique ID for the Essential App Protect service catalog" 159 | "12", "GSLB_CATALOG_ID", "Unique ID for the DNS Load Balancer service catalog" 160 | "13", "ZONE_NAME", "Your test DNS zone which is assigned by the LAB Service API" 161 | "14", "DNS_SUBSCRIPTION_ID", "Your instance ID for the DNS subscription" 162 | "15", "WAF_SUBSCRIPTION_ID", "Your instance ID for the Essential App Protect subscription" 163 | "16", "GSLB_SUBSCRIPTION_ID", "Your instance ID for the DNS Load Balancer subscription" 164 | "17", "WAF_SERVICE_INSTANCE_ID", "The ID of the app instance in your Essential App Protect subscription" 165 | "18", "WAF_CNAME", "CNAME record for the app instance in your Essential App Protect subscription" 166 | 167 | Core API Calls 168 | ############## 169 | 170 | 5. Login 171 | ******** 172 | 173 | 174 | `a)` Open the “F5 Cloud Services LAB” environment variables by clicking the “Environment Quick Look”, click into the field of the corresponding variable, and type the value of your main user email in the variable “USER_EMAIL” (click **Enter** after typing the values). 175 | 176 | .. figure:: _figures/5-6.jpg 177 | 178 | Repeat the same for the “USER_PASSWORD”. 179 | 180 | 181 | `b)` Select the **Login** request in the sidebar to login to your F5 Cloud Services profile and click **Send** to get the authorization token described above. More detailed information on this API request can be found `here `_. 182 | 183 | .. figure:: _figures/107.jpg 184 | 185 | A successful login will result in Postman returning the tokens from the API, shown in the response body below: 186 | 187 | .. figure:: _figures/84.jpg 188 | 189 | These tokens are then stored for subsequent calls using a function inside Postman to set environment variables. You can see the test function in the “Tests” tab: 190 | 191 | .. figure:: _figures/9.jpg 192 | :height: 60px 193 | :width: 200 px 194 | :scale: 230 % 195 | :alt: alternate text 196 | :align: center 197 | 198 | **NOTE**: If any of the subsequent Postman calls return a blank response or **"status": "unauthorized"** response (see the screenshot below), it means your user token has expired and you will need to re-login. To do that you just need to re-send the **Login** request. 199 | 200 | .. figure:: _figures/10.jpg 201 | :height: 60px 202 | :width: 200 px 203 | :scale: 230 % 204 | :alt: alternate text 205 | :align: center 206 | 207 | `c)` OPTIONAL: Set User ID & Account Info 208 | 209 | **IMPORTANT NOTE**: If you originally signed up for F5 Cloud Services through a Limited User invitation (such as an email invite from another lab or from a different account owner), then it is possible that you haven't yet completed a full registration. You can quickly tell if you have by looking at your account(s) in the `F5 Cloud Services Portal `_ If you do now see any "Accounts you own:" and only see "Accounts you've been granted access to" as a **"Limited User"**, then you need to create a full account & update user info before you can proceed with this lab. 210 | 211 | You can do this by running the following **Set User Info** API call, after you've updated the Body of the request with your own organization & address information: 212 | 213 | .. figure:: _figures/112.jpg 214 | 215 | The response returns the following detail, including your own organization account ID (id): 216 | 217 | .. figure:: _figures/113.jpg 218 | 219 | More information on this API request can be found `here `_. 220 | 221 | At this point you should be a full user with an "Owned Account" and a primary organization account id, which can also be confirmed in the `F5 Cloud Services Portal `_ in the drop-down under your user name (top right), where you should see "Accounts you own:" and the Organization Account you created with **"Owner"** defined. 222 | 223 | `d)` Retrieve User ID & Account ID 224 | 225 | Select the **Get Current User** request and click **Send** to retrieve User ID and Account ID to be used in the further requests. 226 | 227 | .. figure:: _figures/86.jpg 228 | 229 | The response returns the following detail: 230 | 231 | .. figure:: _figures/12.jpg 232 | :height: 170px 233 | :width: 140 px 234 | :scale: 230 % 235 | :alt: alternate text 236 | :align: center 237 | 238 | The retrieved User ID and Account ID are then stored for subsequent calls. 239 | 240 | .. figure:: _figures/11.jpg 241 | :height: 60px 242 | :width: 200 px 243 | :scale: 230 % 244 | :alt: alternate text 245 | :align: center 246 | 247 | More detailed information on this API request can be found `here `_. 248 | 249 | 250 | 6. Get the Zone Name for your Lab 251 | ********************************* 252 | 253 | This Lab contains an API that provides utility functions including DNS management, geo proximity load balance testing, and limited (targeted) attacks on specific instances. The first step to identify your individual lab is to retrieve the Zone Name for your lab with the following API Call: 254 | 255 | 256 | **Get DNS Zone (lab)** 257 | 258 | 259 | Click **Send**. This call will pass your “ACCESS_TOKEN” in the header of the request to the Labs API in order to validate existence of your F5 account & return back a ZONE name unique to your lab. 260 | 261 | 262 | 263 | Request: 264 | 265 | .. figure:: _figures/25.jpg 266 | 267 | The response will return your test DNS zone **name** and the status. 268 | 269 | .. figure:: _figures/27.jpg 270 | 271 | Sending this request will automatically capture of the ZONE variables: 272 | 273 | .. figure:: _figures/26.jpg 274 | 275 | 276 | This ZONE name will be used throughout the lab as the domain name for your test applications. 277 | 278 | 7. User Account Operations 279 | ************************** 280 | 281 | 282 | `a)` Get User Membership to F5 Cloud Services accounts 283 | 284 | **Get User Membership** returns info on your main user’s access to F5 Cloud Services accounts, which are owned/full rights and which are limited. 285 | 286 | .. figure:: _figures/89.jpg 287 | 288 | You will see account ids, names, roles and other information in the body of response. The “role_id” will correspond to the unique IDs returned in section 6.b.1. 289 | 290 | .. figure:: _figures/29.jpg 291 | 292 | Your "account_id" will be retrieved using "account_name" and used for creating user's instances. 293 | 294 | .. figure:: _figures/28.jpg 295 | :height: 50px 296 | :width: 170 px 297 | :scale: 230 % 298 | :alt: alternate text 299 | 300 | More detailed information on this API request can be found `here `_. 301 | 302 | `b)` Retrieve information on available catalogs and their IDs 303 | 304 | Select the **Get Catalogs** request and click **Send** to retrieve data about the available Catalogs and their IDs. 305 | 306 | .. figure:: _figures/90.jpg 307 | 308 | As you see there are a number of catalogs available: 309 | 310 | .. figure:: _figures/31.jpg 311 | 312 | The retrieved IDs are then stored for subsequent calls using a function inside Postman to set environment variables. You can see the test function in the "Tests" tab: 313 | 314 | .. figure:: _figures/30.jpg 315 | 316 | More detailed information on this API request can be found `here `_. 317 | 318 | `c)` Subscribe to Catalogs using the F5 Cloud Services portal 319 | 320 | You can subscribe to any of these cloud service catalogs by using the portal or API (assuming you already provided payment / credit card info to enable certain catalogs). There may be free tier and trials that you could take advantage of, see the available options next to each catalog! 321 | 322 | Portal: 323 | 324 | .. figure:: _figures/32.jpg 325 | 326 | If you haven’t already, you will need to add your payment information or subscribe through AWS Marketplace: 327 | 328 | .. figure:: _figures/33.jpg 329 | 330 | Add payment card to pay by credit card... 331 | 332 | .. figure:: _figures/200.jpg 333 | 334 | ...or initiate the subscription from AWS Marketplace: 335 | 336 | .. figure:: _figures/202.jpg 337 | 338 | At the time of writing Essential App Protect service provides a free trial, which you can use for the purposes of this lab: 339 | 340 | .. figure:: _figures/201.png 341 | 342 | `d)` Subscribe to Catalog using Postman 343 | 344 | 345 | `1.` Get the ID of the catalog you want to subscribe to. In the earlier example (see point 9.c), the DNS Load Balancer has a “catalog_id” value of “c-aaQnOrPjGu”. 346 | 347 | `2.` Subscribe to Catalog using API 348 | 349 | 350 | **Subscribe to Catalog** request will pass your primary account info (“account _id”) as well as the ID of the desired catalog. From the previous step, we can subscribe to ID “c-aaQnOrPjGu” by replacing the value of “catalog_id” in the Body of the request: 351 | 352 | .. figure:: _figures/34.jpg 353 | :height: 50px 354 | :width: 170 px 355 | :scale: 230 % 356 | :alt: alternate text 357 | 358 | The resulting response will confirm subscription to the service: 359 | 360 | .. figure:: _figures/105.jpg 361 | :height: 100px 362 | :width: 140 px 363 | :scale: 200 % 364 | :alt: alternate text 365 | 366 | This API call can be repeated to subscribe to all desired catalog. Within the scope of this lab there are the following catalogs: 367 | 368 | .. csv-table:: 369 | :header: "Catalog", "Catalog_ID" 370 | :widths: 5, 4 371 | 372 | "DNS", "c-aaxBJkfg8u" 373 | "DNS Load Balancer", "c-aaQnOrPjGu" 374 | "Essential App Protect", "c-aa9N0jgHI4" 375 | 376 | You can repeat this call any number of times for different catalogs you’d like to subscribe by changing the “catalog_id” value. 377 | 378 | 379 | 380 | `3.` Get Previously Created Subscriptions 381 | 382 | 383 | 384 | If you have already created subscriptions, you can see them by sending **Retrieve Previously Created Subscriptions**: 385 | 386 | .. figure:: _figures/91.jpg 387 | 388 | The response will show subscriptions IDs using which you will be able to retire them in the “clean up” section of this lab. 389 | 390 | .. figure:: _figures/29.jpg 391 | :height: 130px 392 | :width: 140 px 393 | :scale: 200 % 394 | :alt: alternate text 395 | 396 | 397 | F5 DNS Cloud Service 398 | ################### 399 | 400 | 401 | 1. List DNS Subscriptions 402 | ************************** 403 | 404 | You can check your available zones sending the **List DNS Subscriptions** request. 405 | 406 | .. figure:: _figures/92.jpg 407 | 408 | The first DNS Zone you create is free and the following zones will incur charges. 409 | 410 | You will see the list of your subscriptions (if any), including subscription IDs, account IDs, user IDs and other related information. If you don’t have any subscriptions, you will see the following response: 411 | 412 | .. figure:: _figures/39.jpg 413 | 414 | 415 | More detailed information on this API request can be found `here `_. 416 | 417 | 2. Create DNS Subscription 418 | ************************** 419 | 420 | Select the **Create DNS Subscription** request and click **Send** to create a new service instance of Secondary Authoritative DNS using “account_id” and “catalog_id” retrieved a few steps above. 421 | 422 | .. figure:: _figures/93.jpg 423 | 424 | You will see “subscription_id” and created “service_instance_id” in the body. 425 | 426 | .. figure:: _figures/41.jpg 427 | 428 | The retrieved "subscription_id" is then stored for subsequent calls. 429 | 430 | .. figure:: _figures/40.jpg 431 | 432 | You can change its status from “DISABLED” to “ACTIVE” sending the **Activate DNS Subscription** request below. 433 | More detailed information on this API request can be found `here `_. 434 | 435 | 3. Activate DNS Subscription 436 | **************************** 437 | 438 | Select the **Activate DNS Subscription** request and click **Send**. This will deploy the secondary DNS using “subscription_id” captured in one of the steps above. 439 | 440 | .. figure:: _figures/42.jpg 441 | 442 | You will see “active” subscription status. 443 | 444 | .. figure:: _figures/43.jpg 445 | 446 | Note that it takes some time to deploy the service, so you can just re-send the same request after a few minutes to see “service_state”: “DEPLOYED”. 447 | 448 | .. figure:: _figures/44.jpg 449 | 450 | More detailed information on this API request can be found `here `_. 451 | 452 | 4. Get DNS Subscription Zones 453 | ***************************** 454 | 455 | Send the **Get DNS Subscription Zones** request which uses DNS “subscription_id” created a few steps above. This will retrieve a zone file from your primary DNS server. 456 | 457 | .. figure:: _figures/94.jpg 458 | 459 | As a result, you will get the zone file describing your DNS zone and containing mappings between domain names and IP addresses. 460 | 461 | .. figure:: _figures/46.jpg 462 | 463 | F5 DNS Load Balancer Cloud Service 464 | ################################## 465 | 466 | 1. Create DNS Load Balancer Subscription 467 | **************************************** 468 | 469 | Select the **Create GSLB Subscription** request and click **Send** to create a new service instance of DNS Load Balancer using “account_id” and “catalog_id” retrieved a few steps above. 470 | 471 | .. figure:: _figures/95.jpg 472 | 473 | You will see “subscription_id” and created ”service_instance_id” in the body. You may also note that this request will create *only* NA1 endpoint for now. Some more will be created in the subsequent requests. 474 | 475 | You may also notice that the current proximity rule is set to send traffic from Anywhere to "usa" pool. This means that only one endpoint (NA1) will be serving all requests now. We will subsequently configure proper load balancing and geoproximity rules. 476 | 477 | .. figure:: _figures/48.jpg 478 | :height: 210px 479 | :width: 180 px 480 | :scale: 160 % 481 | :alt: alternate text 482 | :align: center 483 | 484 | The retrieved "subscription_id" is then stored for subsequent calls. 485 | 486 | .. figure:: _figures/47.jpg 487 | 488 | You can change its status from "DISABLED” to “ACTIVE” sending the **Activate GSLB Subscription** request below. 489 | 490 | More detailed information on this API request can be found `here `_. 491 | 492 | 2. Activate DNS Load Balancer Subscription 493 | ****************************************** 494 | 495 | Select the **Activate GSLB Subscription** request and click **Send**. This will deploy DNS Load Balancer using “subscription_id” captured in one of the steps above. 496 | 497 | .. figure:: _figures/49.jpg 498 | 499 | You will see “active” subscription status. 500 | 501 | .. figure:: _figures/50.jpg 502 | 503 | Note that it takes some time to deploy the service, so you can just re-send the same request after a few minutes to see “service_state”: “DEPLOYED”. 504 | 505 | .. figure:: _figures/51.jpg 506 | 507 | More detailed information on this API request can be found `here `_. 508 | 509 | 3. Test NA Pool 510 | *************** 511 | 512 | Send the **Test NA Availability (lab)** request to execute a call against the Lab service API, which in turn uses an external VM (located in the USA) to run a "wget" to retrieve the response from the auction website. This should show the only available instance NA1 in the HTML that is returned. 513 | 514 | .. figure:: _figures/52.jpg 515 | 516 | The response shows that your first instance is available: 517 | 518 | .. figure:: _figures/53.jpg 519 | 520 | 4. Add Endpoints & Pool Members (NA3) 521 | ************************************* 522 | 523 | Send the **Add Endpoint & Pool Members** request to add a few more endpoints for load balancing of the application. Note that three of the new endpoints (AU, EU and NA2) are deployed on Amazon AWS, and one (NA3) is running on Microsoft Azure. NA1, NA2, and NA3 endpoints are aggregated into a pool "usa", which demonstrates multi-cloud load balancing. 524 | 525 | .. figure:: _figures/54.jpg 526 | 527 | You will see all the information on the added endpoints: 528 | 529 | .. figure:: _figures/55.jpg 530 | 531 | 5. Test Round Robin (lab) 532 | ************************* 533 | 534 | Run the **Test Round Robin (lab)** request to check the response from the Lab service API to test what instance is now being returned. This should show a result different from the previous due to the newly-configured round-robin load balancing. 535 | 536 | NOTE: it's possible that you will still get the same endpoint in the response due to either DNS caching or 1/3 chance of the same endpoint to be pulled from the load-balance pool. Let's try: 537 | 538 | .. figure:: _figures/56.jpg 539 | 540 | And check the response: 541 | 542 | .. figure:: _figures/57.jpg 543 | 544 | You can send the same request to check other instances. 545 | 546 | 6. Update Proximity Rule 547 | ************************ 548 | 549 | Run the **Update Proximity Rules & Regions**. This adds new regions "europe" and “australia”, and assigns EU and AU endpoints accordingly. It also updates the DNS Load Balancer with new proximity rules: to send the traffic originating in Europe to the "europe" pool, and traffic from Australia to the “australia” pool, utilizing a higher relative score than the previous rule of routing traffic from "Anywhere" to the "usa" pool. This type of geo-proximity based routing is useful for GDPR compliance. 550 | 551 | .. figure:: _figures/58.jpg 552 | 553 | And you will see all the information on available pools and regions: 554 | 555 | .. figure:: _figures/59.jpg 556 | 557 | 7. Test Proximity Rules (lab) 558 | ***************************** 559 | 560 | Send the **Test Proximity Rules (lab)** request, which uses an external VM (located in Europe) to run a "wget" to retrieve the response from the auction website. This simulates what an EU-based customer would see when opening this URL in their browser. 561 | 562 | .. figure:: _figures/60.jpg 563 | 564 | Here’s what you should see in the response: 565 | 566 | .. figure:: _figures/61.jpg 567 | 568 | F5 Essential App Protect Service 569 | ############################### 570 | 571 | 1. Create EAP Subscription 572 | ************************** 573 | 574 | Now, let's protect the NA2 endpoint with an instance of F5 Essential App Protect service. We will start with creating a subscription and retrieving the "subscription_id" for the newly-created instance. 575 | 576 | Select the **Create EAP Subscription** request and click **Send** to create a new service instance of Essential App Protect. Note that this request passes the “account_id” and “catalog_id” values retrieved from the previous steps. 577 | 578 | .. figure:: _figures/96.jpg 579 | 580 | You will see “subscription_id” and created “service_instance_id” in the body used for the subsequent requests. 581 | 582 | .. figure:: _figures/63.jpg 583 | 584 | The retrieved "subscription_id" is then stored for subsequent calls. 585 | 586 | .. figure:: _figures/62.jpg 587 | 588 | You can change its status from "DISABLED” to "ACTIVE” sending the **Activate EAP Subscription** request below. 589 | 590 | More detailed information on this API request can be found `here `_. 591 | 592 | 2. Activate EAP Subscription 593 | *************************** 594 | 595 | Now let’s activate the subscription created in the step above. Select the **Activate EAP Subscription** request and click **Send**. This will deploy Essential App Protect service using “subscription_id” captured in one of the steps above. 596 | 597 | .. figure:: _figures/64.jpg 598 | 599 | You will see “active” subscription status. 600 | 601 | .. figure:: _figures/50.jpg 602 | 603 | Note that it takes some time to deploy the service, so you can just re-send the same request after a few minutes to see “service_state”: “DEPLOYED”. 604 | 605 | .. figure:: _figures/51.jpg 606 | 607 | More detailed information on this API request can be found `here `_. 608 | 609 | 3. Get EAP Subscription 610 | *********************** 611 | 612 | In order to direct your site’s traffic through Essential App Protect service you need to get “CNAMEValue” using “subscription_id” from the previous steps. The CNAME value will then be used to update the DNS record of the app you're protecting, which will then direct traffic to the instance of Essential App Protect that you created. To get "CNAMEValue", send the **Get EAP Subscription** request. 613 | 614 | .. figure:: _figures/97.jpg 615 | 616 | You will see the information for the service and “CNAMEValue”. 617 | 618 | .. figure:: _figures/66.jpg 619 | 620 | “CNAMEValue” and "service_instance_id" are then stored for subsequent calls. 621 | 622 | .. figure:: _figures/65.jpg 623 | 624 | More detailed information on this API request can be found `here `_. 625 | 626 | ** THIS LAST STEP MAY TAKE SOME TIME TO COMPLETE ** 627 | 628 | 4. Update EAP CNAME (lab) 629 | ************************ 630 | 631 | Now let’s update our DNS settings with the new CNAME. It can be easily done by sending the **Update EAP CNAME (lab)** request. This will direct all of the requests through Essential App Protect first. You can inspect the JSON body for the details of the current configuration. Note, that we have chosen to start with the "Monitor" mode first, which we will subsequently update to "Block". 632 | 633 | .. figure:: _figures/68.jpg 634 | 635 | You will see “ok” status in the body if it is executed successfully. 636 | 637 | .. figure:: _figures/69.jpg 638 | 639 | 5. Check the Site 640 | ***************** 641 | 642 | Now let’s see how our site looks like in a browser. Copy “CNAMEValue” from the **Get EAP Subscription** request and paste it into your browser. 643 | 644 | .. figure:: _figures/70.jpg 645 | 646 | You will see the NA2 instances of the Auction website and all of the requests will now be flowing through the Essential App Protect. However, any malicious requests will not be blocked, as we have not yet turned on "Blocking" mode yet. 647 | 648 | .. figure:: _figures/71.jpg 649 | 650 | 6. Start Essential App Protect Attack (lab) 651 | ******************************************* 652 | 653 | Let’s now return to Postman and simulate the attacks by sending the **Start EAP Attack (lab)** request. 654 | 655 | .. figure:: _figures/72.jpg 656 | 657 | You will see “ok” status which means that your zone is being attacked. In the F5 Cloud Services portal you can see the results of the attacks: their types, severity and some other information (see the next step). 658 | 659 | .. figure:: _figures/69.jpg 660 | 661 | 7. Check the Map 662 | **************** 663 | 664 | Now let’s see the map of our attacks on the F5 Cloud Services portal. You need to select **Essential App Protect** tab where you will see the dashboard. 665 | 666 | .. figure:: _figures/74.jpg 667 | 668 | For now, all attacks are not blocked. We will block them sending the **Update Monitor to Block** request in one of the following steps. 669 | 670 | 8. Get Essential App Protect Events Stream 671 | ******************************************** 672 | 673 | Now return to Postman to get more detailed information on the simulated attacks. Send the **Get EAP Events Stream** request which uses “subscription_id” and “service_instance_id”. 674 | 675 | .. figure:: _figures/75.jpg 676 | 677 | You can see different attack characteristics in the response, including type, country, source IPs, etc. 678 | 679 | .. figure:: _figures/76.jpg 680 | 681 | 9. Update Monitoring to Blocking 682 | ******************************** 683 | 684 | To change your instance from "Monitoring" to "Blocking" run **Update Monitor to Block** request which uses your “subscription_id” retrieved in one of the previous steps. You may also want to re-run attacks activated by the **Start EAP Attack (lab)** request as discussed above and observe the change of behavior in the Essential App Protect "View Events" screen. 685 | 686 | ** **This may take a few seconds** ** 687 | 688 | .. figure:: _figures/98.jpg 689 | 690 | You will see blocked attacks and their information in the response. 691 | 692 | .. figure:: _figures/78.jpg 693 | 694 | 10. Attacks 695 | *********** 696 | 697 | In this section you can use Postman to initiate a few types of attacks using the GET method against the protected NA2 instance. You can also choose to run your own attacks against the protected instance (CNAME retrieved earlier) by using a browser or tools of your choice. 698 | 699 | `a)` SQL Injection 700 | 701 | This attack inserts a SQL query via the input data field in the web application. Such attacks could potentially read sensitive data, modify and destroy it. More detailed information can be found `here `_. 702 | 703 | You can simulate this attack from your local computer by selecting the **Attack: SQL Injection** request and clicking **Send**. 704 | 705 | .. figure:: _figures/99.jpg 706 | 707 | The result will be shown in the Essential App Protect "VIEW EVENTS" section of the F5 Cloud Services portal. 708 | 709 | .. figure:: _figures/100.jpg 710 | 711 | `b)` Illegal Filetype 712 | 713 | This attack combines valid URL path segments with invalid input to guess or brute-force download of sensitive files or data. More detailed information can be found `here `_. 714 | 715 | You can simulate this attack from your local computer by selecting the **Attack: Illegal Filetype** request and clicking **Send**. 716 | 717 | .. figure:: _figures/101.jpg 718 | 719 | The result will be shown in the Essential App Protect "VIEW EVENTS" section of the F5 Cloud Services portal. 720 | 721 | .. figure:: _figures/102.jpg 722 | 723 | `c)` Threat Campaign 724 | 725 | These types of attacks are the category that F5 Labs tracks as coordinated campaigns that exploit known vulnerabilities. This particular attack simulates using a known Tomcat backdoor vulnerability. The complete list of such threats can be found `here `_. 726 | 727 | You can simulate this attack from your local computer by selecting the **Attack: Threat Campaign** request and clicking **Send**. 728 | 729 | .. figure:: _figures/103.jpg 730 | 731 | The result will be shown in the Essential App Protect "VIEW EVENTS" section of the F5 Cloud Services portal. 732 | 733 | .. figure:: _figures/104.jpg 734 | 735 | Clean Up 736 | ######### 737 | 738 | 1. Retire the Services 739 | ********************** 740 | 741 | At this point feel free to explore and repeat any of the previous steps of the lab, but should you want to clean up the resources you've created and remove your service **Subscriptions**, then follow the steps below: 742 | 743 | `a)` DNS 744 | 745 | Send the **Retire DNS Subscription** request which uses the relevant “subscription_id”. 746 | 747 | .. figure:: _figures/79.jpg 748 | 749 | You will see “retired” status in the response body which means that it’s not available on the F5 Cloud Services portal anymore. 750 | 751 | .. figure:: _figures/80.jpg 752 | 753 | More detailed information on these API requests can be found `here `_. 754 | 755 | `b)` DNS Load Balancer 756 | 757 | Send the **Retire GSLB Subscription** request which uses the relevant “subscription_id”. 758 | 759 | .. figure:: _figures/81.jpg 760 | 761 | You will see “retired” status in the response body which means that it’s not available on the F5 Cloud Services portal anymore. 762 | 763 | .. figure:: _figures/80.jpg 764 | 765 | More detailed information on these API requests can be found `here `_. 766 | 767 | `c)` Essential App Protect 768 | 769 | Send the **Retire EAP Subscription** request which uses the relevant “subscription_id”. 770 | 771 | .. figure:: _figures/82.jpg 772 | 773 | You will see “retired” status in the response body which means that it’s not available on the F5 Cloud Services portal anymore. 774 | 775 | .. figure:: _figures/80.jpg 776 | 777 | More detailed information on these API requests can be found `here `_. 778 | 779 | 2. Clear Tokens from the Lab Service API 780 | ************************ 781 | 782 | `a)` Send the **Retire DNS Zone** to remove or reset zone file. You will get response with status code "200 OK". 783 | 784 | .. figure:: _figures/111.jpg 785 | 786 | `b)` We recommend that you clear your tokens from the Lab Service API for security purposes. 787 | 788 | In order to do that, send the **Logout** request, which uses your **ACCESS_TOKEN**: 789 | 790 | .. figure:: _figures/108.png 791 | 792 | You will get the following response with the status showing "200 OK": 793 | 794 | .. figure:: _figures/109.jpg 795 | 796 | Your **ACCESS_TOKEN** will be considered invalid: 797 | 798 | .. figure:: _figures/110.png 799 | 800 | Final Notes 801 | ########### 802 | 803 | By this point you would have done the following: 804 | 805 | * Configured Postman account used for sending API requests to F5 Cloud Services and Lab Service 806 | 807 | * Created app infrastructure using F5 Cloud Services 808 | 809 | * Setup the following F5 Cloud Services by sending API requests in Postman: DNS, DNS Load Balancer and Essential App Protect 810 | 811 | * Created your zone which was used as the domain name to work with the F5 Cloud Services portal 812 | 813 | * Subscribed to the services and created secondary DNS for your primary one, endpoints and pools across Azure and AWS clouds for DNS Load Balancer 814 | 815 | * Set Essential App Protect instance and let all requests to the main domain go through it first 816 | 817 | * Simulated attacks of various types to verify the performance of Essential App Protect 818 | 819 | * Had fun with F5 Cloud Services! 820 | 821 | Feedback / Comments 822 | ################### 823 | -------------------------------------------------------------------------------- /_figures/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/1.jpg -------------------------------------------------------------------------------- /_figures/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/1.png -------------------------------------------------------------------------------- /_figures/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/10.jpg -------------------------------------------------------------------------------- /_figures/100.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/100.jpg -------------------------------------------------------------------------------- /_figures/101.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/101.jpg -------------------------------------------------------------------------------- /_figures/102.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/102.jpg -------------------------------------------------------------------------------- /_figures/103.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/103.jpg -------------------------------------------------------------------------------- /_figures/104.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/104.jpg -------------------------------------------------------------------------------- /_figures/105.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/105.jpg -------------------------------------------------------------------------------- /_figures/107.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/107.jpg -------------------------------------------------------------------------------- /_figures/108.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/108.jpg -------------------------------------------------------------------------------- /_figures/108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/108.png -------------------------------------------------------------------------------- /_figures/109.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/109.jpg -------------------------------------------------------------------------------- /_figures/109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/109.png -------------------------------------------------------------------------------- /_figures/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/11.jpg -------------------------------------------------------------------------------- /_figures/110.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/110.jpg -------------------------------------------------------------------------------- /_figures/110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/110.png -------------------------------------------------------------------------------- /_figures/111.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/111.jpg -------------------------------------------------------------------------------- /_figures/112.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/112.jpg -------------------------------------------------------------------------------- /_figures/113.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/113.jpg -------------------------------------------------------------------------------- /_figures/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/12.jpg -------------------------------------------------------------------------------- /_figures/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/2.jpg -------------------------------------------------------------------------------- /_figures/200.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/200.jpg -------------------------------------------------------------------------------- /_figures/201.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/201.png -------------------------------------------------------------------------------- /_figures/202.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/202.jpg -------------------------------------------------------------------------------- /_figures/25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/25.jpg -------------------------------------------------------------------------------- /_figures/26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/26.jpg -------------------------------------------------------------------------------- /_figures/27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/27.jpg -------------------------------------------------------------------------------- /_figures/28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/28.jpg -------------------------------------------------------------------------------- /_figures/29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/29.jpg -------------------------------------------------------------------------------- /_figures/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/3.jpg -------------------------------------------------------------------------------- /_figures/30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/30.jpg -------------------------------------------------------------------------------- /_figures/31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/31.jpg -------------------------------------------------------------------------------- /_figures/32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/32.jpg -------------------------------------------------------------------------------- /_figures/33.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/33.jpg -------------------------------------------------------------------------------- /_figures/34.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/34.jpg -------------------------------------------------------------------------------- /_figures/35.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/35.jpg -------------------------------------------------------------------------------- /_figures/36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/36.jpg -------------------------------------------------------------------------------- /_figures/37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/37.jpg -------------------------------------------------------------------------------- /_figures/38.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/38.jpg -------------------------------------------------------------------------------- /_figures/39.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/39.jpg -------------------------------------------------------------------------------- /_figures/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/4.jpg -------------------------------------------------------------------------------- /_figures/40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/40.jpg -------------------------------------------------------------------------------- /_figures/41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/41.jpg -------------------------------------------------------------------------------- /_figures/42.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/42.jpg -------------------------------------------------------------------------------- /_figures/43.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/43.jpg -------------------------------------------------------------------------------- /_figures/44.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/44.jpg -------------------------------------------------------------------------------- /_figures/45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/45.jpg -------------------------------------------------------------------------------- /_figures/46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/46.jpg -------------------------------------------------------------------------------- /_figures/47.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/47.jpg -------------------------------------------------------------------------------- /_figures/48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/48.jpg -------------------------------------------------------------------------------- /_figures/49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/49.jpg -------------------------------------------------------------------------------- /_figures/5-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/5-6.jpg -------------------------------------------------------------------------------- /_figures/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/5.jpg -------------------------------------------------------------------------------- /_figures/50.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/50.jpg -------------------------------------------------------------------------------- /_figures/51.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/51.jpg -------------------------------------------------------------------------------- /_figures/52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/52.jpg -------------------------------------------------------------------------------- /_figures/53.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/53.jpg -------------------------------------------------------------------------------- /_figures/54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/54.jpg -------------------------------------------------------------------------------- /_figures/55.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/55.jpg -------------------------------------------------------------------------------- /_figures/56.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/56.jpg -------------------------------------------------------------------------------- /_figures/57.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/57.jpg -------------------------------------------------------------------------------- /_figures/58.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/58.jpg -------------------------------------------------------------------------------- /_figures/59.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/59.jpg -------------------------------------------------------------------------------- /_figures/60.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/60.jpg -------------------------------------------------------------------------------- /_figures/61.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/61.jpg -------------------------------------------------------------------------------- /_figures/62.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/62.jpg -------------------------------------------------------------------------------- /_figures/63.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/63.jpg -------------------------------------------------------------------------------- /_figures/64.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/64.jpg -------------------------------------------------------------------------------- /_figures/65.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/65.jpg -------------------------------------------------------------------------------- /_figures/66.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/66.jpg -------------------------------------------------------------------------------- /_figures/67.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/67.jpg -------------------------------------------------------------------------------- /_figures/68.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/68.jpg -------------------------------------------------------------------------------- /_figures/69.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/69.jpg -------------------------------------------------------------------------------- /_figures/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/7.jpg -------------------------------------------------------------------------------- /_figures/70.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/70.jpg -------------------------------------------------------------------------------- /_figures/71.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/71.jpg -------------------------------------------------------------------------------- /_figures/72.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/72.jpg -------------------------------------------------------------------------------- /_figures/73.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/73.jpg -------------------------------------------------------------------------------- /_figures/74.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/74.jpg -------------------------------------------------------------------------------- /_figures/75.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/75.jpg -------------------------------------------------------------------------------- /_figures/76.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/76.jpg -------------------------------------------------------------------------------- /_figures/77.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/77.jpg -------------------------------------------------------------------------------- /_figures/78.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/78.jpg -------------------------------------------------------------------------------- /_figures/79.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/79.jpg -------------------------------------------------------------------------------- /_figures/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/8.jpg -------------------------------------------------------------------------------- /_figures/80.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/80.jpg -------------------------------------------------------------------------------- /_figures/81.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/81.jpg -------------------------------------------------------------------------------- /_figures/82.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/82.jpg -------------------------------------------------------------------------------- /_figures/83.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/83.jpg -------------------------------------------------------------------------------- /_figures/83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/83.png -------------------------------------------------------------------------------- /_figures/84.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/84.jpg -------------------------------------------------------------------------------- /_figures/85.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/85.jpg -------------------------------------------------------------------------------- /_figures/86.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/86.jpg -------------------------------------------------------------------------------- /_figures/87.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/87.jpg -------------------------------------------------------------------------------- /_figures/88.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/88.jpg -------------------------------------------------------------------------------- /_figures/89.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/89.jpg -------------------------------------------------------------------------------- /_figures/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/9.jpg -------------------------------------------------------------------------------- /_figures/90.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/90.jpg -------------------------------------------------------------------------------- /_figures/91.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/91.jpg -------------------------------------------------------------------------------- /_figures/92.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/92.jpg -------------------------------------------------------------------------------- /_figures/93.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/93.jpg -------------------------------------------------------------------------------- /_figures/94.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/94.jpg -------------------------------------------------------------------------------- /_figures/95.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/95.jpg -------------------------------------------------------------------------------- /_figures/96.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/96.jpg -------------------------------------------------------------------------------- /_figures/97.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/97.jpg -------------------------------------------------------------------------------- /_figures/98.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/98.jpg -------------------------------------------------------------------------------- /_figures/99.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/99.jpg -------------------------------------------------------------------------------- /_figures/Auction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/Auction.png -------------------------------------------------------------------------------- /_figures/Diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f5devcentral/f5-cloudservicelab/8439e24d903525ef6e4c2b1830c537560033d67e/_figures/Diagram.png -------------------------------------------------------------------------------- /postman/F5 Cloud Services LAB.postman_collection.json: -------------------------------------------------------------------------------- 1 | { 2 | "info": { 3 | "_postman_id": "a92f64f3-91d3-4c05-adc5-1c684e99a9d5", 4 | "name": "F5 Cloud Services LAB", 5 | "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" 6 | }, 7 | "item": [ 8 | { 9 | "name": "Core Requests", 10 | "item": [ 11 | { 12 | "name": "Login", 13 | "event": [ 14 | { 15 | "listen": "test", 16 | "script": { 17 | "exec": [ 18 | "pm.test(\"Set token variable\", function() {", 19 | " var jsonData = pm.response.json();", 20 | " pm.environment.set(\"ACCESS_TOKEN\", jsonData.access_token);", 21 | "})", 22 | "" 23 | ], 24 | "type": "text/javascript" 25 | } 26 | } 27 | ], 28 | "request": { 29 | "auth": { 30 | "type": "noauth" 31 | }, 32 | "method": "POST", 33 | "header": [ 34 | { 35 | "key": "Content-Type", 36 | "name": "Content-Type", 37 | "value": "application/json", 38 | "type": "text" 39 | } 40 | ], 41 | "body": { 42 | "mode": "raw", 43 | "raw": "{\"username\": \"{{USER_EMAIL}}\", \"password\": \"{{USER_PASSWORD}}\" }" 44 | }, 45 | "url": { 46 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-auth/login", 47 | "protocol": "https", 48 | "host": [ 49 | "{{HOSTNAME}}" 50 | ], 51 | "path": [ 52 | "{{API_VERSION}}", 53 | "svc-auth", 54 | "login" 55 | ] 56 | } 57 | }, 58 | "response": [] 59 | }, 60 | { 61 | "name": "Set User Info (optional)", 62 | "event": [ 63 | { 64 | "listen": "test", 65 | "script": { 66 | "exec": [ 67 | "pm.test(\"Set account_id variable\", function () {", 68 | " var jsonData = pm.response.json();", 69 | " pm.environment.set(\"ACCOUNT_ID\", jsonData.id);", 70 | "})", 71 | "" 72 | ], 73 | "type": "text/javascript" 74 | } 75 | } 76 | ], 77 | "request": { 78 | "method": "POST", 79 | "header": [ 80 | { 81 | "key": "Authorization", 82 | "type": "text", 83 | "value": "Bearer {{ACCESS_TOKEN}}" 84 | } 85 | ], 86 | "body": { 87 | "mode": "raw", 88 | "raw": "{\n\t\"name\": \"Demo Account\",\n\t\"address\": {\n\t\t\"street_1\": \"801 5th Ave\",\n\t\t\"city\": \"Seattle\",\n\t\t\"state\": \"WA\",\n\t\t\"postal_code\": \"98104\",\n \t\"country\": \"US\"\n }\n}", 89 | "options": { 90 | "raw": { 91 | "language": "json" 92 | } 93 | } 94 | }, 95 | "url": { 96 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-account/accounts", 97 | "protocol": "https", 98 | "host": [ 99 | "{{HOSTNAME}}" 100 | ], 101 | "path": [ 102 | "{{API_VERSION}}", 103 | "svc-account", 104 | "accounts" 105 | ] 106 | } 107 | }, 108 | "response": [] 109 | }, 110 | { 111 | "name": "Get Current User", 112 | "event": [ 113 | { 114 | "listen": "test", 115 | "script": { 116 | "exec": [ 117 | "pm.test(\"Set account_id and user_id variables\", function () {", 118 | " var jsonData = pm.response.json();", 119 | " if(!pm.environment.get(\"ACCOUNT_ID\")) {", 120 | " pm.environment.set(\"ACCOUNT_ID\", jsonData.primary_account_id);", 121 | " }", 122 | " pm.environment.set(\"USER_ID\", jsonData.id);", 123 | "})", 124 | "" 125 | ], 126 | "type": "text/javascript" 127 | } 128 | } 129 | ], 130 | "request": { 131 | "method": "GET", 132 | "header": [ 133 | { 134 | "key": "Authorization", 135 | "type": "text", 136 | "value": "Bearer {{ACCESS_TOKEN}}" 137 | } 138 | ], 139 | "url": { 140 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-account/user", 141 | "protocol": "https", 142 | "host": [ 143 | "{{HOSTNAME}}" 144 | ], 145 | "path": [ 146 | "{{API_VERSION}}", 147 | "svc-account", 148 | "user" 149 | ] 150 | } 151 | }, 152 | "response": [] 153 | }, 154 | { 155 | "name": "Get DNS Zone (lab)", 156 | "event": [ 157 | { 158 | "listen": "test", 159 | "script": { 160 | "exec": [ 161 | "pm.test(\"Get User's DNS Zone Name\", function() {", 162 | " var jsonData = pm.response.json();", 163 | " pm.environment.set(\"ZONE_NAME\", jsonData.zone);", 164 | "})", 165 | "" 166 | ], 167 | "type": "text/javascript" 168 | } 169 | } 170 | ], 171 | "request": { 172 | "method": "GET", 173 | "header": [ 174 | { 175 | "key": "Content-Type", 176 | "name": "Content-Type", 177 | "type": "text", 178 | "value": "application/json" 179 | }, 180 | { 181 | "key": "Authorization", 182 | "type": "text", 183 | "value": "Bearer {{ACCESS_TOKEN}}" 184 | }, 185 | { 186 | "key": "Labid", 187 | "value": "cslab", 188 | "type": "text" 189 | } 190 | ], 191 | "url": { 192 | "raw": "http://{{DNS_WEB_ADMIN}}/zone", 193 | "protocol": "http", 194 | "host": [ 195 | "{{DNS_WEB_ADMIN}}" 196 | ], 197 | "path": [ 198 | "zone" 199 | ] 200 | } 201 | }, 202 | "response": [] 203 | }, 204 | { 205 | "name": "Get User Membership", 206 | "event": [ 207 | { 208 | "listen": "test", 209 | "script": { 210 | "exec": [ 211 | "pm.test(\"Switch account\", function() {", 212 | " var jsonData = pm.response.json();", 213 | " var accountName = pm.environment.get(\"ACCOUNT_NAME\");", 214 | " for(var i=0; i>\"\n}" 326 | }, 327 | "url": { 328 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-account/accounts/{{ACCOUNT_ID}}/catalogs", 329 | "protocol": "https", 330 | "host": [ 331 | "{{HOSTNAME}}" 332 | ], 333 | "path": [ 334 | "{{API_VERSION}}", 335 | "svc-account", 336 | "accounts", 337 | "{{ACCOUNT_ID}}", 338 | "catalogs" 339 | ] 340 | }, 341 | "description": "Hardcoded catalog ID" 342 | }, 343 | "response": [] 344 | }, 345 | { 346 | "name": "Retrieve Previously Created Subscriptions", 347 | "event": [ 348 | { 349 | "listen": "test", 350 | "script": { 351 | "exec": [ 352 | "pm.test(\"Find previously created subscriptions\", function() {", 353 | " const jsonData = pm.response.json();", 354 | " for(var i=0; i < jsonData.subscriptions.length; i++) {", 355 | " const subscription = jsonData.subscriptions[i];", 356 | " const zoneName = pm.environment.get(\"ZONE_NAME\");", 357 | " if (subscription.service_type === \"adns\" && subscription.service_instance_name === zoneName) {", 358 | " pm.environment.set(\"DNS_SUBSCRIPTION_ID\", subscription.subscription_id);", 359 | " }", 360 | " if (subscription.service_type === \"gslb\" && subscription.service_instance_name === zoneName) {", 361 | " pm.environment.set(\"GSLB_SUBSCRIPTION_ID\", subscription.subscription_id);", 362 | " }", 363 | " if (subscription.service_type === \"waf\" && subscription.service_instance_name === (\"na2-auction.\" + zoneName)) {", 364 | " pm.environment.set(\"WAF_SUBSCRIPTION_ID\", subscription.subscription_id);", 365 | " pm.environment.set(\"WAF_CNAME\", subscription.configuration.details.CNAMEValue);", 366 | " }", 367 | " }", 368 | "})" 369 | ], 370 | "type": "text/javascript" 371 | } 372 | } 373 | ], 374 | "request": { 375 | "method": "GET", 376 | "header": [ 377 | { 378 | "key": "Content-Type", 379 | "name": "Content-Type", 380 | "type": "text", 381 | "value": "application/json" 382 | }, 383 | { 384 | "key": "Authorization", 385 | "type": "text", 386 | "value": "Bearer {{ACCESS_TOKEN}}" 387 | } 388 | ], 389 | "url": { 390 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions?account_id={{ACCOUNT_ID}}", 391 | "protocol": "https", 392 | "host": [ 393 | "{{HOSTNAME}}" 394 | ], 395 | "path": [ 396 | "{{API_VERSION}}", 397 | "svc-subscription", 398 | "subscriptions" 399 | ], 400 | "query": [ 401 | { 402 | "key": "account_id", 403 | "value": "{{ACCOUNT_ID}}" 404 | } 405 | ] 406 | } 407 | }, 408 | "response": [] 409 | } 410 | ] 411 | }, 412 | { 413 | "name": "DNS", 414 | "item": [ 415 | { 416 | "name": "List DNS Subscriptions", 417 | "event": [ 418 | { 419 | "listen": "test", 420 | "script": { 421 | "exec": [ 422 | "" 423 | ], 424 | "type": "text/javascript" 425 | } 426 | } 427 | ], 428 | "request": { 429 | "method": "GET", 430 | "header": [ 431 | { 432 | "key": "Content-Type", 433 | "name": "Content-Type", 434 | "type": "text", 435 | "value": "application/json" 436 | }, 437 | { 438 | "key": "Authorization", 439 | "type": "text", 440 | "value": "Bearer {{ACCESS_TOKEN}}" 441 | } 442 | ], 443 | "url": { 444 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions?account_id={{ACCOUNT_ID}}&catalog_id={{DNS_CATALOG_ID}}&service_type=adns", 445 | "protocol": "https", 446 | "host": [ 447 | "{{HOSTNAME}}" 448 | ], 449 | "path": [ 450 | "{{API_VERSION}}", 451 | "svc-subscription", 452 | "subscriptions" 453 | ], 454 | "query": [ 455 | { 456 | "key": "account_id", 457 | "value": "{{ACCOUNT_ID}}" 458 | }, 459 | { 460 | "key": "catalog_id", 461 | "value": "{{DNS_CATALOG_ID}}" 462 | }, 463 | { 464 | "key": "service_type", 465 | "value": "adns" 466 | } 467 | ] 468 | } 469 | }, 470 | "response": [] 471 | }, 472 | { 473 | "name": "Create DNS Subscription", 474 | "event": [ 475 | { 476 | "listen": "test", 477 | "script": { 478 | "exec": [ 479 | "pm.test(\"Set DNS subscription id variable\", function() {", 480 | " var jsonData = pm.response.json();", 481 | " pm.environment.set(\"DNS_SUBSCRIPTION_ID\", jsonData.subscription_id);", 482 | "})", 483 | "" 484 | ], 485 | "type": "text/javascript" 486 | } 487 | } 488 | ], 489 | "request": { 490 | "method": "POST", 491 | "header": [ 492 | { 493 | "key": "Content-Type", 494 | "name": "Content-Type", 495 | "value": "application/json", 496 | "type": "text" 497 | }, 498 | { 499 | "key": "Authorization", 500 | "value": "Bearer {{ACCESS_TOKEN}}", 501 | "type": "text" 502 | } 503 | ], 504 | "body": { 505 | "mode": "raw", 506 | "raw": "{\n \"account_id\": \"{{ACCOUNT_ID}}\",\n \"catalog_id\": \"{{DNS_CATALOG_ID}}\",\n \"service_instance_name\": \"{{ZONE_NAME}}\",\n \"configuration\": {\n \"adns_service\": {\n \"zone\": \"{{ZONE_NAME}}\",\n \"master_servers\": [\n \"54.211.12.173\"\n ]\n }\n },\n \"service_type\": \"adns\"\n}" 507 | }, 508 | "url": { 509 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions", 510 | "protocol": "https", 511 | "host": [ 512 | "{{HOSTNAME}}" 513 | ], 514 | "path": [ 515 | "{{API_VERSION}}", 516 | "svc-subscription", 517 | "subscriptions" 518 | ] 519 | } 520 | }, 521 | "response": [] 522 | }, 523 | { 524 | "name": "Activate DNS Subscription", 525 | "request": { 526 | "method": "POST", 527 | "header": [ 528 | { 529 | "key": "Content-Type", 530 | "name": "Content-Type", 531 | "type": "text", 532 | "value": "application/json" 533 | }, 534 | { 535 | "key": "Authorization", 536 | "type": "text", 537 | "value": "Bearer {{ACCESS_TOKEN}}" 538 | } 539 | ], 540 | "body": { 541 | "mode": "raw", 542 | "raw": "{\n \"subscription_id\": \"{{DNS_SUBSCRIPTION_ID}}\",\n \"omit_config\": true\n}" 543 | }, 544 | "url": { 545 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{DNS_SUBSCRIPTION_ID}}/activate", 546 | "protocol": "https", 547 | "host": [ 548 | "{{HOSTNAME}}" 549 | ], 550 | "path": [ 551 | "{{API_VERSION}}", 552 | "svc-subscription", 553 | "subscriptions", 554 | "{{DNS_SUBSCRIPTION_ID}}", 555 | "activate" 556 | ] 557 | } 558 | }, 559 | "response": [] 560 | }, 561 | { 562 | "name": "Get DNS Subscription Zones", 563 | "event": [ 564 | { 565 | "listen": "test", 566 | "script": { 567 | "exec": [ 568 | "" 569 | ], 570 | "type": "text/javascript" 571 | } 572 | } 573 | ], 574 | "request": { 575 | "method": "POST", 576 | "header": [ 577 | { 578 | "key": "Content-Type", 579 | "name": "Content-Type", 580 | "type": "text", 581 | "value": "application/json" 582 | }, 583 | { 584 | "key": "Authorization", 585 | "type": "text", 586 | "value": "Bearer {{ACCESS_TOKEN}}" 587 | } 588 | ], 589 | "url": { 590 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{DNS_SUBSCRIPTION_ID}}/test", 591 | "protocol": "https", 592 | "host": [ 593 | "{{HOSTNAME}}" 594 | ], 595 | "path": [ 596 | "{{API_VERSION}}", 597 | "svc-subscription", 598 | "subscriptions", 599 | "{{DNS_SUBSCRIPTION_ID}}", 600 | "test" 601 | ] 602 | } 603 | }, 604 | "response": [] 605 | } 606 | ] 607 | }, 608 | { 609 | "name": "DNS Load Balancer", 610 | "item": [ 611 | { 612 | "name": "Create GSLB Subscription", 613 | "event": [ 614 | { 615 | "listen": "test", 616 | "script": { 617 | "exec": [ 618 | "pm.test(\"Set GSLB subscription id variable\", function() {", 619 | " var jsonData = pm.response.json();", 620 | " pm.environment.set(\"GSLB_SUBSCRIPTION_ID\", jsonData.subscription_id);", 621 | "})", 622 | "" 623 | ], 624 | "type": "text/javascript" 625 | } 626 | } 627 | ], 628 | "request": { 629 | "method": "POST", 630 | "header": [ 631 | { 632 | "key": "Content-Type", 633 | "name": "Content-Type", 634 | "type": "text", 635 | "value": "application/json" 636 | }, 637 | { 638 | "key": "Authorization", 639 | "type": "text", 640 | "value": "Bearer {{ACCESS_TOKEN}}" 641 | } 642 | ], 643 | "body": { 644 | "mode": "raw", 645 | "raw": "{\n \"account_id\": \"{{ACCOUNT_ID}}\",\n \"catalog_id\": \"{{GSLB_CATALOG_ID}}\",\n \"service_instance_name\": \"{{ZONE_NAME}}\",\n \"configuration\": {\n \"gslb_service\": {\n \"zone\": \"{{ZONE_NAME}}\",\n \"load_balanced_records\": {\n \"lbrs_auction\": {\n \"aliases\": [\n \"auction\"\n ],\n \"display_name\": \"auction.{{ZONE_NAME}}\",\n \"enable\": true,\n \"persistence\": false,\n \"proximity_rules\": [\n {\n \"pool\": \"pools_usa\",\n \"region\": \"regions_usa\",\n \"score\": 1\n }\n ],\n \"rr_type\": \"A\"\n }\n },\n \"pools\": {\n \"pools_usa\": {\n \"display_name\": \"usa\",\n \"enable\": true,\n \"load_balancing_mode\": \"round-robin\",\n \"max_answers\": 1,\n \"members\": [\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_na1_auction\"\n }\n ],\n \"remark\": \"\",\n \"rr_type\": \"A\",\n \"ttl\": 30\n }\n },\n \"regions\": {\n \"regions_usa\": {\n \"display_name\": \"usa\",\n \"sectors\": [\n {\n \"code\": \"NA\",\n \"scale\": \"continent\"\n }\n ]\n }\n },\n \"virtual_servers\": {\n \"ipEndpoint_na1_auction\": {\n \"address\": \"34.229.48.248\",\n \"display_name\": \"na1-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n }\n }\n }\n },\n \"service_type\": \"gslb\"\n}" 646 | }, 647 | "url": { 648 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions", 649 | "protocol": "https", 650 | "host": [ 651 | "{{HOSTNAME}}" 652 | ], 653 | "path": [ 654 | "{{API_VERSION}}", 655 | "svc-subscription", 656 | "subscriptions" 657 | ] 658 | } 659 | }, 660 | "response": [] 661 | }, 662 | { 663 | "name": "Activate GSLB Subscription", 664 | "request": { 665 | "method": "POST", 666 | "header": [ 667 | { 668 | "key": "Content-Type", 669 | "name": "Content-Type", 670 | "type": "text", 671 | "value": "application/json" 672 | }, 673 | { 674 | "key": "Authorization", 675 | "type": "text", 676 | "value": "Bearer {{ACCESS_TOKEN}}" 677 | } 678 | ], 679 | "body": { 680 | "mode": "raw", 681 | "raw": "{\n \"subscription_id\": \"{{GSLB_SUBSCRIPTION_ID}}\",\n \"omit_config\": true\n}" 682 | }, 683 | "url": { 684 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{GSLB_SUBSCRIPTION_ID}}/activate", 685 | "protocol": "https", 686 | "host": [ 687 | "{{HOSTNAME}}" 688 | ], 689 | "path": [ 690 | "{{API_VERSION}}", 691 | "svc-subscription", 692 | "subscriptions", 693 | "{{GSLB_SUBSCRIPTION_ID}}", 694 | "activate" 695 | ] 696 | } 697 | }, 698 | "response": [] 699 | }, 700 | { 701 | "name": "Test NA Availability (lab)", 702 | "request": { 703 | "method": "POST", 704 | "header": [ 705 | { 706 | "key": "Content-Type", 707 | "name": "Content-Type", 708 | "value": "application/json", 709 | "type": "text" 710 | }, 711 | { 712 | "key": "Authorization", 713 | "value": "Bearer {{ACCESS_TOKEN}}", 714 | "type": "text" 715 | }, 716 | { 717 | "key": "Labid", 718 | "value": "cslab", 719 | "type": "text" 720 | } 721 | ], 722 | "body": { 723 | "mode": "raw", 724 | "raw": "{\n\t\"domain\": \"auction.{{ZONE_NAME}}\"\n}" 725 | }, 726 | "url": { 727 | "raw": "http://{{DNS_WEB_ADMIN}}/proxy/northamerica", 728 | "protocol": "http", 729 | "host": [ 730 | "{{DNS_WEB_ADMIN}}" 731 | ], 732 | "path": [ 733 | "proxy", 734 | "northamerica" 735 | ] 736 | } 737 | }, 738 | "response": [] 739 | }, 740 | { 741 | "name": "Add Endpoints & Pool Members", 742 | "request": { 743 | "method": "PUT", 744 | "header": [ 745 | { 746 | "key": "Content-Type", 747 | "name": "Content-Type", 748 | "type": "text", 749 | "value": "application/json" 750 | }, 751 | { 752 | "key": "Authorization", 753 | "type": "text", 754 | "value": "Bearer {{ACCESS_TOKEN}}" 755 | } 756 | ], 757 | "body": { 758 | "mode": "raw", 759 | "raw": "{\n \"subscription_id\": \"{{GSLB_SUBSCRIPTION_ID}}\",\n \"account_id\": \"{{ACCOUNT_ID}}\",\n \"catalog_id\": \"{{GSLB_CATALOG_ID}}\",\n \"service_instance_name\": \"{{ZONE_NAME}}\",\n \"configuration\": {\n \"gslb_service\": {\n \"zone\": \"{{ZONE_NAME}}\",\n \"load_balanced_records\": {\n \"lbrs_auction\": {\n \"aliases\": [\n \"auction\"\n ],\n \"display_name\": \"auction.{{ZONE_NAME}}\",\n \"enable\": true,\n \"persistence\": false,\n \"proximity_rules\": [\n {\n \"pool\": \"pools_usa\",\n \"region\": \"global\",\n \"score\": 1\n },\n {\n \"pool\": \"pools_europe\",\n \"region\": \"global\",\n \"score\": 1\n },\n {\n \"pool\": \"pools_australia\",\n \"region\": \"global\",\n \"score\": 1\n }\n ],\n \"rr_type\": \"A\"\n }\n },\n \"pools\": {\n \"pools_usa\": {\n \"display_name\": \"usa\",\n \"enable\": true,\n \"load_balancing_mode\": \"round-robin\",\n \"max_answers\": 1,\n \"members\": [\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_na1_auction\"\n },\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_na2_auction\"\n },\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_na3_auction\"\n }\n ],\n \"remark\": \"\",\n \"rr_type\": \"A\",\n \"ttl\": 30\n },\n \"pools_europe\": {\n \"display_name\": \"europe\",\n \"enable\": true,\n \"load_balancing_mode\": \"round-robin\",\n \"max_answers\": 1,\n \"members\": [\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_eu_auction\"\n }\n ],\n \"remark\": \"\",\n \"rr_type\": \"A\",\n \"ttl\": 30\n },\n \"pools_australia\": {\n \"display_name\": \"australia\",\n \"enable\": true,\n \"load_balancing_mode\": \"round-robin\",\n \"max_answers\": 1,\n \"members\": [\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_au_auction\"\n }\n ],\n \"remark\": \"\",\n \"rr_type\": \"A\",\n \"ttl\": 30\n }\n },\n \"virtual_servers\": {\n \"ipEndpoint_na1_auction\": {\n \"address\": \"34.229.48.248\",\n \"display_name\": \"na1-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n },\n \"ipEndpoint_eu_auction\": {\n \"address\": \"35.180.122.91\",\n \"display_name\": \"eu1-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n },\n \"ipEndpoint_na2_auction\": {\n \"address\": \"18.232.64.254\",\n \"display_name\": \"na2-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n },\n \"ipEndpoint_na3_auction\": {\n \"address\": \"52.249.252.91\",\n \"display_name\": \"na3-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n },\n \"ipEndpoint_au_auction\": {\n \"address\": \"54.206.13.195\",\n \"display_name\": \"au-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n }\n }\n }\n }\n}" 760 | }, 761 | "url": { 762 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{GSLB_SUBSCRIPTION_ID}}", 763 | "protocol": "https", 764 | "host": [ 765 | "{{HOSTNAME}}" 766 | ], 767 | "path": [ 768 | "{{API_VERSION}}", 769 | "svc-subscription", 770 | "subscriptions", 771 | "{{GSLB_SUBSCRIPTION_ID}}" 772 | ] 773 | } 774 | }, 775 | "response": [] 776 | }, 777 | { 778 | "name": "Test Round Robin (lab)", 779 | "request": { 780 | "method": "POST", 781 | "header": [ 782 | { 783 | "key": "Content-Type", 784 | "name": "Content-Type", 785 | "value": "application/json", 786 | "type": "text" 787 | }, 788 | { 789 | "key": "Authorization", 790 | "value": "Bearer {{ACCESS_TOKEN}}", 791 | "type": "text" 792 | }, 793 | { 794 | "key": "Labid", 795 | "value": "cslab", 796 | "type": "text" 797 | } 798 | ], 799 | "body": { 800 | "mode": "raw", 801 | "raw": "{\n\t\"domain\": \"auction.{{ZONE_NAME}}\"\n}" 802 | }, 803 | "url": { 804 | "raw": "http://{{DNS_WEB_ADMIN}}/proxy/northamerica", 805 | "protocol": "http", 806 | "host": [ 807 | "{{DNS_WEB_ADMIN}}" 808 | ], 809 | "path": [ 810 | "proxy", 811 | "northamerica" 812 | ] 813 | } 814 | }, 815 | "response": [] 816 | }, 817 | { 818 | "name": "Update Proximity Rules & Regions", 819 | "request": { 820 | "method": "PUT", 821 | "header": [ 822 | { 823 | "key": "Content-Type", 824 | "name": "Content-Type", 825 | "type": "text", 826 | "value": "application/json" 827 | }, 828 | { 829 | "key": "Authorization", 830 | "type": "text", 831 | "value": "Bearer {{ACCESS_TOKEN}}" 832 | } 833 | ], 834 | "body": { 835 | "mode": "raw", 836 | "raw": "{\n \"subscription_id\": \"{{GSLB_SUBSCRIPTION_ID}}\",\n \"account_id\": \"{{ACCOUNT_ID}}\",\n \"catalog_id\": \"{{GSLB_CATALOG_ID}}\",\n \"service_instance_name\": \"{{ZONE_NAME}}\",\n \"configuration\": {\n \"gslb_service\": {\n \"zone\": \"{{ZONE_NAME}}\",\n \"load_balanced_records\": {\n \"lbrs_auction\": {\n \"aliases\": [\n \"auction\"\n ],\n \"display_name\": \"auction.{{ZONE_NAME}}\",\n \"enable\": true,\n \"persistence\": false,\n \"proximity_rules\": [\n {\n \"pool\": \"pools_usa\",\n \"region\": \"regions_usa\",\n \"score\": 1\n },\n {\n \"pool\": \"pools_europe\",\n \"region\": \"regions_europe\",\n \"score\": 50\n },\n {\n \"pool\": \"pools_australia\",\n \"region\": \"regions_australia\",\n \"score\": 50\n }\n ],\n \"rr_type\": \"A\"\n }\n },\n \"pools\": {\n \"pools_usa\": {\n \"display_name\": \"usa\",\n \"enable\": true,\n \"load_balancing_mode\": \"round-robin\",\n \"max_answers\": 1,\n \"members\": [\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_na1_auction\"\n },\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_na2_auction\"\n },\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_na3_auction\"\n }\n ],\n \"remark\": \"\",\n \"rr_type\": \"A\",\n \"ttl\": 30\n },\n \"pools_europe\": {\n \"display_name\": \"europe\",\n \"enable\": true,\n \"load_balancing_mode\": \"round-robin\",\n \"max_answers\": 1,\n \"members\": [\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_eu_auction\"\n }\n ],\n \"remark\": \"\",\n \"rr_type\": \"A\",\n \"ttl\": 30\n },\n \"pools_australia\": {\n \"display_name\": \"australia\",\n \"enable\": true,\n \"load_balancing_mode\": \"round-robin\",\n \"max_answers\": 1,\n \"members\": [\n {\n \"final\": null,\n \"monitor\": \"basic\",\n \"virtual_server\": \"ipEndpoint_au_auction\"\n }\n ],\n \"remark\": \"\",\n \"rr_type\": \"A\",\n \"ttl\": 30\n }\n },\n \"regions\": {\n \"regions_europe\": {\n \"display_name\": \"europe\",\n \"sectors\": [\n {\n \"code\": \"EU\",\n \"scale\": \"continent\"\n }\n ]\n },\n \"regions_usa\": {\n \"display_name\": \"usa\",\n \"sectors\": [\n {\n \"code\": \"NA\",\n \"scale\": \"continent\"\n }\n ]\n },\n \"regions_australia\": {\n \"display_name\": \"australia\",\n \"sectors\": [\n {\n \"code\": \"AU\",\n \"scale\": \"continent\"\n }\n ]\n }\n },\n \"virtual_servers\": {\n \"ipEndpoint_na1_auction\": {\n \"address\": \"34.229.48.248\",\n \"display_name\": \"na1-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n },\n \"ipEndpoint_eu_auction\": {\n \"address\": \"35.180.122.91\",\n \"display_name\": \"eu1-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n },\n \"ipEndpoint_na2_auction\": {\n \"address\": \"18.232.64.254\",\n \"display_name\": \"na2-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n },\n \"ipEndpoint_na3_auction\": {\n \"address\": \"52.249.252.91\",\n \"display_name\": \"na3-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n },\n \"ipEndpoint_au_auction\": {\n \"address\": \"54.206.13.195\",\n \"display_name\": \"au-auction\",\n \"monitor\": \"none\",\n \"port\": 80\n }\n },\n \"regions\": {\n \"regions_europe\": {\n \"display_name\": \"europe\",\n \"sectors\": [\n {\n \"code\": \"EU\",\n \"scale\": \"continent\"\n }\n ]\n },\n \"regions_australia\": {\n \"display_name\": \"australia\",\n \"sectors\": [\n {\n \"scale\": \"continent\",\n \"code\": \"OC\"\n }\n ]\n },\n \"regions_usa\": {\n \"display_name\": \"usa\",\n \"sectors\": [\n {\n \"code\": \"NA\",\n \"scale\": \"continent\"\n }\n ]\n }\n }\n }\n },\n \"service_type\": \"gslb\"\n}" 837 | }, 838 | "url": { 839 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{GSLB_SUBSCRIPTION_ID}}", 840 | "protocol": "https", 841 | "host": [ 842 | "{{HOSTNAME}}" 843 | ], 844 | "path": [ 845 | "{{API_VERSION}}", 846 | "svc-subscription", 847 | "subscriptions", 848 | "{{GSLB_SUBSCRIPTION_ID}}" 849 | ] 850 | } 851 | }, 852 | "response": [] 853 | }, 854 | { 855 | "name": "Test Proximity Rules (lab)", 856 | "request": { 857 | "method": "POST", 858 | "header": [ 859 | { 860 | "key": "Content-Type", 861 | "name": "Content-Type", 862 | "type": "text", 863 | "value": "application/json" 864 | }, 865 | { 866 | "key": "Authorization", 867 | "type": "text", 868 | "value": "Bearer {{ACCESS_TOKEN}}" 869 | }, 870 | { 871 | "key": "Labid", 872 | "value": "cslab", 873 | "type": "text" 874 | } 875 | ], 876 | "body": { 877 | "mode": "raw", 878 | "raw": "{\n\t\"domain\": \"auction.{{ZONE_NAME}}\"\n}" 879 | }, 880 | "url": { 881 | "raw": "http://{{DNS_WEB_ADMIN}}/proxy/europe", 882 | "protocol": "http", 883 | "host": [ 884 | "{{DNS_WEB_ADMIN}}" 885 | ], 886 | "path": [ 887 | "proxy", 888 | "europe" 889 | ] 890 | } 891 | }, 892 | "response": [] 893 | } 894 | ] 895 | }, 896 | { 897 | "name": "Essential App Protect", 898 | "item": [ 899 | { 900 | "name": "Create EAP Subscription", 901 | "event": [ 902 | { 903 | "listen": "test", 904 | "script": { 905 | "exec": [ 906 | "pm.test(\"Set EAP subscription id variable\", function() {", 907 | " var jsonData = pm.response.json();", 908 | " pm.environment.set(\"WAF_SUBSCRIPTION_ID\", jsonData.subscription_id);", 909 | "})", 910 | "" 911 | ], 912 | "type": "text/javascript" 913 | } 914 | } 915 | ], 916 | "request": { 917 | "method": "POST", 918 | "header": [ 919 | { 920 | "key": "Content-Type", 921 | "name": "Content-Type", 922 | "type": "text", 923 | "value": "application/json" 924 | }, 925 | { 926 | "key": "Authorization", 927 | "type": "text", 928 | "value": "Bearer {{ACCESS_TOKEN}}" 929 | } 930 | ], 931 | "body": { 932 | "mode": "raw", 933 | "raw": "{\n \"account_id\": \"{{ACCOUNT_ID}}\",\n \"catalog_id\": \"{{WAF_CATALOG_ID}}\",\n \"service_instance_name\": \"na2-auction.{{ZONE_NAME}}\",\n \"configuration\": {\n \"waf_service\": {\n \"application\": {\n \"description\": \"na2-auction.{{ZONE_NAME}}\",\n \"fqdn\": \"na2-auction.{{ZONE_NAME}}\",\n \"http\": {\n \"enabled\": true,\n \"port\": 80\n },\n \"https\": {\n \"enabled\": false,\n \"port\": 443,\n \"tls\": {\n \"certificate_id\": \"\"\n }\n },\n \"waf_regions\": {\n \"aws\": {\n \"us-east-1\": {\n \"endpoint\": {\n \"http\": {\n \"port\": 80,\n \"enabled\": true\n },\n \"ips\": [\n \"18.232.64.254\"\n ]\n }\n }\n }\n }\n },\n \"policy\": {\n \"encoding\": \"utf-8\",\n \"threat_campaigns\": {\n \"enabled\": true,\n \"enforcement_mode\": \"monitoring\"\n },\n \"compliance_enforcement\": {\n \"data_guard\": {\n \"enabled\": true,\n \"cc\": true,\n \"ssn\": true\n },\n \"sensitive_parameters\": {\n \"enabled\": true,\n \"parameters\": [\n \"cc_id\",\n \"creditcard\",\n \"passwd\",\n \"password\"\n ],\n \"xml_attributes\": [],\n \"xml_elements\": []\n }\n },\n \"high_risk_attack_mitigation\": {\n \"enabled\": true,\n \"enforcement_mode\": \"monitoring\",\n \"signature_enforcement\": {\n \"enabled\": true\n },\n \"allowed_methods\": {\n \"enabled\": true,\n \"methods\": [\n {\n \"name\": \"GET\"\n },\n {\n \"name\": \"POST\"\n },\n {\n \"name\": \"HEAD\"\n }\n ]\n },\n \"disallowed_file_types\": {\n \"enabled\": true,\n \"file_types\": [\n \"back\",\n \"bat\",\n \"bck\",\n \"bin\",\n \"cfg\",\n \"cmd\",\n \"com\",\n \"config\",\n \"dat\",\n \"dll\",\n \"eml\",\n \"exe\",\n \"exe1\",\n \"exe_renamed\",\n \"hta\",\n \"htr\",\n \"htw\",\n \"ida\",\n \"idc\",\n \"idq\",\n \"ini\",\n \"old\",\n \"sav\",\n \"save\"\n ]\n },\n \"api_compliance_enforcement\": {\n \"enabled\": true\n },\n \"http_compliance_enforcement\": {\n \"enabled\": true\n },\n \"websocket_compliance_enforcement\": {\n \"enabled\": true\n },\n \"geolocation_enforcement\": {\n \"disallowed_country_codes\": [\n \"CU\",\n \"IR\",\n \"KP\",\n \"LY\",\n \"SD\",\n \"SY\"\n ],\n \"enabled\": true\n },\n \"ip_enforcement\": {\n \"enabled\": true,\n \"ips\": []\n }\n },\n \"malicious_ip_enforcement\": {\n \"enabled\": true,\n \"enforcement_mode\": \"monitoring\",\n \"ip_categories\": [\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"mobile_threats\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"cloud_services\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"anonymous_proxies\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"phishing_proxies\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"infected_sources\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"denial_of_service\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"scanners\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"bot_nets\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"web_attacks\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"windows_exploits\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"spam_sources\"\n }\n ]\n }\n }\n }\n },\n \"service_type\": \"waf\"\n}" 934 | }, 935 | "url": { 936 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions", 937 | "protocol": "https", 938 | "host": [ 939 | "{{HOSTNAME}}" 940 | ], 941 | "path": [ 942 | "{{API_VERSION}}", 943 | "svc-subscription", 944 | "subscriptions" 945 | ] 946 | } 947 | }, 948 | "response": [] 949 | }, 950 | { 951 | "name": "Activate EAP Subscription", 952 | "request": { 953 | "method": "POST", 954 | "header": [ 955 | { 956 | "key": "Content-Type", 957 | "name": "Content-Type", 958 | "type": "text", 959 | "value": "application/json" 960 | }, 961 | { 962 | "key": "Authorization", 963 | "type": "text", 964 | "value": "Bearer {{ACCESS_TOKEN}}" 965 | } 966 | ], 967 | "body": { 968 | "mode": "raw", 969 | "raw": "{\n \"subscription_id\": \"{{WAF_SUBSCRIPTION_ID}}\",\n \"omit_config\": true\n}" 970 | }, 971 | "url": { 972 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{WAF_SUBSCRIPTION_ID}}/activate", 973 | "protocol": "https", 974 | "host": [ 975 | "{{HOSTNAME}}" 976 | ], 977 | "path": [ 978 | "{{API_VERSION}}", 979 | "svc-subscription", 980 | "subscriptions", 981 | "{{WAF_SUBSCRIPTION_ID}}", 982 | "activate" 983 | ] 984 | } 985 | }, 986 | "response": [] 987 | }, 988 | { 989 | "name": "Get EAP Subscription", 990 | "event": [ 991 | { 992 | "listen": "test", 993 | "script": { 994 | "exec": [ 995 | "pm.test(\"Set EAP variables\", function() {", 996 | " var jsonData = pm.response.json();", 997 | " pm.environment.set(\"WAF_SERVICE_INSTANCE_ID\", jsonData.service_instance_id);", 998 | " pm.environment.set(\"WAF_CNAME\", jsonData.configuration.details.CNAMEValue);", 999 | "})", 1000 | "" 1001 | ], 1002 | "type": "text/javascript" 1003 | } 1004 | } 1005 | ], 1006 | "request": { 1007 | "method": "GET", 1008 | "header": [ 1009 | { 1010 | "key": "Content-Type", 1011 | "name": "Content-Type", 1012 | "type": "text", 1013 | "value": "application/json" 1014 | }, 1015 | { 1016 | "key": "Authorization", 1017 | "type": "text", 1018 | "value": "Bearer {{ACCESS_TOKEN}}" 1019 | } 1020 | ], 1021 | "url": { 1022 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{WAF_SUBSCRIPTION_ID}}", 1023 | "protocol": "https", 1024 | "host": [ 1025 | "{{HOSTNAME}}" 1026 | ], 1027 | "path": [ 1028 | "{{API_VERSION}}", 1029 | "svc-subscription", 1030 | "subscriptions", 1031 | "{{WAF_SUBSCRIPTION_ID}}" 1032 | ] 1033 | } 1034 | }, 1035 | "response": [] 1036 | }, 1037 | { 1038 | "name": "Update EAP CNAME (lab)", 1039 | "request": { 1040 | "method": "POST", 1041 | "header": [ 1042 | { 1043 | "key": "Content-Type", 1044 | "name": "Content-Type", 1045 | "type": "text", 1046 | "value": "application/json" 1047 | }, 1048 | { 1049 | "key": "Authorization", 1050 | "type": "text", 1051 | "value": "Bearer {{ACCESS_TOKEN}}" 1052 | }, 1053 | { 1054 | "key": "Labid", 1055 | "value": "cslab", 1056 | "type": "text" 1057 | } 1058 | ], 1059 | "body": { 1060 | "mode": "raw", 1061 | "raw": "{\n\t\"name\": \"na2-auction\",\n\t\"type\": \"CNAME\",\n\t\"value\": \"{{WAF_CNAME}}\"\n}" 1062 | }, 1063 | "url": { 1064 | "raw": "http://{{DNS_WEB_ADMIN}}/record", 1065 | "protocol": "http", 1066 | "host": [ 1067 | "{{DNS_WEB_ADMIN}}" 1068 | ], 1069 | "path": [ 1070 | "record" 1071 | ] 1072 | } 1073 | }, 1074 | "response": [] 1075 | }, 1076 | { 1077 | "name": "Start EAP Attack (lab)", 1078 | "request": { 1079 | "method": "POST", 1080 | "header": [ 1081 | { 1082 | "key": "Content-Type", 1083 | "name": "Content-Type", 1084 | "type": "text", 1085 | "value": "application/json" 1086 | }, 1087 | { 1088 | "key": "Authorization", 1089 | "type": "text", 1090 | "value": "Bearer {{ACCESS_TOKEN}}" 1091 | }, 1092 | { 1093 | "key": "Labid", 1094 | "value": "cslab", 1095 | "type": "text" 1096 | } 1097 | ], 1098 | "body": { 1099 | "mode": "raw", 1100 | "raw": "{\n\t\"domain\": \"na2-auction.{{ZONE_NAME}}\"\n}" 1101 | }, 1102 | "url": { 1103 | "raw": "http://{{DNS_WEB_ADMIN}}/attack", 1104 | "protocol": "http", 1105 | "host": [ 1106 | "{{DNS_WEB_ADMIN}}" 1107 | ], 1108 | "path": [ 1109 | "attack" 1110 | ] 1111 | } 1112 | }, 1113 | "response": [] 1114 | }, 1115 | { 1116 | "name": "Get EAP Events Stream", 1117 | "request": { 1118 | "method": "POST", 1119 | "header": [ 1120 | { 1121 | "key": "Content-Type", 1122 | "name": "Content-Type", 1123 | "type": "text", 1124 | "value": "application/json" 1125 | }, 1126 | { 1127 | "key": "Authorization", 1128 | "type": "text", 1129 | "value": "Bearer {{ACCESS_TOKEN}}" 1130 | } 1131 | ], 1132 | "body": { 1133 | "mode": "raw", 1134 | "raw": "{\n\t\"subscription_id\":\"{{WAF_SUBSCRIPTION_ID}}\",\n\t\"service_instance_id\":\"{{WAF_SERVICE_INSTANCE_ID}}\"\n}" 1135 | }, 1136 | "url": { 1137 | "raw": "https://{{HOSTNAME}}/waf/v1/analytics/security/events", 1138 | "protocol": "https", 1139 | "host": [ 1140 | "{{HOSTNAME}}" 1141 | ], 1142 | "path": [ 1143 | "waf", 1144 | "v1", 1145 | "analytics", 1146 | "security", 1147 | "events" 1148 | ] 1149 | } 1150 | }, 1151 | "response": [] 1152 | }, 1153 | { 1154 | "name": "Update Monitor to Block", 1155 | "event": [ 1156 | { 1157 | "listen": "test", 1158 | "script": { 1159 | "exec": [ 1160 | "" 1161 | ], 1162 | "type": "text/javascript" 1163 | } 1164 | } 1165 | ], 1166 | "request": { 1167 | "method": "PUT", 1168 | "header": [ 1169 | { 1170 | "key": "Content-Type", 1171 | "name": "Content-Type", 1172 | "type": "text", 1173 | "value": "application/json" 1174 | }, 1175 | { 1176 | "key": "Authorization", 1177 | "type": "text", 1178 | "value": "Bearer {{ACCESS_TOKEN}}" 1179 | } 1180 | ], 1181 | "body": { 1182 | "mode": "raw", 1183 | "raw": "{\n \"account_id\": \"{{ACCOUNT_ID}}\",\n \"catalog_id\": \"{{WAF_CATALOG_ID}}\",\n \"service_instance_name\": \"na2-auction.{{ZONE_NAME}}\",\n \"configuration\": {\n \"waf_service\": {\n \"application\": {\n \"description\": \"na2-auction.{{ZONE_NAME}}\",\n \"fqdn\": \"na2-auction.{{ZONE_NAME}}\",\n \"http\": {\n \"enabled\": true,\n \"port\": 80\n },\n \"https\": {\n \"enabled\": false,\n \"port\": 443,\n \"tls\": {\n \"certificate_id\": \"\"\n }\n },\n \"waf_regions\": {\n \"aws\": {\n \"us-east-1\": {\n \"endpoint\": {\n \"http\": {\n \"port\": 80,\n \"enabled\": true\n },\n \"ips\": [\n \"18.232.64.254\"\n ]\n }\n }\n }\n }\n },\n \"policy\": {\n \"encoding\": \"utf-8\",\n \"threat_campaigns\": {\n \"enabled\": true,\n \"enforcement_mode\": \"blocking\"\n },\n \"compliance_enforcement\": {\n \"data_guard\": {\n \"enabled\": true,\n \"cc\": true,\n \"ssn\": true\n },\n \"sensitive_parameters\": {\n \"enabled\": true,\n \"parameters\": [\n \"cc_id\",\n \"creditcard\",\n \"passwd\",\n \"password\"\n ],\n \"xml_attributes\": [],\n \"xml_elements\": []\n }\n },\n \"high_risk_attack_mitigation\": {\n \"enabled\": true,\n \"enforcement_mode\": \"blocking\",\n \"signature_enforcement\": {\n \"enabled\": true\n },\n \"allowed_methods\": {\n \"enabled\": true,\n \"methods\": [\n {\n \"name\": \"GET\"\n },\n {\n \"name\": \"POST\"\n },\n {\n \"name\": \"HEAD\"\n }\n ]\n },\n \"disallowed_file_types\": {\n \"enabled\": true,\n \"file_types\": [\n \"back\",\n \"bat\",\n \"bck\",\n \"bin\",\n \"cfg\",\n \"cmd\",\n \"com\",\n \"config\",\n \"dat\",\n \"dll\",\n \"eml\",\n \"exe\",\n \"exe1\",\n \"exe_renamed\",\n \"hta\",\n \"htr\",\n \"htw\",\n \"ida\",\n \"idc\",\n \"idq\",\n \"ini\",\n \"old\",\n \"sav\",\n \"save\"\n ]\n },\n \"api_compliance_enforcement\": {\n \"enabled\": true\n },\n \"http_compliance_enforcement\": {\n \"enabled\": true\n },\n \"websocket_compliance_enforcement\": {\n \"enabled\": true\n },\n \"geolocation_enforcement\": {\n \"disallowed_country_codes\": [\n \"CU\",\n \"IR\",\n \"KP\",\n \"LY\",\n \"SD\",\n \"SY\"\n ],\n \"enabled\": true\n },\n \"ip_enforcement\": {\n \"enabled\": true,\n \"ips\": []\n }\n },\n \"malicious_ip_enforcement\": {\n \"enabled\": true,\n \"enforcement_mode\": \"blocking\",\n \"ip_categories\": [\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"mobile_threats\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"cloud_services\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"anonymous_proxies\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"phishing_proxies\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"infected_sources\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"denial_of_service\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"scanners\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"bot_nets\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"web_attacks\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"windows_exploits\"\n },\n {\n \"block\": true,\n \"log\": true,\n \"name\": \"spam_sources\"\n }\n ]\n }\n }\n },\n \"update_comment\": \"update monitor to block\"\n },\n \"service_type\": \"waf\"\n}" 1184 | }, 1185 | "url": { 1186 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{WAF_SUBSCRIPTION_ID}}", 1187 | "protocol": "https", 1188 | "host": [ 1189 | "{{HOSTNAME}}" 1190 | ], 1191 | "path": [ 1192 | "{{API_VERSION}}", 1193 | "svc-subscription", 1194 | "subscriptions", 1195 | "{{WAF_SUBSCRIPTION_ID}}" 1196 | ] 1197 | } 1198 | }, 1199 | "response": [] 1200 | }, 1201 | { 1202 | "name": "Attack: SQL Injection", 1203 | "request": { 1204 | "method": "GET", 1205 | "header": [ 1206 | { 1207 | "key": "User-Agent", 1208 | "value": "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)", 1209 | "type": "text" 1210 | }, 1211 | { 1212 | "key": "Connection", 1213 | "value": "close", 1214 | "type": "text" 1215 | } 1216 | ], 1217 | "url": { 1218 | "raw": "http://na2-auction.{{ZONE_NAME}}/vulnerabilities/sqli/?id=%25%27+or+0%3D0&Submit=Submit", 1219 | "protocol": "http", 1220 | "host": [ 1221 | "na2-auction", 1222 | "{{ZONE_NAME}}" 1223 | ], 1224 | "path": [ 1225 | "vulnerabilities", 1226 | "sqli", 1227 | "" 1228 | ], 1229 | "query": [ 1230 | { 1231 | "key": "id", 1232 | "value": "%25%27+or+0%3D0" 1233 | }, 1234 | { 1235 | "key": "Submit", 1236 | "value": "Submit" 1237 | } 1238 | ] 1239 | } 1240 | }, 1241 | "response": [] 1242 | }, 1243 | { 1244 | "name": "Attack: Illegal Filetype", 1245 | "request": { 1246 | "method": "GET", 1247 | "header": [ 1248 | { 1249 | "key": "User-Agent", 1250 | "value": "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)", 1251 | "type": "text" 1252 | }, 1253 | { 1254 | "key": "Connection", 1255 | "value": "close", 1256 | "type": "text" 1257 | } 1258 | ], 1259 | "url": { 1260 | "raw": "http://na2-auction.{{ZONE_NAME}}/nginx.config", 1261 | "protocol": "http", 1262 | "host": [ 1263 | "na2-auction", 1264 | "{{ZONE_NAME}}" 1265 | ], 1266 | "path": [ 1267 | "nginx.config" 1268 | ] 1269 | } 1270 | }, 1271 | "response": [] 1272 | }, 1273 | { 1274 | "name": "Attack: Threat Campaign", 1275 | "request": { 1276 | "method": "GET", 1277 | "header": [ 1278 | { 1279 | "key": "User-Agent", 1280 | "value": "Mozilla/3.0 (compatible; Indy Library)", 1281 | "type": "text" 1282 | }, 1283 | { 1284 | "key": "X-Virtual-Server-Port", 1285 | "value": "8080", 1286 | "type": "text" 1287 | }, 1288 | { 1289 | "key": "Authorization", 1290 | "value": "Basic Og==", 1291 | "type": "text" 1292 | }, 1293 | { 1294 | "key": "Connection", 1295 | "value": "close", 1296 | "type": "text" 1297 | } 1298 | ], 1299 | "url": { 1300 | "raw": "http://na2-auction.{{ZONE_NAME}}/manager/html", 1301 | "protocol": "http", 1302 | "host": [ 1303 | "na2-auction", 1304 | "{{ZONE_NAME}}" 1305 | ], 1306 | "path": [ 1307 | "manager", 1308 | "html" 1309 | ] 1310 | } 1311 | }, 1312 | "response": [] 1313 | } 1314 | ] 1315 | }, 1316 | { 1317 | "name": "Clean Up", 1318 | "item": [ 1319 | { 1320 | "name": "Retire DNS Subscription", 1321 | "event": [ 1322 | { 1323 | "listen": "test", 1324 | "script": { 1325 | "exec": [ 1326 | "" 1327 | ], 1328 | "type": "text/javascript" 1329 | } 1330 | } 1331 | ], 1332 | "request": { 1333 | "method": "POST", 1334 | "header": [ 1335 | { 1336 | "key": "Content-Type", 1337 | "name": "Content-Type", 1338 | "type": "text", 1339 | "value": "application/json" 1340 | }, 1341 | { 1342 | "key": "Authorization", 1343 | "type": "text", 1344 | "value": "Bearer {{ACCESS_TOKEN}}" 1345 | } 1346 | ], 1347 | "body": { 1348 | "mode": "raw", 1349 | "raw": "{\n \"subscription_id\": \"{{DNS_SUBSCRIPTION_ID}}\",\n \"omit_config\": true\n}" 1350 | }, 1351 | "url": { 1352 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{DNS_SUBSCRIPTION_ID}}/retire", 1353 | "protocol": "https", 1354 | "host": [ 1355 | "{{HOSTNAME}}" 1356 | ], 1357 | "path": [ 1358 | "{{API_VERSION}}", 1359 | "svc-subscription", 1360 | "subscriptions", 1361 | "{{DNS_SUBSCRIPTION_ID}}", 1362 | "retire" 1363 | ] 1364 | } 1365 | }, 1366 | "response": [] 1367 | }, 1368 | { 1369 | "name": "Retire GSLB Subscription", 1370 | "event": [ 1371 | { 1372 | "listen": "test", 1373 | "script": { 1374 | "exec": [ 1375 | "" 1376 | ], 1377 | "type": "text/javascript" 1378 | } 1379 | } 1380 | ], 1381 | "request": { 1382 | "method": "POST", 1383 | "header": [ 1384 | { 1385 | "key": "Content-Type", 1386 | "name": "Content-Type", 1387 | "type": "text", 1388 | "value": "application/json" 1389 | }, 1390 | { 1391 | "key": "Authorization", 1392 | "type": "text", 1393 | "value": "Bearer {{ACCESS_TOKEN}}" 1394 | } 1395 | ], 1396 | "body": { 1397 | "mode": "raw", 1398 | "raw": "{\n \"subscription_id\": \"{{GSLB_SUBSCRIPTION_ID}}\",\n \"omit_config\": true\n}" 1399 | }, 1400 | "url": { 1401 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{GSLB_SUBSCRIPTION_ID}}/retire", 1402 | "protocol": "https", 1403 | "host": [ 1404 | "{{HOSTNAME}}" 1405 | ], 1406 | "path": [ 1407 | "{{API_VERSION}}", 1408 | "svc-subscription", 1409 | "subscriptions", 1410 | "{{GSLB_SUBSCRIPTION_ID}}", 1411 | "retire" 1412 | ] 1413 | } 1414 | }, 1415 | "response": [] 1416 | }, 1417 | { 1418 | "name": "Retire EAP Subscription", 1419 | "event": [ 1420 | { 1421 | "listen": "test", 1422 | "script": { 1423 | "exec": [ 1424 | "" 1425 | ], 1426 | "type": "text/javascript" 1427 | } 1428 | } 1429 | ], 1430 | "request": { 1431 | "method": "POST", 1432 | "header": [ 1433 | { 1434 | "key": "Content-Type", 1435 | "name": "Content-Type", 1436 | "type": "text", 1437 | "value": "application/json" 1438 | }, 1439 | { 1440 | "key": "Authorization", 1441 | "type": "text", 1442 | "value": "Bearer {{ACCESS_TOKEN}}" 1443 | } 1444 | ], 1445 | "body": { 1446 | "mode": "raw", 1447 | "raw": "{\n \"subscription_id\": \"{{WAF_SUBSCRIPTION_ID}}\",\n \"omit_config\": true\n}" 1448 | }, 1449 | "url": { 1450 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-subscription/subscriptions/{{WAF_SUBSCRIPTION_ID}}/retire", 1451 | "protocol": "https", 1452 | "host": [ 1453 | "{{HOSTNAME}}" 1454 | ], 1455 | "path": [ 1456 | "{{API_VERSION}}", 1457 | "svc-subscription", 1458 | "subscriptions", 1459 | "{{WAF_SUBSCRIPTION_ID}}", 1460 | "retire" 1461 | ] 1462 | } 1463 | }, 1464 | "response": [] 1465 | }, 1466 | { 1467 | "name": "Retire DNS Zone (lab)", 1468 | "request": { 1469 | "method": "POST", 1470 | "header": [ 1471 | { 1472 | "key": "Authorization", 1473 | "value": "Bearer {{ACCESS_TOKEN}}", 1474 | "type": "text" 1475 | }, 1476 | { 1477 | "key": "Labid", 1478 | "value": "cslab", 1479 | "type": "text" 1480 | } 1481 | ], 1482 | "url": { 1483 | "raw": "http://{{DNS_WEB_ADMIN}}/zone/retire", 1484 | "protocol": "http", 1485 | "host": [ 1486 | "{{DNS_WEB_ADMIN}}" 1487 | ], 1488 | "path": [ 1489 | "zone", 1490 | "retire" 1491 | ] 1492 | } 1493 | }, 1494 | "response": [] 1495 | }, 1496 | { 1497 | "name": "Logout", 1498 | "event": [ 1499 | { 1500 | "listen": "test", 1501 | "script": { 1502 | "exec": [ 1503 | "pm.test(\"Reset token variable\", function() {", 1504 | " pm.environment.set(\"ACCESS_TOKEN\", \"\");", 1505 | "})", 1506 | "" 1507 | ], 1508 | "type": "text/javascript" 1509 | } 1510 | } 1511 | ], 1512 | "request": { 1513 | "method": "POST", 1514 | "header": [ 1515 | { 1516 | "key": "Content-Type", 1517 | "name": "Content-Type", 1518 | "value": "application/json", 1519 | "type": "text" 1520 | } 1521 | ], 1522 | "body": { 1523 | "mode": "raw", 1524 | "raw": "{\n\t\"access_token\": \"{{ACCESS_TOKEN}}\"\n}\n", 1525 | "options": { 1526 | "raw": { 1527 | "language": "json" 1528 | } 1529 | } 1530 | }, 1531 | "url": { 1532 | "raw": "https://{{HOSTNAME}}/{{API_VERSION}}/svc-auth/logout", 1533 | "protocol": "https", 1534 | "host": [ 1535 | "{{HOSTNAME}}" 1536 | ], 1537 | "path": [ 1538 | "{{API_VERSION}}", 1539 | "svc-auth", 1540 | "logout" 1541 | ] 1542 | } 1543 | }, 1544 | "response": [] 1545 | } 1546 | ] 1547 | } 1548 | ] 1549 | } -------------------------------------------------------------------------------- /postman/F5 Cloud Services LAB.postman_environment.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "3a961a9c-d133-4a93-bfbc-1d069c2e93ce", 3 | "name": "F5 Cloud Services LAB", 4 | "values": [ 5 | { 6 | "key": "HOSTNAME", 7 | "value": "api.cloudservices.f5.com", 8 | "enabled": true 9 | }, 10 | { 11 | "key": "API_VERSION", 12 | "value": "v1", 13 | "enabled": true 14 | }, 15 | { 16 | "key": "DNS_WEB_ADMIN", 17 | "value": "54.211.12.173", 18 | "enabled": true 19 | }, 20 | { 21 | "key": "ACCOUNT_NAME", 22 | "value": "", 23 | "enabled": true 24 | }, 25 | { 26 | "key": "USER_EMAIL", 27 | "value": "", 28 | "enabled": true 29 | }, 30 | { 31 | "key": "USER_PASSWORD", 32 | "value": "", 33 | "enabled": true 34 | } 35 | ], 36 | "_postman_variable_scope": "environment", 37 | "_postman_exported_at": "2021-02-03T20:40:40.298Z", 38 | "_postman_exported_using": "Postman/7.36.1" 39 | } --------------------------------------------------------------------------------