diff --git a/docs/class8/_static/lab1-Portal_Console_WebApp.png b/docs/class8/_static/lab1-Portal_Console_WebApp.png new file mode 100644 index 00000000..1d8f0caf Binary files /dev/null and b/docs/class8/_static/lab1-Portal_Console_WebApp.png differ diff --git a/docs/class8/_static/lab1-Portal_Console_WebApp_Firewall.png b/docs/class8/_static/lab1-Portal_Console_WebApp_Firewall.png new file mode 100644 index 00000000..2e98ce8a Binary files /dev/null and b/docs/class8/_static/lab1-Portal_Console_WebApp_Firewall.png differ diff --git a/docs/class8/_static/lab1-Portal_Firewall.png b/docs/class8/_static/lab1-Portal_Firewall.png new file mode 100644 index 00000000..9657187c Binary files /dev/null and b/docs/class8/_static/lab1-Portal_Firewall.png differ diff --git a/docs/class8/_static/lab1-Portal_Firewall_Post.png b/docs/class8/_static/lab1-Portal_Firewall_Post.png new file mode 100644 index 00000000..84e19b46 Binary files /dev/null and b/docs/class8/_static/lab1-Portal_Firewall_Post.png differ diff --git a/docs/class8/_static/lab1-Portal_Firewall_Post_Execute.png b/docs/class8/_static/lab1-Portal_Firewall_Post_Execute.png new file mode 100644 index 00000000..16914d70 Binary files /dev/null and b/docs/class8/_static/lab1-Portal_Firewall_Post_Execute.png differ diff --git a/docs/class8/_static/lab1-Portal_Firewall_Post_JSON.png b/docs/class8/_static/lab1-Portal_Firewall_Post_JSON.png new file mode 100644 index 00000000..5e0c208f Binary files /dev/null and b/docs/class8/_static/lab1-Portal_Firewall_Post_JSON.png differ diff --git a/docs/class8/_static/lab2-Clone_Repo.png b/docs/class8/_static/lab2-Clone_Repo.png new file mode 100644 index 00000000..dff507b8 Binary files /dev/null and b/docs/class8/_static/lab2-Clone_Repo.png differ diff --git a/docs/class8/_static/lab2-Clone_Terminal.png b/docs/class8/_static/lab2-Clone_Terminal.png new file mode 100644 index 00000000..b1884f81 Binary files /dev/null and b/docs/class8/_static/lab2-Clone_Terminal.png differ diff --git a/docs/class8/_static/lab2-Postman_AppFW_Body.png b/docs/class8/_static/lab2-Postman_AppFW_Body.png deleted file mode 100644 index 39599af2..00000000 Binary files a/docs/class8/_static/lab2-Postman_AppFW_Body.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_AppFW_Delete_Results.png b/docs/class8/_static/lab2-Postman_AppFW_Delete_Results.png deleted file mode 100644 index ad3f5695..00000000 Binary files a/docs/class8/_static/lab2-Postman_AppFW_Delete_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_AppFW_Delete_Send.png b/docs/class8/_static/lab2-Postman_AppFW_Delete_Send.png deleted file mode 100644 index df0e7893..00000000 Binary files a/docs/class8/_static/lab2-Postman_AppFW_Delete_Send.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_AppFW_Results.png b/docs/class8/_static/lab2-Postman_AppFW_Results.png deleted file mode 100644 index 8d004c10..00000000 Binary files a/docs/class8/_static/lab2-Postman_AppFW_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_AppFW_Send.png b/docs/class8/_static/lab2-Postman_AppFW_Send.png deleted file mode 100644 index 5e7d24e9..00000000 Binary files a/docs/class8/_static/lab2-Postman_AppFW_Send.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_AppFW_Send.textClipping b/docs/class8/_static/lab2-Postman_AppFW_Send.textClipping deleted file mode 100644 index a24b52cc..00000000 Binary files a/docs/class8/_static/lab2-Postman_AppFW_Send.textClipping and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_HC_Delete_Results.png b/docs/class8/_static/lab2-Postman_HC_Delete_Results.png deleted file mode 100644 index 834ede69..00000000 Binary files a/docs/class8/_static/lab2-Postman_HC_Delete_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_HC_Delete_Send.png b/docs/class8/_static/lab2-Postman_HC_Delete_Send.png deleted file mode 100644 index c087f3d1..00000000 Binary files a/docs/class8/_static/lab2-Postman_HC_Delete_Send.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_LB_AppFW_Body.png b/docs/class8/_static/lab2-Postman_LB_AppFW_Body.png deleted file mode 100644 index a04da7ab..00000000 Binary files a/docs/class8/_static/lab2-Postman_LB_AppFW_Body.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_LB_AppFW_Results.png b/docs/class8/_static/lab2-Postman_LB_AppFW_Results.png deleted file mode 100644 index e73fec0a..00000000 Binary files a/docs/class8/_static/lab2-Postman_LB_AppFW_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_LB_AppFW_Send.png b/docs/class8/_static/lab2-Postman_LB_AppFW_Send.png deleted file mode 100644 index e311d9bb..00000000 Binary files a/docs/class8/_static/lab2-Postman_LB_AppFW_Send.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_LB_Delete_Results.png b/docs/class8/_static/lab2-Postman_LB_Delete_Results.png deleted file mode 100644 index fadf8def..00000000 Binary files a/docs/class8/_static/lab2-Postman_LB_Delete_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_LB_Delete_Send.png b/docs/class8/_static/lab2-Postman_LB_Delete_Send.png deleted file mode 100644 index 47bc51c8..00000000 Binary files a/docs/class8/_static/lab2-Postman_LB_Delete_Send.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_LB_SP_Body.png b/docs/class8/_static/lab2-Postman_LB_SP_Body.png deleted file mode 100644 index 08d65f48..00000000 Binary files a/docs/class8/_static/lab2-Postman_LB_SP_Body.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_LB_SP_Results.png b/docs/class8/_static/lab2-Postman_LB_SP_Results.png deleted file mode 100644 index 3b9ee0c2..00000000 Binary files a/docs/class8/_static/lab2-Postman_LB_SP_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_LB_SP_Send.png b/docs/class8/_static/lab2-Postman_LB_SP_Send.png deleted file mode 100644 index 961c5ce3..00000000 Binary files a/docs/class8/_static/lab2-Postman_LB_SP_Send.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_Pool_Delete_Results.png b/docs/class8/_static/lab2-Postman_Pool_Delete_Results.png deleted file mode 100644 index 06795b1d..00000000 Binary files a/docs/class8/_static/lab2-Postman_Pool_Delete_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_Pool_Delete_Send.png b/docs/class8/_static/lab2-Postman_Pool_Delete_Send.png deleted file mode 100644 index 2865bec0..00000000 Binary files a/docs/class8/_static/lab2-Postman_Pool_Delete_Send.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_SP_Body.png b/docs/class8/_static/lab2-Postman_SP_Body.png deleted file mode 100644 index 5ba56bb9..00000000 Binary files a/docs/class8/_static/lab2-Postman_SP_Body.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_SP_Delete_Results.png b/docs/class8/_static/lab2-Postman_SP_Delete_Results.png deleted file mode 100644 index 21f2077c..00000000 Binary files a/docs/class8/_static/lab2-Postman_SP_Delete_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_SP_Delete_Send.png b/docs/class8/_static/lab2-Postman_SP_Delete_Send.png deleted file mode 100644 index 001f3711..00000000 Binary files a/docs/class8/_static/lab2-Postman_SP_Delete_Send.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_SP_Results.png b/docs/class8/_static/lab2-Postman_SP_Results.png deleted file mode 100644 index bab2e210..00000000 Binary files a/docs/class8/_static/lab2-Postman_SP_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Postman_SP_Send.png b/docs/class8/_static/lab2-Postman_SP_Send.png deleted file mode 100644 index 1b256431..00000000 Binary files a/docs/class8/_static/lab2-Postman_SP_Send.png and /dev/null differ diff --git a/docs/class8/_static/lab2-Terraform_AppFw.png b/docs/class8/_static/lab2-Terraform_AppFw.png new file mode 100644 index 00000000..21c6c67b Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_AppFw.png differ diff --git a/docs/class8/_static/lab2-Terraform_AppFw_Apply.png b/docs/class8/_static/lab2-Terraform_AppFw_Apply.png new file mode 100644 index 00000000..d4d61c78 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_AppFw_Apply.png differ diff --git a/docs/class8/_static/lab2-Terraform_AppFw_Apply_Results.png b/docs/class8/_static/lab2-Terraform_AppFw_Apply_Results.png new file mode 100644 index 00000000..98eb6a36 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_AppFw_Apply_Results.png differ diff --git a/docs/class8/_static/lab2-Terraform_AppFw_Apply_Yes.png b/docs/class8/_static/lab2-Terraform_AppFw_Apply_Yes.png new file mode 100644 index 00000000..66a266a6 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_AppFw_Apply_Yes.png differ diff --git a/docs/class8/_static/lab2-Terraform_AppFw_Create.png b/docs/class8/_static/lab2-Terraform_AppFw_Create.png new file mode 100644 index 00000000..06458761 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_AppFw_Create.png differ diff --git a/docs/class8/_static/lab2-Terraform_AppFw_LB.png b/docs/class8/_static/lab2-Terraform_AppFw_LB.png new file mode 100644 index 00000000..18556803 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_AppFw_LB.png differ diff --git a/docs/class8/_static/lab2-Terraform_AppFw_Plan.png b/docs/class8/_static/lab2-Terraform_AppFw_Plan.png new file mode 100644 index 00000000..e11524ff Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_AppFw_Plan.png differ diff --git a/docs/class8/_static/lab2-Terraform_AppFw_Plan_Results.png b/docs/class8/_static/lab2-Terraform_AppFw_Plan_Results.png new file mode 100644 index 00000000..c9461075 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_AppFw_Plan_Results.png differ diff --git a/docs/class8/_static/lab2-Terraform_Auth_Env.png b/docs/class8/_static/lab2-Terraform_Auth_Env.png new file mode 100644 index 00000000..31eebc3f Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Auth_Env.png differ diff --git a/docs/class8/_static/lab2-Terraform_Auth_Folders.png b/docs/class8/_static/lab2-Terraform_Auth_Folders.png new file mode 100644 index 00000000..6e393841 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Auth_Folders.png differ diff --git a/docs/class8/_static/lab2-Terraform_Auth_Folders_Cert.png b/docs/class8/_static/lab2-Terraform_Auth_Folders_Cert.png new file mode 100644 index 00000000..6006e121 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Auth_Folders_Cert.png differ diff --git a/docs/class8/_static/lab2-Terraform_Auth_Folders_New.png b/docs/class8/_static/lab2-Terraform_Auth_Folders_New.png new file mode 100644 index 00000000..8b5c8b17 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Auth_Folders_New.png differ diff --git a/docs/class8/_static/lab2-Terraform_Console_Manage_LB_Cancel.png b/docs/class8/_static/lab2-Terraform_Console_Manage_LB_Cancel.png new file mode 100644 index 00000000..52a2ce5e Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Console_Manage_LB_Cancel.png differ diff --git a/docs/class8/_static/lab2-Terraform_Console_Manage_LB_Manage.png b/docs/class8/_static/lab2-Terraform_Console_Manage_LB_Manage.png new file mode 100644 index 00000000..4e549789 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Console_Manage_LB_Manage.png differ diff --git a/docs/class8/_static/lab2-Terraform_Console_Manage_LB_WebAppFW.png b/docs/class8/_static/lab2-Terraform_Console_Manage_LB_WebAppFW.png new file mode 100644 index 00000000..f4d12579 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Console_Manage_LB_WebAppFW.png differ diff --git a/docs/class8/_static/lab2-Terraform_Console_Manage_LB_WebAppFw_Enable.png b/docs/class8/_static/lab2-Terraform_Console_Manage_LB_WebAppFw_Enable.png new file mode 100644 index 00000000..714067d6 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Console_Manage_LB_WebAppFw_Enable.png differ diff --git a/docs/class8/_static/lab2-Terraform_Console_Manage_LBs.png b/docs/class8/_static/lab2-Terraform_Console_Manage_LBs.png new file mode 100644 index 00000000..a8a2f72f Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Console_Manage_LBs.png differ diff --git a/docs/class8/_static/lab2-Terraform_Console_Web.png b/docs/class8/_static/lab2-Terraform_Console_Web.png new file mode 100644 index 00000000..71455a25 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Console_Web.png differ diff --git a/docs/class8/_static/lab2-Terraform_Deploy_Apply.png b/docs/class8/_static/lab2-Terraform_Deploy_Apply.png new file mode 100644 index 00000000..f94921b2 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Deploy_Apply.png differ diff --git a/docs/class8/_static/lab2-Terraform_Deploy_Apply_Results.png b/docs/class8/_static/lab2-Terraform_Deploy_Apply_Results.png new file mode 100644 index 00000000..7c5fc05c Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Deploy_Apply_Results.png differ diff --git a/docs/class8/_static/lab2-Terraform_Deploy_Apply_Yes.png b/docs/class8/_static/lab2-Terraform_Deploy_Apply_Yes.png new file mode 100644 index 00000000..1a18e3d2 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Deploy_Apply_Yes.png differ diff --git a/docs/class8/_static/lab2-Terraform_Deploy_Directory.png b/docs/class8/_static/lab2-Terraform_Deploy_Directory.png new file mode 100644 index 00000000..5bc16f74 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Deploy_Directory.png differ diff --git a/docs/class8/_static/lab2-Terraform_Deploy_Init.png b/docs/class8/_static/lab2-Terraform_Deploy_Init.png new file mode 100644 index 00000000..aba4aa1c Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Deploy_Init.png differ diff --git a/docs/class8/_static/lab2-Terraform_Deploy_Init_Success.png b/docs/class8/_static/lab2-Terraform_Deploy_Init_Success.png new file mode 100644 index 00000000..1bbc1fad Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Deploy_Init_Success.png differ diff --git a/docs/class8/_static/lab2-Terraform_Deploy_Plan.png b/docs/class8/_static/lab2-Terraform_Deploy_Plan.png new file mode 100644 index 00000000..094fc08c Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Deploy_Plan.png differ diff --git a/docs/class8/_static/lab2-Terraform_Deploy_Plan_Results.png b/docs/class8/_static/lab2-Terraform_Deploy_Plan_Results.png new file mode 100644 index 00000000..58599d24 Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Deploy_Plan_Results.png differ diff --git a/docs/class8/_static/lab3-Terraform_Download_API_Cert.png b/docs/class8/_static/lab2-Terraform_Download_API_Cert.png similarity index 100% rename from docs/class8/_static/lab3-Terraform_Download_API_Cert.png rename to docs/class8/_static/lab2-Terraform_Download_API_Cert.png diff --git a/docs/class8/_static/lab2-Terraform_Tfvars.png b/docs/class8/_static/lab2-Terraform_Tfvars.png new file mode 100644 index 00000000..374dc91e Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Tfvars.png differ diff --git a/docs/class8/_static/lab2-Terraform_Tfvars_Values.png b/docs/class8/_static/lab2-Terraform_Tfvars_Values.png new file mode 100644 index 00000000..3d07898e Binary files /dev/null and b/docs/class8/_static/lab2-Terraform_Tfvars_Values.png differ diff --git a/docs/class8/_static/lab2-XC_LB_AppFW_JSON_Data.png b/docs/class8/_static/lab2-XC_LB_AppFW_JSON_Data.png deleted file mode 100644 index 6d19b146..00000000 Binary files a/docs/class8/_static/lab2-XC_LB_AppFW_JSON_Data.png and /dev/null differ diff --git a/docs/class8/_static/lab2-XC_LB_SP_JSON_Data.png b/docs/class8/_static/lab2-XC_LB_SP_JSON_Data.png deleted file mode 100644 index f4ecce4b..00000000 Binary files a/docs/class8/_static/lab2-XC_LB_SP_JSON_Data.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_Cert_Copy.png b/docs/class8/_static/lab3-Terraform_Cert_Copy.png deleted file mode 100644 index d3e39fe3..00000000 Binary files a/docs/class8/_static/lab3-Terraform_Cert_Copy.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_Cert_Password.png b/docs/class8/_static/lab3-Terraform_Cert_Password.png deleted file mode 100644 index f4894e42..00000000 Binary files a/docs/class8/_static/lab3-Terraform_Cert_Password.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_Cmd_Prompt.png b/docs/class8/_static/lab3-Terraform_Cmd_Prompt.png deleted file mode 100644 index a6ead959..00000000 Binary files a/docs/class8/_static/lab3-Terraform_Cmd_Prompt.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC.png b/docs/class8/_static/lab3-Terraform_VSC.png deleted file mode 100644 index 6c05b423..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Apply.png b/docs/class8/_static/lab3-Terraform_VSC_Appfw_Apply.png deleted file mode 100644 index d83309e5..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Apply.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Apply_Results.png b/docs/class8/_static/lab3-Terraform_VSC_Appfw_Apply_Results.png deleted file mode 100644 index b307daae..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Apply_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Apply_Yes.png b/docs/class8/_static/lab3-Terraform_VSC_Appfw_Apply_Yes.png deleted file mode 100644 index e269512f..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Apply_Yes.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Create.png b/docs/class8/_static/lab3-Terraform_VSC_Appfw_Create.png deleted file mode 100644 index 12c12c46..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Create.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Appfw_LB_Config.png b/docs/class8/_static/lab3-Terraform_VSC_Appfw_LB_Config.png deleted file mode 100644 index a5083e85..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Appfw_LB_Config.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Appfw_LB_Disable.png b/docs/class8/_static/lab3-Terraform_VSC_Appfw_LB_Disable.png deleted file mode 100644 index 78fcf3ae..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Appfw_LB_Disable.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Plan.png b/docs/class8/_static/lab3-Terraform_VSC_Appfw_Plan.png deleted file mode 100644 index 74b4fdad..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Plan.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Plan_Results.png b/docs/class8/_static/lab3-Terraform_VSC_Appfw_Plan_Results.png deleted file mode 100644 index 11593edf..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Appfw_Plan_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Apply.png b/docs/class8/_static/lab3-Terraform_VSC_Apply.png deleted file mode 100644 index c7d920aa..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Apply.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Apply_Results.png b/docs/class8/_static/lab3-Terraform_VSC_Apply_Results.png deleted file mode 100644 index c634270e..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Apply_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Apply_Yes.png b/docs/class8/_static/lab3-Terraform_VSC_Apply_Yes.png deleted file mode 100644 index 2b3dd969..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Apply_Yes.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Destroy.png b/docs/class8/_static/lab3-Terraform_VSC_Destroy.png deleted file mode 100644 index 10dc4998..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Destroy.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Destroy_Results.png b/docs/class8/_static/lab3-Terraform_VSC_Destroy_Results.png deleted file mode 100644 index f51a2ccb..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Destroy_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Destroy_yes.png b/docs/class8/_static/lab3-Terraform_VSC_Destroy_yes.png deleted file mode 100644 index da18d273..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Destroy_yes.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Folder.png b/docs/class8/_static/lab3-Terraform_VSC_Folder.png deleted file mode 100644 index 122c4b17..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Folder.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Folder_Select.png b/docs/class8/_static/lab3-Terraform_VSC_Folder_Select.png deleted file mode 100644 index d64a18dc..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Folder_Select.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Init.png b/docs/class8/_static/lab3-Terraform_VSC_Init.png deleted file mode 100644 index fbf3b75d..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Init.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Init_Success.png b/docs/class8/_static/lab3-Terraform_VSC_Init_Success.png deleted file mode 100644 index 35e898d9..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Init_Success.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Main.png b/docs/class8/_static/lab3-Terraform_VSC_Main.png deleted file mode 100644 index eb0bd34e..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Main.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Main_Save.png b/docs/class8/_static/lab3-Terraform_VSC_Main_Save.png deleted file mode 100644 index a3d5446b..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Main_Save.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Plan.png b/docs/class8/_static/lab3-Terraform_VSC_Plan.png deleted file mode 100644 index 5cb52062..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Plan.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Plan_Results.png b/docs/class8/_static/lab3-Terraform_VSC_Plan_Results.png deleted file mode 100644 index 1ce71879..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Plan_Results.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_Terminal.png b/docs/class8/_static/lab3-Terraform_VSC_Terminal.png deleted file mode 100644 index 8a13f817..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_Terminal.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_tfvars.png b/docs/class8/_static/lab3-Terraform_VSC_tfvars.png deleted file mode 100644 index 80658988..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_tfvars.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_tfvars_save.png b/docs/class8/_static/lab3-Terraform_VSC_tfvars_save.png deleted file mode 100644 index 3503636a..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_tfvars_save.png and /dev/null differ diff --git a/docs/class8/_static/lab3-Terraform_VSC_tfvars_values.png b/docs/class8/_static/lab3-Terraform_VSC_tfvars_values.png deleted file mode 100644 index c0de3b91..00000000 Binary files a/docs/class8/_static/lab3-Terraform_VSC_tfvars_values.png and /dev/null differ diff --git a/docs/class8/_static/lab3-XC_Terraform_WAF.png b/docs/class8/_static/lab3-XC_Terraform_WAF.png deleted file mode 100644 index 101ef58d..00000000 Binary files a/docs/class8/_static/lab3-XC_Terraform_WAF.png and /dev/null differ diff --git a/docs/class8/_static/lab3-XC_Terraform_WAF_Cancel.png b/docs/class8/_static/lab3-XC_Terraform_WAF_Cancel.png deleted file mode 100644 index 25569546..00000000 Binary files a/docs/class8/_static/lab3-XC_Terraform_WAF_Cancel.png and /dev/null differ diff --git a/docs/class8/_static/lab3-XC_Terraform_WAF_Enable.png b/docs/class8/_static/lab3-XC_Terraform_WAF_Enable.png deleted file mode 100644 index a9b34223..00000000 Binary files a/docs/class8/_static/lab3-XC_Terraform_WAF_Enable.png and /dev/null differ diff --git a/docs/class8/class8.rst b/docs/class8/class8.rst index be7a4f46..0be0b66f 100644 --- a/docs/class8/class8.rst +++ b/docs/class8/class8.rst @@ -1,36 +1,39 @@ -F5 Distributed Cloud Automation - NetOps, DevOps, SecOps and Beyond +F5 Distributed Cloud: Automating Build & Operations =================================================================== Welcome ------- -In this hands-on lab environment, attendees will explore the use of the F5 Distributed Cloud API to review, -build and maintain deployed configurations. During the lab, attendees will be performing API calls to automate -various aspects of standard F5 Distributed Cloud operations from basic building blocks to automating security -configurations and controls. Adjacent automation tools will also be explored. +This lab explores F5 Distributed Cloud's (XC) API-first framework and the automation of operational controls. The following +key concepts will be covered:​ +- Leveraging the Developer Portal +- Leveraging Terraform +- Standardizing and Operationalizing delivery controls +- Standardizing and Operationalizing security controls +- Audit and Standard compliance -Objectives: +Outcomes: ----------- -- Gain a deeper understanding of key F5 Distributed Cloud API frameworks and controls. -- Gain an understanding of the F5 Distributed Cloud API-first framework. -- Establish basic operational tasks for object management. -- Explore Terraform Provider for F5 Distributed Cloud +- Understanding of API-first framework +- Practical use cases to automate and walk away with +- Operationalizing (day-to-day controls) configuration management Lab & Tasks: ------------ -The next page (Introduction) will cover the lab environment, access, and lab variables. The lab will be using a -Windows 10 client with Postman and Terraform pre-installed to demonostatre how to automate the deployment of: +The next page (Introduction) will cover the lab environment, access, and lab variables. The lab utilizes the Distributed Cloud +SaaS Console, Visual Studio Code, and Terraform to demonostrate: -- F5 Distributed Cloud HTTP Health Check -- F5 Distributed Cloud Origin Pool -- F5 Distributed Cloud HTTP Load Balancer -- F5 Distributed Cloud Web Application Firewall -- F5 Distributed Cloud Service Policy +- Automated Creation of HTTP Health Checks +- Automated Creation of Cloud Origin Pools +- Automated Creation of Cloud HTTP Load Balancer +- Automated Creation and Deployment of Cloud Web Application Firewalls +- Automated Creation and Deployment of Cloud Service Policies +- Automated Audits of Deployed Configurations -During the lab exercises we will explore different methods of protecting and exposing applications/webserver +During the lab exercises we will explore different methods of protecting and exposing applications/webservers that are included in the lab. A Git Repository of the configurations used in this lab is available at https://github.com/f5devcentral/appworld-f5xc-automation diff --git a/docs/class8/lab1.rst b/docs/class8/lab1.rst index 95a7bf4a..359ee7d2 100644 --- a/docs/class8/lab1.rst +++ b/docs/class8/lab1.rst @@ -103,19 +103,24 @@ utilizing the Developer Portal. | | | |lab1-Portal_Set_Token| | +---------------------------------------------------------------------------------------------------------------+ -| 13. In the Dev Portal, scroll through the APIs on the left until you find **Namespace** and then click | + + ++---------------------------------------------------------------------------------------------------------------+ +| **Use the Distributed Cloud Developer Portal to Query Data** | ++===============================================================================================================+ +| 1. In the Dev Portal, scroll through the APIs on the left until you find **Namespace** and then click | | | | **Namespace**. | | | | |lab1-Portal_Namespace| | +---------------------------------------------------------------------------------------------------------------+ -| 14. Under the **default** section in schemes, scroll down through the **Namespace** APIs until you find | +| 2. Under the **default** section in schemes, scroll down through the **Namespace** APIs until you find | | | | **GET /api/web/namespaces/{name}** and click the arrow to expand this API and then click **Try it out**. | | | | |lab1-Portal_Namespaces_Name| | +---------------------------------------------------------------------------------------------------------------+ -| 15. Enter your namespace name in the **name** field and then click **Execute**. | +| 3. Enter your namespace name in the **name** field and then click **Execute**. | | | | .. note:: | | *Your namespace name is unique to your deployment. You should have recorded your namespace name in the* | @@ -123,13 +128,8 @@ utilizing the Developer Portal. | *Introduction Lab.* | | | | |lab1-Portal_Namespaces_Name_Execute| | -| | -| .. note:: | -| *Your namespace is entered in the name field in this instance because you are requesting details on a* | -| *namespace object named . If you were querying for an object contained within your namespace* | -| *you would enter the name of the object in the name field and your namespace name in the namespace field.* | +---------------------------------------------------------------------------------------------------------------+ -| 16. Review the **Response body** data. You may have to scroll down slightly to show the **Response body** data| +| 4. Review the **Response body** data. You may have to scroll down slightly to show the **Response body** data | | | | depending on your screen resolution. | | | @@ -140,252 +140,73 @@ utilizing the Developer Portal. | *values. Parameters can also be used when creating new objects.* | +---------------------------------------------------------------------------------------------------------------+ -Task 2: Create A Proxy Configuration Using Postman -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following steps will create a Health Check, an Origin Pool and an HTTP Load Balancer utilizing Postman to post -JSON definitions to the Distributed Cloud API. For this task, you will be using a Windows 10 client that is part -of the UDF deployment. The Windows 10 client has Postman pre-installed to save time in the lab. To install and -utilize postman outside of the lab, visit https://www.postman.com/downloads/. - -An RDP client is recommended to access the Windows 10 client. Current versions of Microsoft Windows should -include an RDP client pre-installed. If you are using an operating system other than Windows, below are -documentation and download links for installing an RDP client. - -+-------------------+-------------------------------------------------------------------------------------------+ -| Operating System | Documentation and Download Link | -+===================+===========================================================================================+ -| macOS | `Remote Desktop Mac`_ | -+-------------------+-------------------------------------------------------------------------------------------+ -| iOS/iPadOS | `Remote Desktop iOS`_ | -+-------------------+-------------------------------------------------------------------------------------------+ -| Android/Chrome OS | `Remote Desktop Android`_ | -+-------------------+-------------------------------------------------------------------------------------------+ -| Linux | `Remote Desktop Linux`_ | -+-------------------+-------------------------------------------------------------------------------------------+ - -If you are unable to install an RDP client, or cannot connect via RDP to the Windows 10 host, you can use the -WebRDP jump host within the UDF environment to access the Windows 10 client via a web browser. Here are -instructions for connecting to the Windows 10 client via RDPClient_. Here are instructions for connecting to the -Windows 10 client via WebRDP_. - -The username and password for the Windows 10 host are: - -+----------------------+----------------------+ -| Username | Password | -+======================+======================+ -| .. code-block:: bash | .. code-block:: bash | -| | | -| labuser | F5L@bUser! | -+----------------------+----------------------+ - +---------------------------------------------------------------------------------------------------------------+ -| **Utilize Postman to Send API Calls to the Distributed Cloud Console** | +| **Use the Distributed Cloud Developer Portal to Create an Object** | +===============================================================================================================+ -| 1. From the Windows 10 client deployed as part of the UDF, open Postman. | -| | -| |lab1-Postman| | -+---------------------------------------------------------------------------------------------------------------+ -| 2. Click on **Environments** on the left side of Postman and then select **Appworld - XC Automation**. | +| 1. In the Dev Portal, scroll through the APIs on the left until you find **Application Firewall** and then | | | -| 3. Fill in the variables with the corresponding values for your lab environment and then click **Save**. | +| click **Application Firewall**. | | | -| * **api-token:** ** | -| * **tenant:** *f5-xc-lab-app* | -| * **namespace:** ** | -| | -| |lab1-Postman_Variables| | -+---------------------------------------------------------------------------------------------------------------+ -| 4. Select **Collections** from the left side of Postman and then expand **Appworld - XC Automation** and | -| | -| select **Get My Namespace** and click **Send**. | -| | -| |lab1-Postman_Namespace| | +| |lab1-Portal_Firewall| | +---------------------------------------------------------------------------------------------------------------+ -| 5. Review the results in the **Body** section of Postman. You should see a 200 OK response code and the name | +| 2. Under the **default** section in schemes, find the | | | -| of your namespace should appear in the **metadata**. These results should match the results from Task 1 | +| **POST /api/config/namespaces/{metadata.namespace}/app_firewalls** and click the arrow to expand this API | | | -| step 16. | +| and then click **Try it out**. | | | -| |lab1-Postman_Namespace_Results| | +| |lab1-Portal_Firewall_Post| | +---------------------------------------------------------------------------------------------------------------+ -| 6. Select **Create Health Check** under the Appworld - XC Automation collection and select **Body**. | +| 3. Enter your namespace name in the **metadata.namespace** field and in the body object field paste the | | | -| 7. Review the JSON in the **Body** section. This data is what is sent to the Distributed Cloud API to create | +| following content. | | | -| a new Health Check. | -| | -| |lab1-Postman_HC_Body| | -+---------------------------------------------------------------------------------------------------------------+ -| 8. Click **Send** to create the Health Check. | -| | -| |lab1-Postman_HC_Send| | -+---------------------------------------------------------------------------------------------------------------+ -| 9. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | +| .. code-bloc:: bash | | | -| |lab1-Postman_HC_Results| | -+---------------------------------------------------------------------------------------------------------------+ -| 10. Select **Create Origin Pool** under the Appworld - XC Automation collection and select **Body**. | -| | -| 11. Review the JSON in the **Body** section. This data is what is sent to the Distributed Cloud API to create | -| | -| a new Origin Pool. | -| | -| |lab1-Postman_Pool_Body| | -+---------------------------------------------------------------------------------------------------------------+ -| 12. Click **Send** to create the Origin Pool. | -| | -| |lab1-Postman_Pool_Send| | -+---------------------------------------------------------------------------------------------------------------+ -| 13. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | -| | -| |lab1-Postman_Pool_Results| | -+---------------------------------------------------------------------------------------------------------------+ -| 14. Select **Create HTTP Load Balancer** under the Appworld - XC Automation collection and select **Body**. | -| | -| 15. Review the JSON in the **Body** section. This data is what is sent to the Distributed Cloud API to create | -| | -| a new HTTP Load Balancer. | -| | -| |lab1-Postman_LB_Body| | -+---------------------------------------------------------------------------------------------------------------+ -| 16. Click **Send** to create the HTTP Load Balancer. | -| | -| |lab1-Postman_LB_Send| | -+---------------------------------------------------------------------------------------------------------------+ -| 17. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | -| | -| |lab1-Postman_LB_Results| | -+---------------------------------------------------------------------------------------------------------------+ - -Task 3: Review & Test Proxy Configuration -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following steps will review the configuations created using Postman in the Distributed Cloud Console. The -configuration will then be tested utilizing a web browser to access the web appliaction. - -+---------------------------------------------------------------------------------------------------------------+ -| **Verify the Objects Created with Postman** | -+===============================================================================================================+ -| 1. From the Windows 10 client deployed as part of the UDF, open Chrome. | -| | -| |lab1-Chrome| | -+---------------------------------------------------------------------------------------------------------------+ -| 2. Click on the **XC Console** bookmark to be taken to the XC Console login. | -| | -| |lab1-XC_Bookmark| | -+---------------------------------------------------------------------------------------------------------------+ -| 3. Enter your e-mail address in the **Email** form and password in the **Password** form and click **Sign** | -| | -| **In**. | -| | -| |lab1-XC_Signin| | -+---------------------------------------------------------------------------------------------------------------+ -| 4. Within the Distributed Cloud dashboard, select the **Multi-Cloud App Connect** tile. | -| | -| |lab1-XC_App_Connect| | -+---------------------------------------------------------------------------------------------------------------+ -| 5. In the resulting screen, expand the **Manage** menu and click **Load Balancers** and then select | -| | -| *Health Checks**. | -| | -| |lab1-XC_HC| | -+---------------------------------------------------------------------------------------------------------------+ -| 6. From the Health Checks page, locate the Health Check that you created via Postman. Click the **ellipsis** | -| | -| under **Actions** and select **Manage Configuration**. | -| | -| |lab1-XC_HC_Manage| | -+---------------------------------------------------------------------------------------------------------------+ -| 7. From the resulting screen, review the Health Check configuration data and then click **JSON**. | -| | -| |lab1-XC_HC_JSON| | -+---------------------------------------------------------------------------------------------------------------+ -| 8. Review the resulting JSON data. This JSON matches JSON from the body section of Postman request that | -| | -| created the Health Check. | -| | -| |lab1-XC_HC_JSON_Data| | +| { | +| "metadata": { | +| "name": "non-standard", | +| "namespace": "" | +| }, | +| "spec": { | +| "blocking": null, | +| "default_detection_settings": null, | +| "default_bot_setting": null, | +| "allow_all_response_codes": null, | +| "default_anonymization": null, | +| "use_default_blocking_page": null | +| } | +| } | | | | .. note:: | -| *There may be slight variations in the JSON because you don't need to post default values when calling the*| -| *API. If you want to automate a task in Distributed Cloud, but are unsure of the required JSON, you can* | -| *configure a test object via the GUI and then use this JSON tab to get the corresponding JSON config.* | -+---------------------------------------------------------------------------------------------------------------+ -| 9. Click **Cancel and Exit** to close out the Health Check configuration. | -+---------------------------------------------------------------------------------------------------------------+ -| 10. Under the Multi-Cloud App Connect Manage menu, select **Load Balancers** and then click on **Origin** | -| | -| **Pools**. | +| *Be sure to change the **** value in the above JSON block to match your namespace.* | | | -| |lab1-XC_Pool| | +| |lab1-Portal_Firewall_Post_Execute| | +---------------------------------------------------------------------------------------------------------------+ -| 11. From the Origin Pools page, locate the Origin Pool that you created via Postman. Click the **ellipsis** | +| 4. Review the **Response body** data. If everything worked correctly you should have received a 200 response | +| | | +| code along with a response body. | | | -| under **Actions** and select **Manage Configuration**. | -| | -| |lab1-XC_Pool_Manage| | -+---------------------------------------------------------------------------------------------------------------+ -| 12. From the resulting screen, review the Origin Pool configuration data and then click **JSON**. | -| | -| |lab1-XC_Pool_JSON| | +| |lab1-Portal_Firewall_Post_JSON| | +---------------------------------------------------------------------------------------------------------------+ -| 13. Review the resulting JSON data. This JSON matches JSON from the body section of Postman request that | -| | -| created the Origin Pool. | +| 5. Open the Distribute Cloud Console tab in your web browser to validate the App Firewall was created. You | | | -| |lab1-XC_Pool_JSON_Data| | +| still be in the **My Account** configuration window. From here use the **Select Workspace dropdown in the | | | -| .. note:: | -| *There may be slight variations in the JSON because you don't need to post default values when calling the*| -| *API. If you want to automate a task in Distributed Cloud, but are unsure of the required JSON, you can* | -| *configure a test object via the GUI and then use this JSON tab to get the corresponding JSON config.* | -+---------------------------------------------------------------------------------------------------------------+ -| 14. Click **Cancel and Exit** to close out the Origin Pool configuration. | -+---------------------------------------------------------------------------------------------------------------+ -| 15. Under the Multi-Cloud App Connect Manage menu, select **Load Balancers** and then click on **HTTP** | +| in the left-hand navigation, and click **Web App & API Protection**. | | | -| **Load Balancers**. | -| | -| |lab1-XC_LB| | -+---------------------------------------------------------------------------------------------------------------+ -| 16. From the HTTP Load Balancers page, locate the HTTP Load Balancer that you created via Postman. Click the | -| | -| **ellipsis** under **Actions** and select **Manage Configuration**. | -| | -| |lab1-XC_LB_Manage| | -+---------------------------------------------------------------------------------------------------------------+ -| 17. From the resulting screen, review the HTTP Load Balancer configuration data and then click **JSON**. | -| | -| |lab1-XC_LB_JSON| | -+---------------------------------------------------------------------------------------------------------------+ -| 18. Review the resulting JSON data. This JSON matches JSON from the body section of Postman request that | -| | -| created the HTTP Load Balancer. | -| | -| |lab1-XC_LB_JSON_Data| | -| | -| .. note:: | -| *There may be slight variations in the JSON because you don't need to post default values when calling the*| -| *API. If you want to automate a task in Distributed Cloud, but are unsure of the required JSON, you can* | -| *configure a test object via the GUI and then use this JSON tab to get the corresponding JSON config.* | -+---------------------------------------------------------------------------------------------------------------+ -| 19. Click **Cancel and Exit** to close out the Load Balancer configuration. | -+---------------------------------------------------------------------------------------------------------------+ - +| |lab1-Portal_Console_WebApp| | +---------------------------------------------------------------------------------------------------------------+ -| **Verify the Demo Shop App is Accessible Via a Web Browser** | -+===============================================================================================================+ -| 20. Open a new tab in your Chrome browser and enter the following URL | +| 6. From the left navigation sidebar click **Manage** and click **App Firewall**. You should see an App | | | -| **http://-demoshop.lab-app.f5demos.com** | +| Firewall named **non-standard**. | | | -| |lab1-Demoshop| | +| |lab1-Portal_Console_WebApp_Firewall| | | | | .. note:: | -| *This illustrates that you are able to configure the delivery of an application via the Distributed Cloud* | -| *API utilizing Postman.* | +| *The firewall you create in this section of the lab will be used in future labs. If you don't see the* | +| * App Firewall named non-standard please verify and repeat the steps in this section. If you are still* | +| * not seeing the non-standard App Firewall please ask a lab assistant for help.* | +---------------------------------------------------------------------------------------------------------------+ +---------------------------------------------------------------------------------------------------------------+ @@ -393,13 +214,7 @@ configuration will then be tested utilizing a web browser to access the web appl +===============================================================================================================+ | This concludes Lab 1. In this lab, you learned about the Distributed Cloud Developer Portal and how it can | | | -| help you test API calls. You then expanded upon that knowledge and utilized Postman to deploy a Health Check, | -| | -| Origin Pool, and HTTP Load Balancer. Next, you verified the configuration that was pushed to the Distributed | -| | -| Console. Finally, you verified the application you published was available from a web browser. A brief | -| | -| presentation will be shared prior to the beginning of Lab 2. | +| help you test API calls. | | | | |labend| | +---------------------------------------------------------------------------------------------------------------+ @@ -432,72 +247,19 @@ configuration will then be tested utilizing a web browser to access the web appl :width: 800px .. |lab1-Portal_Namespaces_Name_JSON| image:: _static/lab1-Portal_Namespaces_Name_JSON.png :width: 800px -.. |lab1-Postman| image:: _static/lab1-Postman.png - :width: 800px -.. |lab1-Postman_Variables| image:: _static/lab1-Postman_Variables.png - :width: 800px -.. |lab1-Postman_Namespace| image:: _static/lab1-Postman_Namespace.png - :width: 800px -.. |lab1-Postman_Namespace_Results| image:: _static/lab1-Postman_Namespace_Results.png - :width: 800px -.. |lab1-Postman_HC_Body| image:: _static/lab1-Postman_HC_Body.png - :width: 800px -.. |lab1-Postman_HC_Send| image:: _static/lab1-Postman_HC_Send.png - :width: 800px -.. |lab1-Postman_HC_Results| image:: _static/lab1-Postman_HC_Results.png - :width: 800px -.. |lab1-Postman_Pool_Body| image:: _static/lab1-Postman_Pool_Body.png - :width: 800px -.. |lab1-Postman_Pool_Send| image:: _static/lab1-Postman_Pool_Send.png - :width: 800px -.. |lab1-Postman_Pool_Results| image:: _static/lab1-Postman_Pool_Results.png - :width: 800px -.. |lab1-Postman_LB_Body| image:: _static/lab1-Postman_LB_Body.png - :width: 800px -.. |lab1-Postman_LB_Send| image:: _static/lab1-Postman_LB_Send.png +.. |lab1-Portal_Firewall| image:: _static/lab1-Portal_Firewall.png :width: 800px -.. |lab1-Postman_LB_Results| image:: _static/lab1-Postman_LB_Results.png +.. |lab1-Portal_Firewall_Post| image:: _static/lab1-Portal_Firewall_Post.png :width: 800px -.. |lab1-Chrome| image:: _static/lab1-Chrome.png +.. |lab1-Portal_Firewall_Post_Execute| image:: _static/lab1-Portal_Firewall_Post_Execute.png :width: 800px -.. |lab1-XC_Bookmark| image:: _static/lab1-XC_Bookmark.png +.. |lab1-Portal_Firewall_Post_JSON| image:: _static/lab1-Portal_Firewall_Post_JSON.png :width: 800px -.. |lab1-XC_Signin| image:: _static/lab1-XC_Signin.png +.. |lab1-Portal_Console_WebApp| image:: _static/lab1-Portal_Console_WebApp.png :width: 800px -.. |lab1-XC_App_Connect| image:: _static/lab1-XC_App_Connect.png - :width: 800px -.. |lab1-XC_HC| image:: _static/lab1-XC_HC.png - :width: 800px -.. |lab1-XC_HC_Manage| image:: _static/lab1-XC_HC_Manage.png - :width: 800px -.. |lab1-XC_HC_JSON| image:: _static/lab1-XC_HC_JSON.png - :width: 800px -.. |lab1-XC_HC_JSON_Data| image:: _static/lab1-XC_HC_JSON_Data.png - :width: 800px -.. |lab1-XC_Pool| image:: _static/lab1-XC_Pool.png - :width: 800px -.. |lab1-XC_Pool_Manage| image:: _static/lab1-XC_Pool_Manage.png - :width: 800px -.. |lab1-XC_Pool_JSON| image:: _static/lab1-XC_Pool_JSON.png - :width: 800px -.. |lab1-XC_Pool_JSON_Data| image:: _static/lab1-XC_Pool_JSON_Data.png - :width: 800px -.. |lab1-XC_LB| image:: _static/lab1-XC_LB.png - :width: 800px -.. |lab1-XC_LB_Manage| image:: _static/lab1-XC_LB_Manage.png - :width: 800px -.. |lab1-XC_LB_JSON| image:: _static/lab1-XC_LB_JSON.png - :width: 800px -.. |lab1-XC_LB_JSON_Data| image:: _static/lab1-XC_LB_JSON_Data.png - :width: 800px -.. |lab1-Demoshop| image:: _static/lab1-Demoshop.png +.. |lab1-Portal_Console_WebApp_Firewall| image:: _static/lab1-Portal_Console_WebApp.png :width: 800px .. |labend| image:: _static/labend.png :width: 800px -.. _Remote Desktop Mac: https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-mac/ -.. _Remote Desktop iOS: https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-ios/ -.. _Remote Desktop Android: https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-android/ -.. _Remote Desktop Linux: https://remmina.org/ -.. _RDPClient: /docs/class8/rdpclient.rst -.. _WebRDP: /docs/class8/webrdp.rst + diff --git a/docs/class8/lab2.rst b/docs/class8/lab2.rst index d1c49f18..acf51f3a 100644 --- a/docs/class8/lab2.rst +++ b/docs/class8/lab2.rst @@ -1,329 +1,397 @@ -Lab 2: Operationalize Security Configurations -============================================= +Lab 2: Leveraging Terraform +=========================== -The following lab tasks will guide you through using Postman to modify an existinga HTTP Load Balancer deployment -to apply a Web Application Firewall and Service Policy configuration. This lab demonstrates the use of the PUT -method to modify an existing object in Distributed Cloud. Students will then use the DELETE method to delete -the objects created in Lab 1 and Lab 2 in prepration for Lab 3. +The following lab tasks will guide you through using Terraform to deploy and secure a Web based application. +Students will start by creating an authentication certificate within Distributed Cloud. Terraform will be +configured to utilize the certificate for authenticating the API calls. Next, a Tfvars file is created to +customize the deployment to match the student's environment. Terraform will then be used to deploy an HTTP +Health Check, Origin Pool, and HTTP Load Balancer. Students will then modify and apply the Terraform +configuration to add a Web Application Firewall to their existing HTTP Load Balancer. **Expected Lab Time: 20 minutes** -Task 1: Create & Attach WAAP Policy -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In this task, you will use Postman to create an Application Firewall policy with the default settings. Postman -will then be used to attach the Application Firewall to the HTTP Load Balancer created in Lab 1. - -This lab will begin back in the Windows 10 client deployed as part of the UDF. +Task 1: Deploy a Web Application with Terraform +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In this task, you will create an API Certificate for Terraform to authneticate to the Distributed Cloud API. Next, +you will create a Tfvars file to specify environment variables unique to your environment. After the Tfvars file is +created, you will intialize Terraform and then deploy an HTTP Health Check, Origin Pool, and HTTP Load Balancer. +---------------------------------------------------------------------------------------------------------------+ -| **Create an Application Firewall and Apply It to Your Application Load Balancer Via Postman** | +| **Clone the appworld-f5xc-automation repo** | +===============================================================================================================+ -| 1. Return to **Postman**. In the workspace pane, expand **Appworld - XC Automation** if it isn't already, | -| | -| then click on **Create App Firewall**, and click on **Body** to review the raw JSON content. | +| 1. Access VSCode server that is part of your UDF deployment. | ++---------------------------------------------------------------------------------------------------------------+ +| 2. From the VS Code Menu bar select **Terminal** and then **New Terminal**. | | | -| |lab2-Postman_AppFW_Body| | +| |lab2-Clone_Terminal| | +---------------------------------------------------------------------------------------------------------------+ -| 2. Click **Send** to POST the JSON to the Distributed Cloud API. | +| 3. In the resulting terminal window at the bottom of VSCode enter | +| | +| .. code-block:: bash | +| | +| git clone https://github.com/f5devcentral/appworld-f5xc-automation | | | -| |lab2-Postman_AppFW_Send| | +| |lab2-Clone_Repo| | +---------------------------------------------------------------------------------------------------------------+ -| 3. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | + ++---------------------------------------------------------------------------------------------------------------+ +| **Create API Certificate from the Distributed Cloud Console** | ++===============================================================================================================+ +| 1. If you don't still have the Distributed Cloud Console open in a browser, access the Console at: | | | -| |lab2-Postman_AppFW_Results| | +| Console | +---------------------------------------------------------------------------------------------------------------+ -| 4. From **Postman**, in the workspace pane click on **Add App FW to HTTP Load Balancer**, click on **Body**, | +| 2. In the top right corner of the Distributed Cloud Console click the **User Icon** dropdown and select | +| | +| **Account Settings**. | | | -| and review the raw JSON content. | +| |lab1-Account_Settings| | ++---------------------------------------------------------------------------------------------------------------+ +| 3. In the resulting screen click **Credentials** under the Peronal Management Heading on the left. | | | -| |lab2-Postman_LB_AppFW_Body| | +| |lab1-Credentials| | +---------------------------------------------------------------------------------------------------------------+ -| 5. Click **Send** to PUT the JSON to the Distributed Cloud API. | +| 4. Click **Add Credentials**. | | | -| |lab2-Postman_LB_AppFW_Send| | +| |lab1-Add_Credentials| | +---------------------------------------------------------------------------------------------------------------+ -| 6. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | +| 5. Fill in the resulting form with the following values: | +| | +| * **Credential Name ID:** *-api-cert* | +| * **Credential Type: Select:** *API Certificate* | +| * **Password:** ** | +| * **Confirm Password:** ** | +| * **Expiry Date: Select:** ** | +| | +| 6. Click **Download**. | | | -| |lab2-Postman_LB_AppFW_Results| | +| |lab2-Terraform_Download_API_Cert| | | | | .. note:: | -| *Since you are modifying an existing object, you use the PUT method here instead of the POST method.* | +| *Use a password that you will remember for the certificate, if you don't remember your API cert password,* | +| *you will need to generate a new API cert.* | +---------------------------------------------------------------------------------------------------------------+ +---------------------------------------------------------------------------------------------------------------+ -| **Verify the Application Firewall Was Created and Applied** | +| **Configure Terraform to Authenticate to Distributed Cloud** | +===============================================================================================================+ -| 7. From the Windows 10 client deployed as part of the UDF, open Chrome. | +| 1. Go back to the VS Code server in your browser and expand the **appworld-f5xc-automation** folder and then | | | -| |lab1-Chrome| | +| expand the **Terraform** folder. | +| | +| |lab2-Terraform_Auth_Folders| | +---------------------------------------------------------------------------------------------------------------+ -| 8. Click on the **XC Console** bookmark to be taken to the XC Console login. | +| 2. Right click the **Terraform** folder and select new folder. Type **credentials** in to name the folder. | | | -| |lab1-XC_Bookmark| | +| |lab2-Terraform_Auth_Folders_New| | ++---------------------------------------------------------------------------------------------------------------+ +| 3. Copy the certificate you downloaded by dragging it to the **credentials folder you just created. | +---------------------------------------------------------------------------------------------------------------+ -| 9. Enter your e-mail address in the **Email** form and password in the **Password** form and click **Sign** | +| 4. Right click the certificate in VSCode and select **Rename**. Change the name of the file to | | | -| **In**. | +| **xc-api-cert.p12** | | | -| |lab1-XC_Signin| | +| |lab2-Terraform_Auth_Folders_Cert| | +---------------------------------------------------------------------------------------------------------------+ -| 10. Within the Distributed Cloud dashboard, select the **Multi-Cloud App Connect** tile. | +| 5. Set an environment variable for the API certificate password by running the following command in the | | | -| |lab1-XC_App_Connect| | -+---------------------------------------------------------------------------------------------------------------+ -| 11. In the resulting screen, expand the **Manage** menu and click **Load Balancers** and then select | +| VSCode terminal window: | +| | +| .. code-block:: bash | | | -| *HTTP Load Balancers**. | +| export VES_P12_PASSWORD="" | | | -| |lab1-XC_LB| | +| |lab2-Terraform_Auth_Env| | ++---------------------------------------------------------------------------------------------------------------+ + +---------------------------------------------------------------------------------------------------------------+ -| 12. From the HTTP Load Balancers page, locate the HTTP Load Balancer that you created via Postman. Click the | +| **Create a tfvars File for Specifying Environment Specific Variables** | ++===============================================================================================================+ +| 1. From the **EXPLORER** frame, right click the **Terraform** folder, and then select new file. Enter the | | | -| **ellipsis** under **Actions** and select **Manage Configuration**. | +| name **terraform.tfvars** for the new file that is created and press enter. | | | -| |lab1-XC_LB_Manage| | +| |lab2-Terraform_Tfvars| | +---------------------------------------------------------------------------------------------------------------+ -| 13. From the resulting screen, review the HTTP Load Balancer configuration data and then click **JSON**. | +| 2. This will open the **terraform.tfvars** file in the right frame of Visual Studio Code, enter the following | | | -| |lab1-XC_LB_JSON| | -+---------------------------------------------------------------------------------------------------------------+ -| 14. Review the resulting JSON data. The **app_firewall** section matches JSON from the body section of | +| values into the file: | | | -| Postman PUT that added the Web Application Firewall to the HTTP Load Balancer. | +| .. code-block:: bash | | | -| |lab2-XC_LB_AppFW_JSON_Data| | +| api_p12 = "./credentials/xc-api-cert.p12" | +| tenant_name = "f5-xc-lab-app" | +| namespace = "" | | | -| .. note:: | -| *There may be slight variations in the JSON because you don't need to post default values when calling the*| -| *API. If you want to automate a task in Distributed Cloud, but are unsure of the required JSON, you can* | -| *configure a test object via the GUI and then use this JSON tab to get the corresponding JSON config.* | +| |lab2-Terraform_Tfvars_Values| | +---------------------------------------------------------------------------------------------------------------+ -| 15. Click **Cancel and Exit** to close out the Load Balancer configuration. | -+---------------------------------------------------------------------------------------------------------------+ - - -Task 2: Create & Attach a Service Policy -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In this task, you will use Postman to create a Service Policy that only allows specific contries to access your -application. Postman will then be used to attach the Service Policy to the HTTP Load Balancer created in Lab 1. +---------------------------------------------------------------------------------------------------------------+ -| **Create a Service Policy and Apply It to Your Application Load Balancer Via Postman** | +| **Initialize, Plan, and Apply Your Terraform Code** | +===============================================================================================================+ -| 1. Return to **Postman**, in the workspace pane expand **Appworld - XC Automation** if it isn't already, | +| 1. In the Terminal at the bottom of Visual Studio Code, change directory into the Terraform folder.: | +| | +| .. code-block:: bash | +| | +| cd appworld-f5xc-automation/Terraform | +| | +| |lab2-Terraform_Deploy_Directory| | ++---------------------------------------------------------------------------------------------------------------+ +| 2. In the Terminal at the bottom of Visual Studio Code, run the following command to initialize the Terraform | +| | +| environment: | +| | +| .. code-block:: bash | | | -| click on **Create Service Policy**, click on **Body**, and review the raw JSON content. | +| terraform init | | | -| |lab2-Postman_SP_Body| | +| |lab2-Terraform_Deploy_Init| | +---------------------------------------------------------------------------------------------------------------+ -| 2. Click **Send** to POST the JSON to the Distributed Cloud API. | +| 3. Review the Init Results. You should see a **Terraform has been successfully initialized!** message. | | | -| |lab2-Postman_SP_Send| | +| **DO NOT PROCEED AND ASK A LAB ASSISTANT FOR HELP IF YOU DON'T SEE THE SUCCESSFULLY INITIALIZED MESSAGE.** | +| | +| |lab2-Terraform_Deploy_Init_Success| | +---------------------------------------------------------------------------------------------------------------+ -| 3. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | +| 4. In the Terminal, enter the following command and press Enter: | +| | +| .. code-block:: bash | | | -| |lab2-Postman_SP_Results| | +| terraform plan | +| | +| |lab2-Terraform_Deploy_Plan| | +---------------------------------------------------------------------------------------------------------------+ - +| 5. Review the Plan results. This shows what Terraform is planning to create. | +| | +| |lab2-Terraform_Deploy_Plan_Results| | +---------------------------------------------------------------------------------------------------------------+ -| 4. From **Postman**, in the workspace pane click on **Add Service Policy to HTTP Load Balancer**, click on | +| 6. In the Terminal, enter the following command and press Enter: | +| | +| .. code-block:: bash | | | -| **Body**, and review the raw JSON content. | +| terraform apply | | | -| |lab2-Postman_LB_SP_Body| | +| |lab2-Terraform_Deploy_Apply| | +---------------------------------------------------------------------------------------------------------------+ -| 5. Click **Send** to PUT the JSON to the Distributed Cloud API. | +| 7. When prompted **Do you want to perform these actions?**, type **yes** and press Enter. | | | -| |lab2-Postman_LB_SP_Send| | +| |lab2-Terraform_Deploy_Apply_Yes| | +---------------------------------------------------------------------------------------------------------------+ -| 6. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | +| 8. Review the Apply results. This shows what Terraform created. | | | -| |lab2-Postman_LB_SP_Results| | +| |lab2-Terraform_Deploy_Apply_Results| | ++---------------------------------------------------------------------------------------------------------------+ + ++---------------------------------------------------------------------------------------------------------------+ +| **Verify the Demo Shop App is Accessible Via a Web Browser** | ++===============================================================================================================+ +| 1. Open a new tab in your Chrome browser and enter the following URL | +| | +| **http://-demoshop.lab-app.f5demos.com** | | | | .. note:: | -| *Since you are modifying an existing object, you use the PUT method here instead of the POST method.* | +| *This illustrates that you are able to configure the delivery of an application via the Distributed Cloud* | +| *API utilizing Terraform.* | +---------------------------------------------------------------------------------------------------------------+ +| |lab1-Demoshop| | ++---------------------------------------------------------------------------------------------------------------+ + +Task 2: Create & Attach WAF Policy +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In this task, you will modify your Terraform configuration to create and apply an Application Firewall policy with +the default settings. Since Terraform tracks state, the apply command is used to modify the required existing +objects within Distributed Cloud. +---------------------------------------------------------------------------------------------------------------+ -| **Verify the Service Policy Was Created and Applied** | +| **Edit Your Terraform Code to Create an Application Firewall and Add It to the Load Balancer** | +===============================================================================================================+ -| 7. From the Windows 10 client deployed as part of the UDF, open Chrome. | +| 1. From the Visual Studio Code Explorer frame, click **main.tf**, to open the Terraform configuration. | | | -| |lab1-Chrome| | +| |lab2-Terraform_AppFw| | +---------------------------------------------------------------------------------------------------------------+ -| 8. Click on the **XC Console** bookmark to be taken to the XC Console login. | +| 2. Scroll down to the bottom of the configuration and paste in the following lines to create the Web | | | -| |lab1-XC_Bookmark| | -+---------------------------------------------------------------------------------------------------------------+ -| 9. Enter your e-mail address in the **Email** form and password in the **Password** form and click **Sign** | +| Application Firewall policy. | | | -| **In**. | +| .. code-block:: bash | | | -| |lab1-XC_Signin| | -+---------------------------------------------------------------------------------------------------------------+ -| 10. Within the Distributed Cloud dashboard select the **Multi-Cloud App Connect** tile. | +| # Create WAF Policy | +| resource "volterra_app_firewall" "waf" { | +| name = "${var.namespace}-appfw" | +| namespace = var.namespace | +| allow_all_response_codes = true | +| default_anonymization = true | +| use_default_blocking_page = true | +| default_bot_setting = true | +| default_detection_settings = true | +| blocking = true | +| } | | | -| |lab1-XC_App_Connect| | +| |lab2-Terraform_AppFw_Create| | +---------------------------------------------------------------------------------------------------------------+ -| 11. In the resulting screen, expand the **Manage** menu and click **Load Balancers** and then select | +| 3. Locate the **Create Load Balancer** configuration within **main.tf** and replace the **disable_waf = true**| | | -| *HTTP Load Balancers**. | +| line with the following configuration: | | | -| |lab1-XC_LB| | +| .. code-block:: bash | +| | +| # WAF Config | +| app_firewall { | +| name = volterra_app_firewall.waf.name | +| namespace = var.namespace | +| } | +| | +| |lab2-Terraform_AppFw_LB| | +| | +| .. note:: | +| *The WAF Config should be indented two spaces under the Load Balancer configuration to maintain nesting* | +| *style conventions.* | +---------------------------------------------------------------------------------------------------------------+ -| 12. From the HTTP Load Balancers page, locate the HTTP Load Balancer that you created via Postman. Click the | + ++---------------------------------------------------------------------------------------------------------------+ +| **Plan and Apply Your New Terraform Code to Create an Application Firewall and Associate It to Your LB** | ++===============================================================================================================+ +| 1. In the Terminal, enter the following command and press Enter: | | | -| **ellipsis** under **Actions** and select **Manage Configuration**. | +| .. code-block:: bash | | | -| |lab1-XC_LB_Manage| | +| terraform plan | +| | +| |lab2-Terraform_AppFw_Plan| | +---------------------------------------------------------------------------------------------------------------+ -| 13. From the resulting screen, review the HTTP Load Balancer configuration data and then click **JSON**. | +| 2. Review the Plan results. This shows what Terraform is planning to create. | | | -| |lab1-XC_LB_JSON| | +| |lab3-Terraform_AppFw_Plan_Results| | +---------------------------------------------------------------------------------------------------------------+ -| 14. Review the resulting JSON data. The **app_firewall** section matches JSON from the body section of | +| 3. In the Terminal, enter the following command and press Enter: | | | -| Postman PUT that added the Web Application Firewall to the HTTP Load Balancer. | +| .. code-block:: bash | | | -| |lab2-XC_LB_SP_JSON_Data| | +| terraform apply | | | -| .. note:: | -| *There may be slight variations in the JSON because you don't need to post default values when calling the*| -| *API. If you want to automate a task in Distributed Cloud, but are unsure of the required JSON, you can* | -| *configure a test object via the GUI and then use this JSON tab to get the corresponding JSON config.* | +| |lab2-Terraform_AppFw_Apply| | +---------------------------------------------------------------------------------------------------------------+ -| 15. Click **Cancel and Exit** to close out the Load Balancer configuration. | +| 4. When prompted **Do you want to perform these actions?**, type **yes** and press Enter. | +| | +| |lab2-Terraform_AppFw_Apply_Yes| | ++---------------------------------------------------------------------------------------------------------------+ +| 5. Review the Apply results. This shows what Terraform created. | +| | +| |lab2-Terraform_AppFw_Apply_Results| | +---------------------------------------------------------------------------------------------------------------+ - -Task 3: Delete the Objects Created with Postman -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In this task you, will use Postman to delete the HTTP Load Balancer, Service Policy, App Firewall, Origin Pool, -and Health Check. This demonstrates how to use Postman to delete objects when they are no longer needed, and -cleans up the environment in prepation for Lab3. +---------------------------------------------------------------------------------------------------------------+ -| **Delete Distributed Cloud Objects Via Postman** | +| **Verify the Application Firewall was Created and Applied Within the Distributed Cloud Console** | +===============================================================================================================+ -| 1. Return to **Postman**, in the workspace pane expand **Appworld - XC Automation** if it isn't already, | +| 1. Switch back to your Browser that is connected to the Distributed Cloud Console. | ++---------------------------------------------------------------------------------------------------------------+ +| 2. If you are not already in Web App & API Protection, select **Web App & API Protection** from the **Select**| | | -| click on **Delete HTTP Load Balancer**, click on **Send**. | +| **Workspace** drowpown. | | | -| |lab2-Postman_LB_Delete_Send| | +| |lab2-Terraform_Console_Web| | +---------------------------------------------------------------------------------------------------------------+ -| 2. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | +| 3. In the resulting screen, expand the **Manage** menu and click **Load Balancers** and then select | | | -| |lab2-Postman_LB_Delete_Results| | -+---------------------------------------------------------------------------------------------------------------+ -| 3. From **Postman**, in the workspace pane click on **Delete Service Policy** and click **Send**. | +| **HTTP Load Balancers**. | | | -| |lab2-Postman_SP_Delete_Send| | +| |lab2-Terraform_Console_Manage_LBs| | +---------------------------------------------------------------------------------------------------------------+ -| 4. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | +| 13. From the HTTP Load Balancers page, locate the HTTP Load Balancer that you created via Terraform. Click | | | -| |lab2-Postman_SP_Delete_Results| | -+---------------------------------------------------------------------------------------------------------------+ -| 5. From **Postman**, in the workspace pane click on **Delete App Firewall** and click **Send**. | +| the **ellipsis** under **Actions** and select **Manage Configuration**. | | | -| |lab2-Postman_AppFW_Delete_Send| | +| |lab2-Terraform_Console_Manage_LB_Manage| | +---------------------------------------------------------------------------------------------------------------+ -| 6. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | +| 14. From the resulting screen, select **Web Application Firewall** under the HTTP Load Balancer frame to jump | | | -| |lab2-Postman_AppFW_Delete_Results| | -+---------------------------------------------------------------------------------------------------------------+ -| 7. From **Postman**, in the workspace pane click on **Delete Origin Pool** and click **Send**. | +| to the **Web Application Firewall** configuration section. | | | -| |lab2-Postman_Pool_Delete_Send| | +| |lab2-Terraform_Console_Manage_LB_WebAppFw| | +---------------------------------------------------------------------------------------------------------------+ -| 8. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | +| 15. Notice that the Web Application Firewall is now Enabled and the policy you created using Terraform is | | | -| |lab2-Postman_Pool_Delete_Results| | -+---------------------------------------------------------------------------------------------------------------+ -| 9. From **Postman**, in the workspace pane click on **Delete Health Check** and click **Send**. | +| applied. | | | -| |lab2-Postman_HC_Delete_Send| | +| |lab2-Terraform_Console_Manage_LB_WebAppFw_Enable| | +---------------------------------------------------------------------------------------------------------------+ -| 10. Review the results in the **Body** section of Postman. You should see a 200 OK response code. | +| 16. Click **Cancel and Exit** to close out of the HTTP Load Balancer configuration. | | | -| |lab2-Postman_HC_Delete_Results| | +| |lab2-Terraform_Console_Manage_LB_Cancel| | +---------------------------------------------------------------------------------------------------------------+ +---------------------------------------------------------------------------------------------------------------+ | **End of Lab 2** | +===============================================================================================================+ -| This concludes Lab 2. In this lab, you learned how to use Postman to create a Web Application Firewall | +| This concludes Lab 2. In this lab, you learned how to setup Terraform to authenticate to to Distributed Cloud | | | -| policy and Service Policy. You then used Postman to modify the HTTP Load Balancer you created in Lab 1 and | +| utilizing an API Certificate. You then created a Tfvars file to customize the deployment to match your | | | -| apply the Web Application Firewall and Service policy. Lastly, you used Postman to delete all of the | +| environment. After that, you used Terraform to deploy an HTTP Health Check, Origin Pool, and HTTP Load | | | -| configuration from Lab 1 and Lab 2 in preparation for Lab 3. A brief presentation will be shared prior to the | -| | -| beginning of Lab 3. | +| Balancer. The Terraform configuration was then modified to create a Web Application Firewall policy and apply | | | +| it to the HTTP Load Balancer. | ++---------------------------------------------------------------------------------------------------------------+ | |labend| | +---------------------------------------------------------------------------------------------------------------+ -.. |lab2-Postman_AppFW_Body| image:: _static/lab2-Postman_AppFW_Body.png - :width: 800px -.. |lab2-Postman_AppFW_Send| image:: _static/lab2-Postman_AppFW_Send.png - :width: 800px -.. |lab2-Postman_AppFW_Results| image:: _static/lab2-Postman_AppFW_Results.png - :width: 800px -.. |lab2-Postman_LB_AppFW_Body| image:: _static/lab2-Postman_LB_AppFW_Body.png +.. |lab2-Clone_Terminal| image:: _static/lab2-Clone_Terminal.png :width: 800px -.. |lab2-Postman_LB_AppFW_Send| image:: _static/lab2-Postman_LB_AppFW_Send.png +.. |lab2-Clone_Repo| image:: _static/lab2-Clone_Repo.png :width: 800px -.. |lab2-Postman_LB_AppFW_Results| image:: _static/lab2-Postman_LB_AppFW_Results.png +.. |lab1-Account_Settings| image:: _static/lab1-Account_Settings.png :width: 800px -.. |lab1-Chrome| image:: _static/lab1-Chrome.png +.. |lab1-Credentials| image:: _static/lab1-Credentials.png :width: 800px -.. |lab1-XC_Bookmark| image:: _static/lab1-XC_Bookmark.png +.. |lab1-Add_Credentials| image:: _static/lab1-Add_Credentials.png :width: 800px -.. |lab1-XC_Signin| image:: _static/lab1-XC_Signin.png +.. |lab2-Terraform_Download_API_Cert| image:: _static/lab2-Terraform_Download_API_Cert.png :width: 800px -.. |lab1-XC_App_Connect| image:: _static/lab1-XC_App_Connect.png +.. |lab2-Terraform_Auth_Folders| image:: _static/lab2-Terraform_Auth_Folders.png :width: 800px -.. |lab1-XC_LB| image:: _static/lab1-XC_LB.png +.. |lab2-Terraform_Auth_Folders_New| image:: _static/lab2-Terraform_Auth_Folders_New.png :width: 800px -.. |lab1-XC_LB_Manage| image:: _static/lab1-XC_LB_Manage.png +.. |lab2-Terraform_Auth_Folders_Cert| image:: _static/lab2-Terraform_Auth_Folders_Cert.png :width: 800px -.. |lab1-XC_LB_JSON| image:: _static/lab1-XC_LB_JSON.png +.. |lab2-Terraform_Auth_Env| image:: _static/lab2-Terraform_Auth_Env.png :width: 800px -.. |lab2-XC_LB_AppFW_JSON_Data| image:: _static/lab2-XC_LB_AppFW_JSON_Data.png +.. |lab2-Terraform_Tfvars| image:: _static/lab2-Terraform_Tfvars.png :width: 800px -.. |lab2-Postman_SP_Body| image:: _static/lab2-Postman_SP_Body.png +.. |lab2-Terraform_Deploy_Directory| image:: _static/lab2-Terraform_Deploy_Directory.png :width: 800px -.. |lab2-Postman_SP_Send| image:: _static/lab2-Postman_SP_Send.png +.. |lab2-Terraform_Deploy_Init| image:: _static/lab2-Terraform_Deploy_Init.png :width: 800px -.. |lab2-Postman_SP_Results| image:: _static/lab2-Postman_SP_Results.png +.. |lab2-Terraform_Deploy_Init_Success| image:: _static/lab2-Terraform_Deploy_Init_Success.png :width: 800px -.. |lab2-Postman_LB_SP_Body| image:: _static/lab2-Postman_LB_SP_Body.png +.. |lab2-Terraform_Deploy_Plan| image:: _static/lab2-Terraform_Deploy_Plan.png :width: 800px -.. |lab2-Postman_LB_SP_Send| image:: _static/lab2-Postman_LB_SP_Send.png +.. |lab2-Terraform_Deploy_Apply| image:: _static/lab2-Terraform_Deploy_Apply.png :width: 800px -.. |lab2-Postman_LB_SP_Results| image:: _static/lab2-Postman_LB_SP_Results.png +.. |lab2-Terraform_Deploy_Apply_Yes| image:: _static/lab2-Terraform_Deploy_Apply_Yes.png :width: 800px -.. |lab2-XC_LB_SP_JSON_Data| image:: _static/lab2-XC_LB_SP_JSON_Data.png +.. |lab2-Terraform_Deploy_Apply_Results| image:: _static/lab2-Terraform_Deploy_Apply_Results.png :width: 800px -.. |lab2-Postman_LB_Delete_Send| image:: _static/lab2-Postman_LB_Delete_Send.png +.. |lab2-Terraform_AppFw| image:: _static/lab2-Terraform_AppFw.png :width: 800px -.. |lab2-Postman_LB_Delete_Results| image:: _static/lab2-Postman_LB_Delete_Results.png +.. |lab2-Terraform_AppFw_Create| image:: _static/lab2-Terraform_AppFw_Create.png :width: 800px -.. |lab2-Postman_SP_Delete_Send| image:: _static/lab2-Postman_SP_Delete_Send.png +.. |lab2-Terraform_AppFw_Plan| image:: _static/lab2-Terraform_AppFw_Plan.png :width: 800px -.. |lab2-Postman_SP_Delete_Results| image:: _static/lab2-Postman_SP_Delete_Results.png +.. |lab2-Terraform_Console_Web| image:: _static/lab2-Terraform_Console_Web.png :width: 800px -.. |lab2-Postman_AppFW_Delete_Send| image:: _static/lab2-Postman_AppFW_Delete_Send.png +.. |lab2-Terraform_Console_Manage_LBs| image:: _static/lab2-Terraform_Console_Manage_LBs.png :width: 800px -.. |lab2-Postman_AppFW_Delete_Results| image:: _static/lab2-Postman_AppFW_Delete_Results.png +.. |lab2-Terraform_Console_Manage_LB_Manage| image:: _static/lab2-Terraform_Console_Manage_LB_Manage.png :width: 800px -.. |lab2-Postman_Pool_Delete_Send| image:: _static/lab2-Postman_Pool_Delete_Send.png +.. |lab2-Terraform_Console_Manage_LB_WebAppFw| image:: _static/lab2-Terraform_Console_Manage_LB_WebAppFw.png :width: 800px -.. |lab2-Postman_Pool_Delete_Results| image:: _static/lab2-Postman_Pool_Delete_Results.png +.. |lab2-Terraform_Console_Manage_LB_WebAppFw_Enable| image:: _static/lab2-Terraform_Console_Manage_LB_WebAppFw_Enable.png :width: 800px -.. |lab2-Postman_HC_Delete_Send| image:: _static/lab2-Postman_HC_Delete_Send.png - :width: 800px -.. |lab2-Postman_HC_Delete_Results| image:: _static/lab2-Postman_HC_Delete_Results.png +.. |lab2-Terraform_Console_Manage_LB_Cancel| image:: _static/lab2-Terraform_Console_Manage_LB_Cancel.png :width: 800px + + + .. |labend| image:: _static/labend.png :width: 800px \ No newline at end of file diff --git a/docs/class8/lab3.rst b/docs/class8/lab3.rst deleted file mode 100644 index aa9ead70..00000000 --- a/docs/class8/lab3.rst +++ /dev/null @@ -1,473 +0,0 @@ -Lab 3: Leveraging Terraform -=========================== - -The following lab tasks will guide you through using Terraform to deploy and secure a Web based application. -Students will start by creating an authentication certificate within Distributed Cloud that Terraform utilizes -for authenticating the API calls. Next, a Tfvars file is created to customize the deployment to match the -student's environment. Terraform will then be used to deploy an HTTP Health Check, Origin Pool, and HTTP Load -Balancer. Students will then modify and apply the Terraform configuration to add a Web Application Firewall -to their existing HTTP Load Balancer. Finally, Terraform will be used to tear down everything it created in -this lab. - -**Expected Lab Time: 20 minutes** - -Task 1: Deploy a Web Application with Terraform -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In this task, you will create an API Certificate for Terraform to authneticate to the Distributed Cloud API. Next, -you will create a Tfvars file to specify environment variables unique to your environment. After the Tfvars file is -created, you will intialize Terraform and then deploy an HTTP Health Check, Origin Pool, and HTTP Load Balancer. - -This lab will begin back in the Windows 10 client deployed as part of the UDF. - -+---------------------------------------------------------------------------------------------------------------+ -| **Create API Certificate from the Distributed Cloud Console** | -+===============================================================================================================+ -| 1. From the Windows 10 client deployed as part of the UDF, open Chrome. | -| | -| |lab1-Chrome| | -+---------------------------------------------------------------------------------------------------------------+ -| 2. Click on the **XC Console** bookmark to be taken to the XC Console login. | -| | -| |lab1-XC_Bookmark| | -+---------------------------------------------------------------------------------------------------------------+ -| 3. Enter your e-mail address in the **Email** form and password in the **Password** form and click **Sign** | -| | -| **In**. | -| | -| |lab1-XC_Signin| | -+---------------------------------------------------------------------------------------------------------------+ -| 4. In the top right corner of the Distributed Cloud Console click the **User Icon** dropdown and select | -| | -| **Account Settings**. | -| | -| |lab1-Account_Settings| | -+---------------------------------------------------------------------------------------------------------------+ -| 5. In the resulting screen click **Credentials** under the Peronal Management Heading on the left. | -| | -| |lab1-Credentials| | -+---------------------------------------------------------------------------------------------------------------+ -| 6. Click **Add Credentials**. | -| | -| |lab1-Add_Credentials| | -+---------------------------------------------------------------------------------------------------------------+ -| 7. Fill in the resulting form with the following values: | -| | -| * **Credential Name ID:** *-api-cert* | -| * **Credential Type: Select:** *API Certificate* | -| * **Password:** ** | -| * **Confirm Password:** ** | -| * **Expiry Date: Select:** ** | -| | -| 8. Click **Download**. | -| | -| |lab3-Terraform_Download_API_Cert| | -| | -| .. note:: | -| *Use a password that you will remember for the certificate, if you don't remember your API cert password,* | -| *you will need to generate a new API cert.* | -+---------------------------------------------------------------------------------------------------------------+ - -+---------------------------------------------------------------------------------------------------------------+ -| **Set Windows Environment Variables for Terraform to Utilize** | -+===============================================================================================================+ -| 9. Minimize the Chrome Browser and double click the **Command Prompt** icon on the Windows 10 desktop. | -| | -| |lab3-Terraform_Cmd_Prompt| | -+---------------------------------------------------------------------------------------------------------------+ -| 10. Copy the certificate you downloaded to the labuser home folder using the command: | -| | -| .. literalinclude:: lab3-copy.txt | -| | -| |lab3-Terraform_Cert_Copy| | -+---------------------------------------------------------------------------------------------------------------+ -| 11. Set an environment variable for the API certificate password with the following command: | -| | -| .. code-block:: bash | -| | -| setx VES_P12_PASSWORD "" | -| | -| |lab3-Terraform_Cert_Password| | -+---------------------------------------------------------------------------------------------------------------+ -| 12. Close the command prompt window. | -+---------------------------------------------------------------------------------------------------------------+ - -+---------------------------------------------------------------------------------------------------------------+ -| **Open the Pre-Created Terraform Code in Visual Studio Code** | -+===============================================================================================================+ -| 13. Double click the **Visual Studio Code** icon on the desktop to launch **Visual Studio Code**. | -| | -| |lab3-Terraform_VSC| | -+---------------------------------------------------------------------------------------------------------------+ -| 14. When Visual Studio Code launches, click **File** and then **Open Folder...**. | -| | -| |lab3-Terraform_VSC_Folder| | -+---------------------------------------------------------------------------------------------------------------+ -| 15. In the resulting window, paste the below text into the location bar, click the arrow to open that | -| | -| location, and then click **Select Folder**. | -| | -| .. code-block:: bash | -| | -| c:\Users\labuser\appworld-f5xc-automation\Terraform | -| | -| |lab3-Terraform_VSC_Folder_Select| | -| | -| .. note:: | -| *You may see a pop up window that says "Do you trust the authors of the files in this folder?" If you see* | -| *this pop up, click "Yes, I trust the authors"* | -+---------------------------------------------------------------------------------------------------------------+ - -+---------------------------------------------------------------------------------------------------------------+ -| **Create a tfvars File for Specifying Environment Specific Variables** | -+===============================================================================================================+ -| 16. From the **EXPLORER** frame, click the new file icon next to the TERRAFORM folder, and then enter the name| -| | -| **terraform.tfvars** for the new file that is created and press **Enter**. | -| | -| |lab3-Terraform_VSC_Tfvars| | -+---------------------------------------------------------------------------------------------------------------+ -| 17. This will open the **terraform.tfvars** file in the right frame of Visual Studio Code, enter the following| -| | -| values into the file: | -| | -| .. code-block:: bash | -| | -| api_p12 = "c:/Users/labuser/xc-api-cert.p12" | -| tenant_name = "f5-xc-lab-app" | -| namespace = "" | -| | -| |lab3-Terraform_VSC_Tfvars_Values| | -+---------------------------------------------------------------------------------------------------------------+ -| 18. Click **File** and **Save** to save the changes you made to the file. | -| | -| |lab3-Terraform_VSC_Tfvars_Save| | -+---------------------------------------------------------------------------------------------------------------+ - -+---------------------------------------------------------------------------------------------------------------+ -| **Initialize, Plan, and Apply Your Terraform Code** | -+===============================================================================================================+ -| 19. From the Visual Studio Code menu bar, click **View**, and then click **Terminal**. | -| | -| |lab3-Terraform_VSC_Terminal| | -+---------------------------------------------------------------------------------------------------------------+ -| 20. In the Terminal at the bottom of Visual Studio Code, enter the following command and press Enter: | -| | -| .. code-block:: bash | -| | -| terraform init | -| | -| |lab3-Terraform_VSC_Init| | -+---------------------------------------------------------------------------------------------------------------+ -| 21. Review the Init Results. You should see a **Terraform has been successfully initialized!** message. | -| | -| **DO NOT PROCEED AND ASK A LAB ASSISTANT FOR HELP IF YOU DON'T SEE THE SUCCESSFULLY INITIALIZED MESSAGE.**| -| | -| |lab3-Terraform_VSC_Init_Success| | -+---------------------------------------------------------------------------------------------------------------+ -| 22. In the Terminal, enter the following command and press Enter: | -| | -| .. code-block:: bash | -| | -| terraform plan | -| | -| |lab3-Terraform_VSC_Plan| | -+---------------------------------------------------------------------------------------------------------------+ -| 23. Review the Plan results. This shows what Terraform is planning to create. | -| | -| |lab3-Terraform_VSC_Plan_Results| | -+---------------------------------------------------------------------------------------------------------------+ -| 24. In the Terminal, enter the following command and press Enter: | -| | -| .. code-block:: bash | -| | -| terraform apply | -| | -| |lab3-Terraform_VSC_Apply| | -+---------------------------------------------------------------------------------------------------------------+ -| 25. When prompted **Do you want to perform these actions?**, type **yes** and press Enter. | -| | -| |lab3-Terraform_VSC_Apply_Yes| | -+---------------------------------------------------------------------------------------------------------------+ -| 26. Review the Apply results. This shows what Terraform created. | -| | -| |lab3-Terraform_VSC_Apply_Results| | -+---------------------------------------------------------------------------------------------------------------+ - -+---------------------------------------------------------------------------------------------------------------+ -| **Verify the Demo Shop App is Accessible Via a Web Browser** | -+===============================================================================================================+ -| 27. Open a new tab in your Chrome browser and enter the following URL | -| | -| **http://-demoshop.lab-app.f5demos.com** | -| | -| .. note:: | -| *This illustrates that you are able to configure the delivery of an application via the Distributed Cloud* | -| *API utilizing Terraform.* | -+---------------------------------------------------------------------------------------------------------------+ -| |lab1-Demoshop| | -+---------------------------------------------------------------------------------------------------------------+ - -Task 2: Create & Attach WAF Policy -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In this task, you will modify your Terraform configuration to create and apply an Application Firewall policy with -the default settings. Since Terraform tracks state, the apply command is used to modify the required existing -objects within Distributed Cloud. - -+---------------------------------------------------------------------------------------------------------------+ -| **Edit Your Terraform Code to Create an Application Firewall and Add It to the Load Balancer** | -+===============================================================================================================+ -| 1. From the Visual Studio Code Explorer frame, click **main.tf**, to open the Terraform configuration. | -| | -| |lab3-Terraform_VSC_Main| | -+---------------------------------------------------------------------------------------------------------------+ -| 2. Scroll down to the bottom of the configuration and paste in the following lines to create the Web | -| | -| Application Firewall policy. | -| | -| .. code-block:: bash | -| | -| # Create WAF Policy | -| resource "volterra_app_firewall" "waf" { | -| name = "${var.namespace}-appfw" | -| namespace = var.namespace | -| allow_all_response_codes = true | -| default_anonymization = true | -| use_default_blocking_page = true | -| default_bot_setting = true | -| default_detection_settings = true | -| use_loadbalancer_setting = true | -| blocking = true | -| } | -| | -| |lab3-Terraform_VSC_Appfw_Create| | -+---------------------------------------------------------------------------------------------------------------+ -| 3. Locate the **Create Load Balancer** configuration within **main.tf** and replace the **disable_waf = true**| -| | -| line with the following configuration: | -| | -| .. code-block:: bash | -| | -| # WAF Config | -| app_firewall { | -| name = volterra_app_firewall.waf.name | -| namespace = var.namespace | -| } | -| | -| |lab3-Terraform_VSC_Appfw_LB_Disable| | -| | -| |lab3-Terraform_VSC_Appfw_LB_Config| | -| | -| .. note:: | -| *The WAF Config should be indented two spaces under the Load Balancer configuration to maintain nesting* | -| *style conventions.* | -+---------------------------------------------------------------------------------------------------------------+ -| 4. Click **File** and **Save** to save the changes you made to **main.tf**. | -| | -| |lab3-Terraform_VSC_Main_Save| | -+---------------------------------------------------------------------------------------------------------------+ - -+---------------------------------------------------------------------------------------------------------------+ -| **Plan and Apply Your New Terraform Code to Create an Application Firewall and Associate It to Your LB** | -+===============================================================================================================+ -| 5. In the Terminal, enter the following command and press Enter: | -| | -| .. code-block:: bash | -| | -| terraform plan | -| | -| |lab3-Terraform_VSC_Appfw_Plan| | -+---------------------------------------------------------------------------------------------------------------+ -| 6. Review the Plan results. This shows what Terraform is planning to create. | -| | -| |lab3-Terraform_VSC_Appfw_Plan_Results| | -+---------------------------------------------------------------------------------------------------------------+ -| 7. In the Terminal, enter the following command and press Enter: | -| | -| .. code-block:: bash | -| | -| terraform apply | -| | -| |lab3-Terraform_VSC_Appfw_Apply| | -+---------------------------------------------------------------------------------------------------------------+ -| 8. When prompted **Do you want to perform these actions?**, type **yes** and press Enter. | -| | -| |lab3-Terraform_VSC_Appfw_Apply_Yes| | -+---------------------------------------------------------------------------------------------------------------+ -| 9. Review the Apply results. This shows what Terraform created. | -| | -| |lab3-Terraform_VSC_Appfw_Apply_Results| | -+---------------------------------------------------------------------------------------------------------------+ - -+---------------------------------------------------------------------------------------------------------------+ -| **Verify the Application Firewall was Created and Applied Within the Distributed Cloud Console** | -+===============================================================================================================+ -| 10. Switch back to the Chrome Browser that is connected to the Distributed Cloud Console. | -+---------------------------------------------------------------------------------------------------------------+ -| 11. Within the Distributed Cloud dashboard, select the **Multi-Cloud App Connect** tile. | -| | -| |lab1-XC_App_Connect| | -+---------------------------------------------------------------------------------------------------------------+ -| 12. In the resulting screen, expand the **Manage** menu and click **Load Balancers** and then select | -| | -| **HTTP Load Balancers**. | -| | -| |lab1-XC_LB| | -+---------------------------------------------------------------------------------------------------------------+ -| 13. From the HTTP Load Balancers page, locate the HTTP Load Balancer that you created via Terraform. Click | -| | -| the **ellipsis** under **Actions** and select **Manage Configuration**. | -| | -| |lab1-XC_LB_Manage| | -+---------------------------------------------------------------------------------------------------------------+ -| 14. From the resulting screen, select **Web Application Firewall** under the HTTP Load Balancer frame to jump | -| | -| to the **Web Application Firewall** configuration section. | -| | -| |lab3-XC_Terraform_WAF| | -+---------------------------------------------------------------------------------------------------------------+ -| 15. Notice that the Web Application Firewall is now Enabled and the policy you created using Terraform is | -| | -| applied. | -| | -| |lab3-XC_Terraform_WAF_Enable| | -+---------------------------------------------------------------------------------------------------------------+ -| 16. Click Cancel and Exit to close out of the HTTP Load Balancer configuration. | -| | -| |lab3-XC_Terraform_WAF_Cancel| | -+---------------------------------------------------------------------------------------------------------------+ - -Task 3: Destroy the Terraform Objects -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In this task, you will use Terraform to destroy the HTTP Health Check, Origin Pool, HTTP Load Balancer, and Web -Application Firewall Policy that was created in Tasks 1 & 2. - -+---------------------------------------------------------------------------------------------------------------+ -| **Delete Distributed Cloud Objects Utilizing Terraform Destroy** | -+===============================================================================================================+ -| 1. Switch back to the Visual Studio Code application. | -+---------------------------------------------------------------------------------------------------------------+ -| 2. In the Visual Studio Code Terminal, enter the following command and press Enter: | -| | -| .. code-block:: bash | -| | -| terraform destroy | -| | -| |lab3-Terraform_VSC_Destroy| | -+---------------------------------------------------------------------------------------------------------------+ -| 3. When prompted **Do you really want to destroy all resources?** type **yes** and press Enter. | -| | -| |lab3-Terraform_VSC_Destroy_Yes| | -+---------------------------------------------------------------------------------------------------------------+ -| 4. Review the Destroy results. This shows what Terraform deleted. | -| | -| |lab3-Terraform_VSC_Destroy_Results| | -+---------------------------------------------------------------------------------------------------------------+ - -+---------------------------------------------------------------------------------------------------------------+ -| **End of Lab 3** | -+===============================================================================================================+ -| This concludes Lab 3. In this lab, you learned how to setup Terraform to authenticate to to Distributed Cloud | -| | -| utilizing an API Certificate. You then created a Tfvars file to customize the deployment to match your | -| | -| environment. After that, you used Terraform to deploy an HTTP Health Check, Origin Pool, and HTTP Load | -| | -| Balancer. The Terraform configuration was then modified to create a Web Application Firewall policy and apply | -| | -| it to the HTTP Load Balancer. Finally, Terraform was used to destroy all of the objects created in this lab. A| -| | -| brief presentation and demo will be shared prior to the conclusion of this class. | -+---------------------------------------------------------------------------------------------------------------+ -| |labend| | -+---------------------------------------------------------------------------------------------------------------+ - -.. |lab1-Chrome| image:: _static/lab1-Chrome.png - :width: 800px -.. |lab1-XC_Bookmark| image:: _static/lab1-XC_Bookmark.png - :width: 800px -.. |lab1-XC_Signin| image:: _static/lab1-XC_Signin.png - :width: 800px -.. |lab1-Account_Settings| image:: _static/lab1-Account_Settings.png - :width: 800px -.. |lab1-Credentials| image:: _static/lab1-Credentials.png - :width: 800px -.. |lab1-Add_Credentials| image:: _static/lab1-Add_Credentials.png - :width: 800px -.. |lab3-Terraform_Download_API_Cert| image:: _static/lab3-Terraform_Download_API_Cert.png - :width: 800px -.. |lab3-Terraform_Cmd_Prompt| image:: _static/lab3-Terraform_Cmd_Prompt.png - :width: 800px -.. |lab3-Terraform_Cert_Copy| image:: _static/lab3-Terraform_Cert_Copy.png - :width: 800px -.. |lab3-Terraform_Cert_Password| image:: _static/lab3-Terraform_Cert_Password.png - :width: 800px -.. |lab3-Terraform_VSC| image:: _static/lab3-Terraform_VSC.png - :width: 800px -.. |lab3-Terraform_VSC_Folder| image:: _static/lab3-Terraform_VSC_Folder.png - :width: 800px -.. |lab3-Terraform_VSC_Folder_Select| image:: _static/lab3-Terraform_VSC_Folder_Select.png - :width: 800px -.. |lab3-Terraform_VSC_Tfvars| image:: _static/lab3-Terraform_VSC_tfvars.png - :width: 800px -.. |lab3-Terraform_VSC_Tfvars_Values| image:: _static/lab3-Terraform_VSC_tfvars_values.png - :width: 800px -.. |lab3-Terraform_VSC_Tfvars_Save| image:: _static/lab3-Terraform_VSC_tfvars_save.png - :width: 800px -.. |lab3-Terraform_VSC_Terminal| image:: _static/lab3-Terraform_VSC_Terminal.png - :width: 800px -.. |lab3-Terraform_VSC_Init| image:: _static/lab3-Terraform_VSC_Init.png - :width: 800px -.. |lab3-Terraform_VSC_Init_Success| image:: _static/lab3-Terraform_VSC_Init_Success.png - :width: 800px -.. |lab3-Terraform_VSC_Plan| image:: _static/lab3-Terraform_VSC_Plan.png - :width: 800px -.. |lab3-Terraform_VSC_Plan_Results| image:: _static/lab3-Terraform_VSC_Plan_Results.png - :width: 800px -.. |lab3-Terraform_VSC_Apply| image:: _static/lab3-Terraform_VSC_Apply.png - :width: 800px -.. |lab3-Terraform_VSC_Apply_Yes| image:: _static/lab3-Terraform_VSC_Apply_Yes.png - :width: 800px -.. |lab3-Terraform_VSC_Apply_Results| image:: _static/lab3-Terraform_VSC_Apply_Results.png - :width: 800px -.. |lab1-Demoshop| image:: _static/lab1-Demoshop.png - :width: 800px -.. |lab3-Terraform_VSC_Main| image:: _static/lab3-Terraform_VSC_Main.png - :width: 800px -.. |lab3-Terraform_VSC_Appfw_Create| image:: _static/lab3-Terraform_VSC_Appfw_Create.png - :width: 800px -.. |lab3-Terraform_VSC_Appfw_LB_Disable| image:: _static/lab3-Terraform_VSC_Appfw_LB_Disable.png - :width: 800px -.. |lab3-Terraform_VSC_Appfw_LB_Config| image:: _static/lab3-Terraform_VSC_Appfw_LB_Config.png - :width: 800px -.. |lab3-Terraform_VSC_Main_Save| image:: _static/lab3-Terraform_VSC_Main_Save.png - :width: 800px -.. |lab3-Terraform_VSC_Appfw_Plan| image:: _static/lab3-Terraform_VSC_Appfw_Plan.png - :width: 800px -.. |lab3-Terraform_VSC_Appfw_Plan_Results| image:: _static/lab3-Terraform_VSC_Appfw_Plan_Results.png - :width: 800px -.. |lab3-Terraform_VSC_Appfw_Apply| image:: _static/lab3-Terraform_VSC_Appfw_Apply.png - :width: 800px -.. |lab3-Terraform_VSC_Appfw_Apply_Yes| image:: _static/lab3-Terraform_VSC_Appfw_Apply_Yes.png - :width: 800px -.. |lab3-Terraform_VSC_Appfw_Apply_Results| image:: _static/lab3-Terraform_VSC_Appfw_Apply_Results.png - :width: 800px -.. |lab1-XC_App_Connect| image:: _static/lab1-XC_App_Connect.png - :width: 800px -.. |lab1-XC_LB| image:: _static/lab1-XC_LB.png - :width: 800px -.. |lab1-XC_LB_Manage| image:: _static/lab1-XC_LB_Manage.png - :width: 800px -.. |lab3-XC_Terraform_WAF| image:: _static/lab3-XC_Terraform_WAF.png - :width: 800px -.. |lab3-XC_Terraform_WAF_Enable| image:: _static/lab3-XC_Terraform_WAF_Enable.png - :width: 800px -.. |lab3-XC_Terraform_WAF_Cancel| image:: _static/lab3-XC_Terraform_WAF_Cancel.png - :width: 800px -.. |lab3-Terraform_VSC_Destroy| image:: _static/lab3-Terraform_VSC_Destroy.png - :width: 800px -.. |lab3-Terraform_VSC_Destroy_Yes| image:: _static/lab3-Terraform_VSC_Destroy_yes.png - :width: 800px -.. |lab3-Terraform_VSC_Destroy_Results| image:: _static/lab3-Terraform_VSC_Destroy_Results.png - :width: 800px -.. |labend| image:: _static/labend.png - :width: 800px \ No newline at end of file diff --git a/docs/class8/rdpclient.rst b/docs/class8/rdpclient.rst deleted file mode 100644 index 75a5da55..00000000 --- a/docs/class8/rdpclient.rst +++ /dev/null @@ -1,76 +0,0 @@ -RDP Client -========== - -If you don't already have an RDP client installed, you can download the RDP client that corresponds to your -operating system by following the links below. - -+-------------------+-------------------------------------------------------------------------------------------+ -| Operating System | Documentation and Download Link | -+===================+===========================================================================================+ -| macOS | `Remote Desktop Mac`_ | -+-------------------+-------------------------------------------------------------------------------------------+ -| iOS/iPadOS | `Remote Desktop iOS`_ | -+-------------------+-------------------------------------------------------------------------------------------+ -| Android/Chrome OS | `Remote Desktop Android`_ | -+-------------------+-------------------------------------------------------------------------------------------+ -| Linux | `Remote Desktop Linux`_ | -+-------------------+-------------------------------------------------------------------------------------------+ - -The username and password for the Windows 10 host are: - -+----------------------+----------------------+ -| Username | Password | -+======================+======================+ -| .. code-block:: bash | .. code-block:: bash | -| | | -| labuser | F5L@bUser! | -+----------------------+----------------------+ - -+---------------------------------------------------------------------------------------------------------------+ -| Accessing the UDF Windows 10 Client via RDP | -+===============================================================================================================+ -| 1. From the Webrowser tab that you used to login to the UDF environment, select **Deployment** if you aren't | -| | -| already there. | -| | -| |lab1-RDP_Client_Deployment| | -| | -| 2. On the Deployment screen click the **ACCESS** link under the **Windows 10 Client** and choose the screen | -| | -| resolution you would like to use under RDP. This will start the download of a .rdp file with the RDP | -| | -| connection information. | -| | -| |lab1-RDP_Client_Download| | -| | -| .. note:: | -| *This will start the download of a .rdp file with RDP connection information. Please note where you saved* | -| *this file.* | -| | -| 3. Open the .rdp file you downloaded in step 3. This file should automatically open in your RDP client. | -| | -| 4. Enter **labuser** for the Username and **F5L@bUser!** for the password then click **Continue**. | -| | -| |lab1-RDP_Client_Login| | -| | -| .. note:: | -| *Your RDP client may look different depending on the operating system you are using.* | -| | -| 5. You should now be logged into the Windows 10 client virtual machine. | -| | -| |lab1-RDP_Windows10_Desktop| | -+---------------------------------------------------------------------------------------------------------------+ - -.. _Remote Desktop Mac: https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-mac/ -.. _Remote Desktop iOS: https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-ios/ -.. _Remote Desktop Android: https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-android/ -.. _Remote Desktop Linux: https://remmina.org/ - -.. |lab1-RDP_Client_deployment| image:: _static/lab1-RDP_Client_Deployment.png - :width: 800px -.. |lab1-RDP_Client_Download| image:: _static/lab1-RDP_Client_Download.png - :width: 800px -.. |lab1-RDP_Client_Login| image:: _static/lab1-RDP_Client_Login.png - :width: 800px -.. |lab1-RDP_Windows10_Desktop| image:: _static/lab1-RDP_Windows10_Desktop.png - :width: 800px \ No newline at end of file diff --git a/docs/class8/webrdp.rst b/docs/class8/webrdp.rst deleted file mode 100644 index a978fdc3..00000000 --- a/docs/class8/webrdp.rst +++ /dev/null @@ -1,49 +0,0 @@ -Web RDP -======= - -The username and password for the Windows 10 host are: - -+----------------------+----------------------+ -| Username | Password | -+======================+======================+ -| .. code-block:: bash | .. code-block:: bash | -| | | -| labuser | F5L@bUser! | -+----------------------+----------------------+ - -+---------------------------------------------------------------------------------------------------------------+ -| Accessing the UDF Windows 10 Client via Web RDP | -+===============================================================================================================+ -| 1. From the Webrowser tab that you used to login to the UDF environment, select deployment if you aren't | -| | -| already there. | -| | -| |lab1-RDP_Client_Deployment| | -| | -| 2. Click the **ACCESS** button under the WebRDP system and select **Guacamole**. | -| | -| |lab1-WebRDP_Guacamole| | -| | -| 3. If you are not automatically logged in, enter *labuser* for the **Username** and *F5L@bUser!* for the | -| | -| **Password** and click **Login**. | -| | -| |lab1-WebRDP_Guacamole_Login| | -| | -| 6. You should now be logged into the Windows 10 client virtual machine. | -| | -| |lab1-WebRDP_Windows10_Desktop| | -| | -| .. note:: | -| *You should be automatically logged into the Windows 10 client, but if you are not use the Username* | -| *labuser and the password F5L@bUser!* | -+---------------------------------------------------------------------------------------------------------------+ - -.. |lab1-RDP_Client_Deployment| image:: _static/lab1-RDP_Client_Deployment.png - :width: 800px -.. |lab1-WebRDP_Guacamole| image:: _static/lab1-WebRDP_Guacamole.png - :width: 800px -.. |lab1-WebRDP_Guacamole_Login| image:: _static/lab1-WebRDP_Guacamole_Login.png - :width: 800px -.. |lab1-WebRDP_Windows10_Desktop| image:: _static/lab1-WebRDP_Windows10_Desktop.png - :width: 800px \ No newline at end of file