diff --git a/assets/js/0817c5ed.3a57a2f1.js b/assets/js/0817c5ed.8457de86.js
similarity index 97%
rename from assets/js/0817c5ed.3a57a2f1.js
rename to assets/js/0817c5ed.8457de86.js
index 7f454c6..94481eb 100644
--- a/assets/js/0817c5ed.3a57a2f1.js
+++ b/assets/js/0817c5ed.8457de86.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[8880],{363:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>h,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var s=r(4848),n=r(8453);const i={},c="Resources",o={id:"TheHive/thehive-resources",title:"Resources",description:"TheHIve",source:"@site/docs/TheHive/thehive-resources.mdx",sourceDirName:"TheHive",slug:"/TheHive/thehive-resources",permalink:"/docs/TheHive/thehive-resources",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Cortex Neurons",permalink:"/docs/TheHive/cortex-neurons"}},h={},l=[{value:"TheHIve",id:"thehive",level:2},{value:"Resources",id:"resources-1",level:3},{value:"Cortex",id:"cortex",level:2},{value:"Resources",id:"resources-2",level:3}];function a(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"resources",children:"Resources"}),"\n",(0,s.jsx)(t.h2,{id:"thehive",children:"TheHIve"}),"\n",(0,s.jsx)(t.h3,{id:"resources-1",children:"Resources"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.strangebee.com/thehive/setup/",children:"TheHive5 documentation"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.elastic.co/guide/en/elasticsearch/reference/7.17/indices-delete-index.html",children:"Elasticsearch 7 documentation & cURL calls"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://cassandra.apache.org/doc/latest/",children:"Cassandra documentation"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"cortex",children:"Cortex"}),"\n",(0,s.jsx)(t.h3,{id:"resources-2",children:"Resources"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.thehive-project.org/cortex/",children:"Cortex documentation"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://thehive-project.github.io/Cortex-Analyzers/",children:"Cortex Neurons documentation"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/TheHive-Project/Cortex-Analyzers/",children:"Cortex analyzers Github"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/TheHive-Project/Cortex-Analyzers/tree/master/utils/docker",children:"Cortex Neurons docker utils"})}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>c,x:()=>o});var s=r(6540);const n={},i=s.createContext(n);function c(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[8880],{363:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>h,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var s=r(4848),n=r(8453);const i={},c="Resources",o={id:"TheHive/thehive-resources",title:"Resources",description:"TheHIve",source:"@site/docs/TheHive/thehive-resources.mdx",sourceDirName:"TheHive",slug:"/TheHive/thehive-resources",permalink:"/docs/TheHive/thehive-resources",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Cortex Neurons",permalink:"/docs/TheHive/cortex-neurons"}},h={},l=[{value:"TheHIve",id:"thehive",level:2},{value:"Resources",id:"resources-1",level:3},{value:"Cortex",id:"cortex",level:2},{value:"Resources",id:"resources-2",level:3}];function a(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"resources",children:"Resources"}),"\n",(0,s.jsx)(t.h2,{id:"thehive",children:"TheHIve"}),"\n",(0,s.jsx)(t.h3,{id:"resources-1",children:"Resources"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.strangebee.com/thehive/setup/",children:"TheHive5 documentation"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://www.elastic.co/guide/en/elasticsearch/reference/7.17/indices-delete-index.html",children:"Elasticsearch 7 documentation & cURL calls"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://cassandra.apache.org/doc/latest/",children:"Cassandra documentation"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"cortex",children:"Cortex"}),"\n",(0,s.jsx)(t.h3,{id:"resources-2",children:"Resources"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://docs.thehive-project.org/cortex/",children:"Cortex documentation"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://thehive-project.github.io/Cortex-Analyzers/",children:"Cortex Neurons documentation"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/TheHive-Project/Cortex-Analyzers/",children:"Cortex analyzers Github"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"https://github.com/TheHive-Project/Cortex-Analyzers/tree/master/utils/docker",children:"Cortex Neurons docker utils"})}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>c,x:()=>o});var s=r(6540);const n={},i=s.createContext(n);function c(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:c(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/1365e388.4537fe05.js b/assets/js/1365e388.c1b6fbd3.js
similarity index 97%
rename from assets/js/1365e388.4537fe05.js
rename to assets/js/1365e388.c1b6fbd3.js
index 41b01b9..a07756a 100644
--- a/assets/js/1365e388.4537fe05.js
+++ b/assets/js/1365e388.c1b6fbd3.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[6344],{4321:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var r=t(4848),i=t(8453);const s={},o="Infrastructure as Code",a={id:"Engineering/IaC",title:"Infrastructure as Code",description:"Summary",source:"@site/docs/Engineering/IaC.md",sourceDirName:"Engineering",slug:"/Engineering/IaC",permalink:"/docs/Engineering/IaC",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Disaster Recovery Plan",permalink:"/docs/Engineering/DRP"},next:{title:"Port-forwarding to localhost",permalink:"/docs/GCP/Identity-Aware Proxy/port-forwarding"}},c={},l=[{value:"Summary",id:"summary",level:2},{value:"Tools",id:"tools",level:2}];function d(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"infrastructure-as-code",children:"Infrastructure as Code"}),"\n",(0,r.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Used for provisioning and managing cloud resources"}),"\n",(0,r.jsx)(n.li,{children:"Ex : Creating and provisioning a VM"}),"\n",(0,r.jsx)(n.li,{children:"Referring to all APIs used to deploy infrastructure"}),"\n",(0,r.jsx)(n.li,{children:"Declarative statements : the yaml configuration is a picture of the desired stage. Unlike CLI commands which are imperative and tells what to do : We can focus on how the infrastructure should be."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"tools",children:"Tools"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://www.terraform.io/",children:"Hashicorp Terraform"}),", which is multi API / multi-cloud with an open-source core."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var r=t(6540);const i={},s=r.createContext(i);function o(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[6344],{4321:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var r=t(4848),i=t(8453);const s={},o="Infrastructure as Code",a={id:"Engineering/IaC",title:"Infrastructure as Code",description:"Summary",source:"@site/docs/Engineering/IaC.md",sourceDirName:"Engineering",slug:"/Engineering/IaC",permalink:"/docs/Engineering/IaC",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Disaster Recovery Plan",permalink:"/docs/Engineering/DRP"},next:{title:"Port-forwarding to localhost",permalink:"/docs/GCP/Identity-Aware Proxy/port-forwarding"}},c={},l=[{value:"Summary",id:"summary",level:2},{value:"Tools",id:"tools",level:2}];function d(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"infrastructure-as-code",children:"Infrastructure as Code"}),"\n",(0,r.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Used for provisioning and managing cloud resources"}),"\n",(0,r.jsx)(n.li,{children:"Ex : Creating and provisioning a VM"}),"\n",(0,r.jsx)(n.li,{children:"Referring to all APIs used to deploy infrastructure"}),"\n",(0,r.jsx)(n.li,{children:"Declarative statements : the yaml configuration is a picture of the desired stage. Unlike CLI commands which are imperative and tells what to do : We can focus on how the infrastructure should be."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"tools",children:"Tools"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://www.terraform.io/",children:"Hashicorp Terraform"}),", which is multi API / multi-cloud with an open-source core."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>a});var r=t(6540);const i={},s=r.createContext(i);function o(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/5b48c0f7.1e1feb59.js b/assets/js/5b48c0f7.c74b3358.js
similarity index 99%
rename from assets/js/5b48c0f7.1e1feb59.js
rename to assets/js/5b48c0f7.c74b3358.js
index 8ba92e5..7660f14 100644
--- a/assets/js/5b48c0f7.1e1feb59.js
+++ b/assets/js/5b48c0f7.c74b3358.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4386],{7957:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>_,contentTitle:()=>a,default:()=>S,frontMatter:()=>o,metadata:()=>E,toc:()=>l});var t=s(4848),r=s(8453);const o={},a="Shuffle",E={id:"Shuffle",title:"Shuffle",description:"Resources",source:"@site/docs/Shuffle.mdx",sourceDirName:".",slug:"/Shuffle",permalink:"/docs/Shuffle",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Resources",permalink:"/docs/Security Operations/secops-resources"},next:{title:"Cortex Neurons",permalink:"/docs/TheHive/cortex-neurons"}},_={},l=[{value:"Resources",id:"resources",level:2},{value:"Scripts",id:"scripts",level:2},{value:"Updating Shuffle",id:"updating-shuffle",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Frontend / Backend / DB / "Manager"",id:"frontend--backend--db--manager",level:3},{value:"Worker / Orborus",id:"worker--orborus",level:3},{value:"Issues",id:"issues",level:2},{value:"App malfunctioning",id:"app-malfunctioning",level:3},{value:"Delete the docker image",id:"delete-the-docker-image",level:4}];function i(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"shuffle",children:"Shuffle"}),"\n",(0,t.jsx)(n.h2,{id:"resources",children:"Resources"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://shuffler.io/docs/configuration",children:"Shuffle documentation"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"scripts",children:"Scripts"}),"\n",(0,t.jsx)(n.h3,{id:"updating-shuffle",children:"Updating Shuffle"}),"\n",(0,t.jsx)(n.p,{children:"Valid for both Manager & Worker servers."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="shuffle-update.sh"',children:"cd /opt/Shuffle\ndocker-compose down\ngit pull\ndocker-compose pull\ndocker-compose up -d --remove-orphans\ndocker pull frikky/shuffle:app_sdk\ndocker pull ghcr.io/shuffle/shuffle-worker:latest\n"})}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.h3,{id:"frontend--backend--db--manager",children:'Frontend / Backend / DB / "Manager"'}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="Shuffle/docker-compose.yml"',children:'version: \'3\'\nservices:\n frontend:\n #build: ./frontend\n image: ghcr.io/shuffle/shuffle-frontend:latest\n container_name: shuffle-frontend\n hostname: shuffle-frontend\n ports:\n - "${FRONTEND_PORT}:80"\n - "${FRONTEND_PORT_HTTPS}:443"\n networks:\n - shuffle\n environment:\n - BACKEND_HOSTNAME=${BACKEND_HOSTNAME}\n restart: unless-stopped\n depends_on:\n - backend\n backend:\n #build: ./backend\n image: ghcr.io/shuffle/shuffle-backend:latest\n container_name: shuffle-backend\n hostname: ${BACKEND_HOSTNAME}\n # Here for debugging:\n ports:\n - "${BACKEND_PORT}:5001"\n networks:\n - shuffle\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - ${SHUFFLE_APP_HOTLOAD_LOCATION}:/shuffle-apps\n - ${SHUFFLE_FILE_LOCATION}:/shuffle-files\n #- ${SHUFFLE_OPENSEARCH_CERTIFICATE_FILE}:/shuffle-files/es_certificate\n env_file: .env\n environment:\n - SHUFFLE_APP_HOTLOAD_FOLDER=/shuffle-apps\n - SHUFFLE_FILE_LOCATION=/shuffle-files\n restart: unless-stopped\n depends_on:\n - opensearch #Not necessary because dependancy is handled within the backend itself instead\n #- database\n opensearch:\n image: opensearchproject/opensearch:2\n hostname: shuffle-opensearch\n container_name: shuffle-opensearch\n environment:\n - bootstrap.memory_lock=true\n - "OPENSEARCH_JAVA_OPTS=-Xms4096m -Xmx4096m" # minimum and maximum Java heap size, recommend setting both to 50% of system RAM\n - cluster.routing.allocation.disk.threshold_enabled=false\n - cluster.name=shuffle-cluster\n - node.name=shuffle-opensearch\n - discovery.seed_hosts=shuffle-opensearch\n - cluster.initial_master_nodes=shuffle-opensearch\n - node.store.allow_mmap=false\n ulimits:\n memlock:\n soft: -1\n hard: -1\n nofile:\n soft: 65536 \n hard: 65536\n volumes:\n - ${DB_LOCATION}:/usr/share/opensearch/data:rw\n ports:\n - 9200:9200\n networks:\n - shuffle\n restart: unless-stopped\nnetworks:\n shuffle:\n driver: bridge\n #driver: overlay \n'})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="Shuffle/.env"',children:'# Default execution environment for workers\nORG_ID=Shuffle\nENVIRONMENT_NAME=Shuffle\n\n\n# Remote github config for first load\nSHUFFLE_DOWNLOAD_WORKFLOW_LOCATION=\nSHUFFLE_DOWNLOAD_WORKFLOW_USERNAME=\nSHUFFLE_DOWNLOAD_WORKFLOW_PASSWORD=\nSHUFFLE_DOWNLOAD_WORKFLOW_BRANCH=\n\nSHUFFLE_APP_DOWNLOAD_LOCATION=https://github.com/nusantara-self/Shuffle-apps\nSHUFFLE_DOWNLOAD_AUTH_USERNAME=\nSHUFFLE_DOWNLOAD_AUTH_PASSWORD=\nSHUFFLE_DOWNLOAD_AUTH_BRANCH=\nSHUFFLE_APP_FORCE_UPDATE=false\nSSO_REDIRECT_URL=https://your-shuffle-domain-name.com\n\n\n# User config for first load. Username & PW: min length 3\nSHUFFLE_DEFAULT_USERNAME=\nSHUFFLE_DEFAULT_PASSWORD=\nSHUFFLE_DEFAULT_APIKEY=\n\n# Local location of your app directory. Can\'t use ~/\n# Files will get better at some point. Right now: local saving.\nSHUFFLE_APP_HOTLOAD_FOLDER=./shuffle-apps\nSHUFFLE_APP_HOTLOAD_LOCATION=./shuffle-apps\nSHUFFLE_FILE_LOCATION=./shuffle-files\n\n# Encryption modifier. This HAS to be set to encrypt any authentication being used in Shuffle. This is put together with other relevant values to ensure multiple parts are needed to decrypt. \n# If this key is lost or changed, you will have to reauthenticate all apps.\nSHUFFLE_ENCRYPTION_MODIFIER=\n\n# Other configs\nBASE_URL=http://shuffle-backend:5001 \nBACKEND_HOSTNAME=shuffle-backend\nBACKEND_PORT=5001\nFRONTEND_PORT=3001\nFRONTEND_PORT_HTTPS=3443\n\n# CHANGE THIS IF YOU WANT GOOD LOCAL EXECUTIONS:\nOUTER_HOSTNAME=shuffle-backend\nDB_LOCATION=./shuffle-database\nDOCKER_API_VERSION=1.40\n\n# Proxy configurations. SHUFFLE_PASS_WORKER_PROXY must be FALSE to not pass the proxy information to sub-apps.\n# PS: It will skip proxy for \nHTTP_PROXY=\nHTTPS_PROXY=\nSHUFFLE_PASS_WORKER_PROXY=TRUE\nSHUFFLE_PASS_APP_PROXY=FALSE\nTZ=Europe/Amsterdam \t\t\t\t\t# Timezone-handler in Orborus, Worker and Apps\nORBORUS_CONTAINER_NAME=\t\t\t\t# Used to FIND the containername. cgroup v2: issue 501\n\nSHUFFLE_BASE_IMAGE_NAME=shuffle\nSHUFFLE_BASE_IMAGE_REGISTRY=ghcr.io\nSHUFFLE_BASE_IMAGE_TAG_SUFFIX="-1.1.0"\n\n# Used for auto-cleanup of containers. REALLY important at scale.\nSHUFFLE_CONTAINER_AUTO_CLEANUP=true\nSHUFFLE_ELASTIC=true\nSHUFFLE_LOGS_DISABLED=false\nSHUFFLE_CHAT_DISABLED=false\nSHUFFLE_RERUN_SCHEDULE=300\n\n# DATABASE CONFIGURATIONS\nDATASTORE_EMULATOR_HOST=shuffle-database:8000\n#SHUFFLE_OPENSEARCH_URL=http://shuffle-opensearch:9200\nSHUFFLE_OPENSEARCH_URL=https://shuffle-opensearch:9200\nSHUFFLE_OPENSEARCH_USERNAME=admin\nSHUFFLE_OPENSEARCH_PASSWORD=admin\nSHUFFLE_OPENSEARCH_CERTIFICATE_FILE=\nSHUFFLE_OPENSEARCH_APIKEY=\nSHUFFLE_OPENSEARCH_CLOUDID=\nSHUFFLE_OPENSEARCH_PROXY=\nSHUFFLE_OPENSEARCH_INDEX_PREFIX=\nSHUFFLE_OPENSEARCH_SKIPSSL_VERIFY=true\n\n'})}),"\n",(0,t.jsx)(n.h3,{id:"worker--orborus",children:"Worker / Orborus"}),"\n",(0,t.jsx)(n.p,{children:"On a separate server"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="Shuffle/docker-compose.yml"',children:"version: '3'\nservices:\n orborus:\n #build: ./functions/onprem/orborus\n image: ghcr.io/shuffle/shuffle-orborus:latest\n container_name: shuffle-orborus\n hostname: shuffle-orborus\n networks:\n - shuffle\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - SHUFFLE_WORKER_VERSION=latest\n - SHUFFLE_APP_SDK_VERSION=latest\n - ORG_ID=${ENVIRONMENT_NAME}\n - ENVIRONMENT_NAME=${ENVIRONMENT_NAME}\n - BASE_URL=http://MANAGER-IP:5001\n - DOCKER_API_VERSION=1.40\n - SHUFFLE_BASE_IMAGE_NAME=${SHUFFLE_BASE_IMAGE_NAME}\n - SHUFFLE_BASE_IMAGE_REGISTRY=${SHUFFLE_BASE_IMAGE_REGISTRY}\n - SHUFFLE_BASE_IMAGE_TAG_SUFFIX=${SHUFFLE_BASE_IMAGE_TAG_SUFFIX}\n - HTTP_PROXY=${HTTP_PROXY}\n - HTTPS_PROXY=${HTTPS_PROXY}\n - SHUFFLE_PASS_WORKER_PROXY=${SHUFFLE_PASS_WORKER_PROXY}\n - SHUFFLE_PASS_APP_PROXY=${SHUFFLE_PASS_APP_PROXY}\n - SHUFFLE_ORBORUS_EXECUTION_TIMEOUT=550\n - SHUFFLE_ORBORUS_EXECUTION_CONCURRENCY=25\n - CLEANUP=true\n restart: unless-stopped\nnetworks:\n shuffle:\n driver: bridge\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Example of Shuffle/.env"',children:'# Default execution environment for workers\nORG_ID=Shuffle\nENVIRONMENT_NAME=OrborusPROD\n\n\n# Remote github config for first load\nSHUFFLE_DOWNLOAD_WORKFLOW_LOCATION=\nSHUFFLE_DOWNLOAD_WORKFLOW_USERNAME=\nSHUFFLE_DOWNLOAD_WORKFLOW_PASSWORD=\nSHUFFLE_DOWNLOAD_WORKFLOW_BRANCH=\n\nSHUFFLE_APP_DOWNLOAD_LOCATION=https://github.com/shuffle/python-apps\nSHUFFLE_DOWNLOAD_AUTH_USERNAME=\nSHUFFLE_DOWNLOAD_AUTH_PASSWORD=\nSHUFFLE_DOWNLOAD_AUTH_BRANCH=\nSHUFFLE_APP_FORCE_UPDATE=false\n\n# User config for first load. Username & PW: min length 3\nSHUFFLE_DEFAULT_USERNAME=\nSHUFFLE_DEFAULT_PASSWORD=\nSHUFFLE_DEFAULT_APIKEY=\n\n# Local location of your app directory. Can\'t use ~/\n# Files will get better at some point. Right now: local saving.\nSHUFFLE_APP_HOTLOAD_FOLDER=./shuffle-apps\nSHUFFLE_APP_HOTLOAD_LOCATION=./shuffle-apps\nSHUFFLE_FILE_LOCATION=./shuffle-files\n\n# Encryption modifier. This HAS to be set to encrypt any authentication being used in Shuffle. This is put together with other relevant values to ensure multiple parts are needed to decrypt. \n# If this key is lost or changed, you will have to reauthenticate all apps.\nSHUFFLE_ENCRYPTION_MODIFIER=\n\n# Other configs\nBASE_URL=http://shuffle-backend:5001 \nBACKEND_HOSTNAME=shuffle-backend\nBACKEND_PORT=5001\nFRONTEND_PORT=3001\nFRONTEND_PORT_HTTPS=3443\n\n# CHANGE THIS IF YOU WANT GOOD LOCAL EXECUTIONS:\nOUTER_HOSTNAME=shuffle-backend\nDB_LOCATION=./shuffle-database\nDOCKER_API_VERSION=1.40\n\n# Proxy configurations. SHUFFLE_PASS_WORKER_PROXY must be FALSE to not pass the proxy information to sub-apps.\n# PS: It will skip proxy for \nHTTP_PROXY=\nHTTPS_PROXY=\nSHUFFLE_PASS_WORKER_PROXY=TRUE\nSHUFFLE_PASS_APP_PROXY=FALSE\nTZ=Europe/Amsterdam \t\t\t\t\t# Timezone-handler in Orborus, Worker and Apps\nORBORUS_CONTAINER_NAME=\t\t\t\t# Used to FIND the containername. cgroup v2: issue 501\n\nSHUFFLE_BASE_IMAGE_NAME=shuffle\nSHUFFLE_BASE_IMAGE_REGISTRY=ghcr.io\nSHUFFLE_BASE_IMAGE_TAG_SUFFIX="-1.1.0"\n\n# Used for auto-cleanup of containers. REALLY important at scale.\nSHUFFLE_CONTAINER_AUTO_CLEANUP=true\nSHUFFLE_ELASTIC=true\nSHUFFLE_LOGS_DISABLED=false\n\n# Cleans up any containers related to Shuffle that have been up for more than 600 seconds.\nSHUFFLE_ORBORUS_EXECUTION_TIMEOUT=500\n\n# Decides the max amount of workflows to concurrenly run. Defaults to 10.\n# Example math: 10 workflows * WITH 10 apps / second = 110 containers per second.\n# We recommend starting with 10 and going higher as need be.\nSHUFFLE_ORBORUS_EXECUTION_CONCURRENCY=30\n\n# DATABASE CONFIGURATIONS\nDATASTORE_EMULATOR_HOST=shuffle-database:8000\n#SHUFFLE_OPENSEARCH_URL=http://shuffle-opensearch:9200\nSHUFFLE_OPENSEARCH_URL=https://shuffle-opensearch:9200\nSHUFFLE_OPENSEARCH_USERNAME=admin\nSHUFFLE_OPENSEARCH_PASSWORD=admin\nSHUFFLE_OPENSEARCH_CERTIFICATE_FILE=\nSHUFFLE_OPENSEARCH_APIKEY=\nSHUFFLE_OPENSEARCH_CLOUDID=\nSHUFFLE_OPENSEARCH_PROXY=\nSHUFFLE_OPENSEARCH_INDEX_PREFIX=\nSHUFFLE_OPENSEARCH_SKIPSSL_VERIFY=true\n\n'})}),"\n",(0,t.jsx)(n.h2,{id:"issues",children:"Issues"}),"\n",(0,t.jsx)(n.h3,{id:"app-malfunctioning",children:"App malfunctioning"}),"\n",(0,t.jsxs)(n.p,{children:["When an application is not working as expected, a few actions may need to be taken. ",(0,t.jsx)(n.em,{children:"(incomplete listing)"})]}),"\n",(0,t.jsx)(n.h4,{id:"delete-the-docker-image",children:"Delete the docker image"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker image ls\ndocker rmi frikky/shuffle:exampleapp_1.0.1\n"})})]})}function S(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>E});var t=s(6540);const r={},o=t.createContext(r);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function E(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4386],{7957:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>_,contentTitle:()=>a,default:()=>S,frontMatter:()=>o,metadata:()=>E,toc:()=>l});var t=s(4848),r=s(8453);const o={},a="Shuffle",E={id:"Shuffle",title:"Shuffle",description:"Resources",source:"@site/docs/Shuffle.mdx",sourceDirName:".",slug:"/Shuffle",permalink:"/docs/Shuffle",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Resources",permalink:"/docs/Security Operations/secops-resources"},next:{title:"Cortex Neurons",permalink:"/docs/TheHive/cortex-neurons"}},_={},l=[{value:"Resources",id:"resources",level:2},{value:"Scripts",id:"scripts",level:2},{value:"Updating Shuffle",id:"updating-shuffle",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Frontend / Backend / DB / "Manager"",id:"frontend--backend--db--manager",level:3},{value:"Worker / Orborus",id:"worker--orborus",level:3},{value:"Issues",id:"issues",level:2},{value:"App malfunctioning",id:"app-malfunctioning",level:3},{value:"Delete the docker image",id:"delete-the-docker-image",level:4}];function i(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"shuffle",children:"Shuffle"}),"\n",(0,t.jsx)(n.h2,{id:"resources",children:"Resources"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"https://shuffler.io/docs/configuration",children:"Shuffle documentation"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"scripts",children:"Scripts"}),"\n",(0,t.jsx)(n.h3,{id:"updating-shuffle",children:"Updating Shuffle"}),"\n",(0,t.jsx)(n.p,{children:"Valid for both Manager & Worker servers."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="shuffle-update.sh"',children:"cd /opt/Shuffle\ndocker-compose down\ngit pull\ndocker-compose pull\ndocker-compose up -d --remove-orphans\ndocker pull frikky/shuffle:app_sdk\ndocker pull ghcr.io/shuffle/shuffle-worker:latest\n"})}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.h3,{id:"frontend--backend--db--manager",children:'Frontend / Backend / DB / "Manager"'}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="Shuffle/docker-compose.yml"',children:'version: \'3\'\nservices:\n frontend:\n #build: ./frontend\n image: ghcr.io/shuffle/shuffle-frontend:latest\n container_name: shuffle-frontend\n hostname: shuffle-frontend\n ports:\n - "${FRONTEND_PORT}:80"\n - "${FRONTEND_PORT_HTTPS}:443"\n networks:\n - shuffle\n environment:\n - BACKEND_HOSTNAME=${BACKEND_HOSTNAME}\n restart: unless-stopped\n depends_on:\n - backend\n backend:\n #build: ./backend\n image: ghcr.io/shuffle/shuffle-backend:latest\n container_name: shuffle-backend\n hostname: ${BACKEND_HOSTNAME}\n # Here for debugging:\n ports:\n - "${BACKEND_PORT}:5001"\n networks:\n - shuffle\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n - ${SHUFFLE_APP_HOTLOAD_LOCATION}:/shuffle-apps\n - ${SHUFFLE_FILE_LOCATION}:/shuffle-files\n #- ${SHUFFLE_OPENSEARCH_CERTIFICATE_FILE}:/shuffle-files/es_certificate\n env_file: .env\n environment:\n - SHUFFLE_APP_HOTLOAD_FOLDER=/shuffle-apps\n - SHUFFLE_FILE_LOCATION=/shuffle-files\n restart: unless-stopped\n depends_on:\n - opensearch #Not necessary because dependancy is handled within the backend itself instead\n #- database\n opensearch:\n image: opensearchproject/opensearch:2\n hostname: shuffle-opensearch\n container_name: shuffle-opensearch\n environment:\n - bootstrap.memory_lock=true\n - "OPENSEARCH_JAVA_OPTS=-Xms4096m -Xmx4096m" # minimum and maximum Java heap size, recommend setting both to 50% of system RAM\n - cluster.routing.allocation.disk.threshold_enabled=false\n - cluster.name=shuffle-cluster\n - node.name=shuffle-opensearch\n - discovery.seed_hosts=shuffle-opensearch\n - cluster.initial_master_nodes=shuffle-opensearch\n - node.store.allow_mmap=false\n ulimits:\n memlock:\n soft: -1\n hard: -1\n nofile:\n soft: 65536 \n hard: 65536\n volumes:\n - ${DB_LOCATION}:/usr/share/opensearch/data:rw\n ports:\n - 9200:9200\n networks:\n - shuffle\n restart: unless-stopped\nnetworks:\n shuffle:\n driver: bridge\n #driver: overlay \n'})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="Shuffle/.env"',children:'# Default execution environment for workers\nORG_ID=Shuffle\nENVIRONMENT_NAME=Shuffle\n\n\n# Remote github config for first load\nSHUFFLE_DOWNLOAD_WORKFLOW_LOCATION=\nSHUFFLE_DOWNLOAD_WORKFLOW_USERNAME=\nSHUFFLE_DOWNLOAD_WORKFLOW_PASSWORD=\nSHUFFLE_DOWNLOAD_WORKFLOW_BRANCH=\n\nSHUFFLE_APP_DOWNLOAD_LOCATION=https://github.com/nusantara-self/Shuffle-apps\nSHUFFLE_DOWNLOAD_AUTH_USERNAME=\nSHUFFLE_DOWNLOAD_AUTH_PASSWORD=\nSHUFFLE_DOWNLOAD_AUTH_BRANCH=\nSHUFFLE_APP_FORCE_UPDATE=false\nSSO_REDIRECT_URL=https://your-shuffle-domain-name.com\n\n\n# User config for first load. Username & PW: min length 3\nSHUFFLE_DEFAULT_USERNAME=\nSHUFFLE_DEFAULT_PASSWORD=\nSHUFFLE_DEFAULT_APIKEY=\n\n# Local location of your app directory. Can\'t use ~/\n# Files will get better at some point. Right now: local saving.\nSHUFFLE_APP_HOTLOAD_FOLDER=./shuffle-apps\nSHUFFLE_APP_HOTLOAD_LOCATION=./shuffle-apps\nSHUFFLE_FILE_LOCATION=./shuffle-files\n\n# Encryption modifier. This HAS to be set to encrypt any authentication being used in Shuffle. This is put together with other relevant values to ensure multiple parts are needed to decrypt. \n# If this key is lost or changed, you will have to reauthenticate all apps.\nSHUFFLE_ENCRYPTION_MODIFIER=\n\n# Other configs\nBASE_URL=http://shuffle-backend:5001 \nBACKEND_HOSTNAME=shuffle-backend\nBACKEND_PORT=5001\nFRONTEND_PORT=3001\nFRONTEND_PORT_HTTPS=3443\n\n# CHANGE THIS IF YOU WANT GOOD LOCAL EXECUTIONS:\nOUTER_HOSTNAME=shuffle-backend\nDB_LOCATION=./shuffle-database\nDOCKER_API_VERSION=1.40\n\n# Proxy configurations. SHUFFLE_PASS_WORKER_PROXY must be FALSE to not pass the proxy information to sub-apps.\n# PS: It will skip proxy for \nHTTP_PROXY=\nHTTPS_PROXY=\nSHUFFLE_PASS_WORKER_PROXY=TRUE\nSHUFFLE_PASS_APP_PROXY=FALSE\nTZ=Europe/Amsterdam \t\t\t\t\t# Timezone-handler in Orborus, Worker and Apps\nORBORUS_CONTAINER_NAME=\t\t\t\t# Used to FIND the containername. cgroup v2: issue 501\n\nSHUFFLE_BASE_IMAGE_NAME=shuffle\nSHUFFLE_BASE_IMAGE_REGISTRY=ghcr.io\nSHUFFLE_BASE_IMAGE_TAG_SUFFIX="-1.1.0"\n\n# Used for auto-cleanup of containers. REALLY important at scale.\nSHUFFLE_CONTAINER_AUTO_CLEANUP=true\nSHUFFLE_ELASTIC=true\nSHUFFLE_LOGS_DISABLED=false\nSHUFFLE_CHAT_DISABLED=false\nSHUFFLE_RERUN_SCHEDULE=300\n\n# DATABASE CONFIGURATIONS\nDATASTORE_EMULATOR_HOST=shuffle-database:8000\n#SHUFFLE_OPENSEARCH_URL=http://shuffle-opensearch:9200\nSHUFFLE_OPENSEARCH_URL=https://shuffle-opensearch:9200\nSHUFFLE_OPENSEARCH_USERNAME=admin\nSHUFFLE_OPENSEARCH_PASSWORD=admin\nSHUFFLE_OPENSEARCH_CERTIFICATE_FILE=\nSHUFFLE_OPENSEARCH_APIKEY=\nSHUFFLE_OPENSEARCH_CLOUDID=\nSHUFFLE_OPENSEARCH_PROXY=\nSHUFFLE_OPENSEARCH_INDEX_PREFIX=\nSHUFFLE_OPENSEARCH_SKIPSSL_VERIFY=true\n\n'})}),"\n",(0,t.jsx)(n.h3,{id:"worker--orborus",children:"Worker / Orborus"}),"\n",(0,t.jsx)(n.p,{children:"On a separate server"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",metastring:'title="Shuffle/docker-compose.yml"',children:"version: '3'\nservices:\n orborus:\n #build: ./functions/onprem/orborus\n image: ghcr.io/shuffle/shuffle-orborus:latest\n container_name: shuffle-orborus\n hostname: shuffle-orborus\n networks:\n - shuffle\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock\n environment:\n - SHUFFLE_WORKER_VERSION=latest\n - SHUFFLE_APP_SDK_VERSION=latest\n - ORG_ID=${ENVIRONMENT_NAME}\n - ENVIRONMENT_NAME=${ENVIRONMENT_NAME}\n - BASE_URL=http://MANAGER-IP:5001\n - DOCKER_API_VERSION=1.40\n - SHUFFLE_BASE_IMAGE_NAME=${SHUFFLE_BASE_IMAGE_NAME}\n - SHUFFLE_BASE_IMAGE_REGISTRY=${SHUFFLE_BASE_IMAGE_REGISTRY}\n - SHUFFLE_BASE_IMAGE_TAG_SUFFIX=${SHUFFLE_BASE_IMAGE_TAG_SUFFIX}\n - HTTP_PROXY=${HTTP_PROXY}\n - HTTPS_PROXY=${HTTPS_PROXY}\n - SHUFFLE_PASS_WORKER_PROXY=${SHUFFLE_PASS_WORKER_PROXY}\n - SHUFFLE_PASS_APP_PROXY=${SHUFFLE_PASS_APP_PROXY}\n - SHUFFLE_ORBORUS_EXECUTION_TIMEOUT=550\n - SHUFFLE_ORBORUS_EXECUTION_CONCURRENCY=25\n - CLEANUP=true\n restart: unless-stopped\nnetworks:\n shuffle:\n driver: bridge\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",metastring:'title="Example of Shuffle/.env"',children:'# Default execution environment for workers\nORG_ID=Shuffle\nENVIRONMENT_NAME=OrborusPROD\n\n\n# Remote github config for first load\nSHUFFLE_DOWNLOAD_WORKFLOW_LOCATION=\nSHUFFLE_DOWNLOAD_WORKFLOW_USERNAME=\nSHUFFLE_DOWNLOAD_WORKFLOW_PASSWORD=\nSHUFFLE_DOWNLOAD_WORKFLOW_BRANCH=\n\nSHUFFLE_APP_DOWNLOAD_LOCATION=https://github.com/shuffle/python-apps\nSHUFFLE_DOWNLOAD_AUTH_USERNAME=\nSHUFFLE_DOWNLOAD_AUTH_PASSWORD=\nSHUFFLE_DOWNLOAD_AUTH_BRANCH=\nSHUFFLE_APP_FORCE_UPDATE=false\n\n# User config for first load. Username & PW: min length 3\nSHUFFLE_DEFAULT_USERNAME=\nSHUFFLE_DEFAULT_PASSWORD=\nSHUFFLE_DEFAULT_APIKEY=\n\n# Local location of your app directory. Can\'t use ~/\n# Files will get better at some point. Right now: local saving.\nSHUFFLE_APP_HOTLOAD_FOLDER=./shuffle-apps\nSHUFFLE_APP_HOTLOAD_LOCATION=./shuffle-apps\nSHUFFLE_FILE_LOCATION=./shuffle-files\n\n# Encryption modifier. This HAS to be set to encrypt any authentication being used in Shuffle. This is put together with other relevant values to ensure multiple parts are needed to decrypt. \n# If this key is lost or changed, you will have to reauthenticate all apps.\nSHUFFLE_ENCRYPTION_MODIFIER=\n\n# Other configs\nBASE_URL=http://shuffle-backend:5001 \nBACKEND_HOSTNAME=shuffle-backend\nBACKEND_PORT=5001\nFRONTEND_PORT=3001\nFRONTEND_PORT_HTTPS=3443\n\n# CHANGE THIS IF YOU WANT GOOD LOCAL EXECUTIONS:\nOUTER_HOSTNAME=shuffle-backend\nDB_LOCATION=./shuffle-database\nDOCKER_API_VERSION=1.40\n\n# Proxy configurations. SHUFFLE_PASS_WORKER_PROXY must be FALSE to not pass the proxy information to sub-apps.\n# PS: It will skip proxy for \nHTTP_PROXY=\nHTTPS_PROXY=\nSHUFFLE_PASS_WORKER_PROXY=TRUE\nSHUFFLE_PASS_APP_PROXY=FALSE\nTZ=Europe/Amsterdam \t\t\t\t\t# Timezone-handler in Orborus, Worker and Apps\nORBORUS_CONTAINER_NAME=\t\t\t\t# Used to FIND the containername. cgroup v2: issue 501\n\nSHUFFLE_BASE_IMAGE_NAME=shuffle\nSHUFFLE_BASE_IMAGE_REGISTRY=ghcr.io\nSHUFFLE_BASE_IMAGE_TAG_SUFFIX="-1.1.0"\n\n# Used for auto-cleanup of containers. REALLY important at scale.\nSHUFFLE_CONTAINER_AUTO_CLEANUP=true\nSHUFFLE_ELASTIC=true\nSHUFFLE_LOGS_DISABLED=false\n\n# Cleans up any containers related to Shuffle that have been up for more than 600 seconds.\nSHUFFLE_ORBORUS_EXECUTION_TIMEOUT=500\n\n# Decides the max amount of workflows to concurrenly run. Defaults to 10.\n# Example math: 10 workflows * WITH 10 apps / second = 110 containers per second.\n# We recommend starting with 10 and going higher as need be.\nSHUFFLE_ORBORUS_EXECUTION_CONCURRENCY=30\n\n# DATABASE CONFIGURATIONS\nDATASTORE_EMULATOR_HOST=shuffle-database:8000\n#SHUFFLE_OPENSEARCH_URL=http://shuffle-opensearch:9200\nSHUFFLE_OPENSEARCH_URL=https://shuffle-opensearch:9200\nSHUFFLE_OPENSEARCH_USERNAME=admin\nSHUFFLE_OPENSEARCH_PASSWORD=admin\nSHUFFLE_OPENSEARCH_CERTIFICATE_FILE=\nSHUFFLE_OPENSEARCH_APIKEY=\nSHUFFLE_OPENSEARCH_CLOUDID=\nSHUFFLE_OPENSEARCH_PROXY=\nSHUFFLE_OPENSEARCH_INDEX_PREFIX=\nSHUFFLE_OPENSEARCH_SKIPSSL_VERIFY=true\n\n'})}),"\n",(0,t.jsx)(n.h2,{id:"issues",children:"Issues"}),"\n",(0,t.jsx)(n.h3,{id:"app-malfunctioning",children:"App malfunctioning"}),"\n",(0,t.jsxs)(n.p,{children:["When an application is not working as expected, a few actions may need to be taken. ",(0,t.jsx)(n.em,{children:"(incomplete listing)"})]}),"\n",(0,t.jsx)(n.h4,{id:"delete-the-docker-image",children:"Delete the docker image"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker image ls\ndocker rmi frikky/shuffle:exampleapp_1.0.1\n"})})]})}function S(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>E});var t=s(6540);const r={},o=t.createContext(r);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function E(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/7dd8714f.b72b0207.js b/assets/js/7dd8714f.677c563a.js
similarity index 99%
rename from assets/js/7dd8714f.b72b0207.js
rename to assets/js/7dd8714f.677c563a.js
index 1c88c8c..65f89c2 100644
--- a/assets/js/7dd8714f.b72b0207.js
+++ b/assets/js/7dd8714f.677c563a.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[804],{7130:(t,e,r)=>{r.r(e),r.d(e,{assets:()=>d,contentTitle:()=>n,default:()=>o,frontMatter:()=>c,metadata:()=>h,toc:()=>l});var s=r(4848),i=r(8453);const c={},n="Resources",h={id:"Security Operations/secops-resources",title:"Resources",description:"MITRE Frameworks",source:"@site/docs/Security Operations/secops-resources.md",sourceDirName:"Security Operations",slug:"/Security Operations/secops-resources",permalink:"/docs/Security Operations/secops-resources",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Hi!",permalink:"/docs/GCP/Terraform/init"},next:{title:"Shuffle",permalink:"/docs/Shuffle"}},d={},l=[{value:"MITRE Frameworks",id:"mitre-frameworks",level:2},{value:"MITRE ATT&CK-related",id:"mitre-attck-related",level:2},{value:"CTI",id:"cti",level:3},{value:"Detection / Hunting / Blue Teams",id:"detection--hunting--blue-teams",level:3},{value:"Prevention / Purple-Red Teams / Testing of Controls",id:"prevention--purple-red-teams--testing-of-controls",level:3},{value:"Unclassified",id:"unclassified",level:3}];function a(t){const e={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"resources",children:"Resources"}),"\n",(0,s.jsx)(e.h2,{id:"mitre-frameworks",children:"MITRE Frameworks"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://attack.mitre.org/",children:"MITRE ATT&CK"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://d3fend.mitre.org/",children:"MITRE D3FEND"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://engage.mitre.org",children:"MITRE ENGAGE"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://atlas.mitre.org/",children:"MITRE ATLAS"})}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"mitre-attck-related",children:"MITRE ATT&CK-related"}),"\n",(0,s.jsx)(e.h3,{id:"cti",children:"CTI"}),"\n",(0,s.jsxs)(e.table,{children:[(0,s.jsx)(e.thead,{children:(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.th,{children:"Name"}),(0,s.jsx)(e.th,{children:"Link"}),(0,s.jsx)(e.th,{children:"Owner"})]})}),(0,s.jsxs)(e.tbody,{children:[(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Navigator"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://mitre.github.io/attack-navigator/enterprise/",children:"https://mitre.github.io/attack-navigator/enterprise/"})}),(0,s.jsx)(e.td,{children:"MITRE"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"CAR"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://car.mitre.org/wiki/Main_Page",children:"https://car.mitre.org/wiki/Main_Page"})}),(0,s.jsx)(e.td,{children:"MITRE"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"AMITT"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/misinfosecproject/amitt_framework",children:"https://github.com/misinfosecproject/amitt_framework"})}),(0,s.jsx)(e.td,{})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"MISP"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://www.misp-project.org",children:"https://www.misp-project.org"})}),(0,s.jsx)(e.td,{children:"MISP Project"})]})]})]}),"\n",(0,s.jsx)(e.h3,{id:"detection--hunting--blue-teams",children:"Detection / Hunting / Blue Teams"}),"\n",(0,s.jsxs)(e.table,{children:[(0,s.jsx)(e.thead,{children:(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.th,{children:"Name"}),(0,s.jsx)(e.th,{children:"Link"}),(0,s.jsx)(e.th,{children:"Owner"})]})}),(0,s.jsxs)(e.tbody,{children:[(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"SIGMA"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/Neo23x0/sigma",children:"https://github.com/Neo23x0/sigma"})}),(0,s.jsx)(e.td,{children:"Florian Roth / Thomas Patzke"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"SIGMA Rules"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/Neo23x0/sigma/tree/master/rules",children:"https://github.com/Neo23x0/sigma/tree/master/rules"})}),(0,s.jsx)(e.td,{children:"Florian Roth"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"OSCD Community"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://oscd.community",children:"https://oscd.community"})}),(0,s.jsx)(e.td,{})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"BZAR"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/mitre-attack/bzar",children:"https://github.com/mitre-attack/bzar"})}),(0,s.jsx)(e.td,{children:"MITRE"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"SIGMA Editor"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://tdm.socprime.com/sigma/generate/",children:"https://tdm.socprime.com/sigma/generate/"})}),(0,s.jsx)(e.td,{children:"SOCPRIME"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"UNCODER"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://uncoder.io/",children:"https://uncoder.io/"})}),(0,s.jsx)(e.td,{children:"SOCPRIME"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Threathunter Playbook"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/Cyb3rWard0g/ThreatHunter-Playbook",children:"https://github.com/Cyb3rWard0g/ThreatHunter-Playbook"})}),(0,s.jsx)(e.td,{children:"Roberto Rodriguez"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"ThreatHunting App"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/olafhartong/ThreatHunting",children:"https://github.com/olafhartong/ThreatHunting"})}),(0,s.jsx)(e.td,{children:"Olaf Hartong"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Atomic Threat Coverage"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/atc-project/atomic-threat-coverage",children:"https://github.com/atc-project/atomic-threat-coverage"})}),(0,s.jsx)(e.td,{children:"ATC Project"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"RE&CT"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://atc-project.github.io/atc-react/",children:"https://atc-project.github.io/atc-react/"})}),(0,s.jsx)(e.td,{children:"ATC Project"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"DETT&CT"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/rabobank-cdc/DeTTECT",children:"https://github.com/rabobank-cdc/DeTTECT"})}),(0,s.jsx)(e.td,{children:"Marcus Bakker / Ruben Bouwman"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"attack2jira"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/mvelazc0/attack2jira",children:"https://github.com/mvelazc0/attack2jira"})}),(0,s.jsx)(e.td,{children:"Mauricio Velazco"})]})]})]}),"\n",(0,s.jsx)(e.h3,{id:"prevention--purple-red-teams--testing-of-controls",children:"Prevention / Purple-Red Teams / Testing of Controls"}),"\n",(0,s.jsxs)(e.table,{children:[(0,s.jsx)(e.thead,{children:(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.th,{children:"Name"}),(0,s.jsx)(e.th,{children:"Link"}),(0,s.jsx)(e.th,{children:"Owner"})]})}),(0,s.jsxs)(e.tbody,{children:[(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"CALDERA"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/mitre/caldera",children:"https://github.com/mitre/caldera"})}),(0,s.jsx)(e.td,{children:"MITRE"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Atomic Red Team"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/redcanaryco/atomic-red-team",children:"https://github.com/redcanaryco/atomic-red-team"})}),(0,s.jsx)(e.td,{children:"Red Canary"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"SPLUNK ATTACK Range"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/splunk/attack_range",children:"https://github.com/splunk/attack_range"})}),(0,s.jsx)(e.td,{children:"SPLUNK"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"MORDOR"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://mordordatasets.com/introduction.html",children:"https://mordordatasets.com/introduction.html"})}),(0,s.jsx)(e.td,{children:"Roberto Rodriguez"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"PurpleSharp"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/mvelazc0/PurpleSharp",children:"https://github.com/mvelazc0/PurpleSharp"})}),(0,s.jsx)(e.td,{children:"Mauricio Velazco"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"VECTR"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/SecurityRiskAdvisors/VECTR",children:"https://github.com/SecurityRiskAdvisors/VECTR"})}),(0,s.jsx)(e.td,{children:"Security Risk Advisors"})]})]})]}),"\n",(0,s.jsx)(e.h3,{id:"unclassified",children:"Unclassified"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://github.com/infosecn1nja/awesome-mitre-attack/blob/master/README.md",children:"https://github.com/infosecn1nja/awesome-mitre-attack/blob/master/README.md"})}),"\n"]})]})}function o(t={}){const{wrapper:e}={...(0,i.R)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(a,{...t})}):a(t)}},8453:(t,e,r)=>{r.d(e,{R:()=>n,x:()=>h});var s=r(6540);const i={},c=s.createContext(i);function n(t){const e=s.useContext(c);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function h(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:n(t.components),s.createElement(c.Provider,{value:e},t.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[804],{7130:(t,e,r)=>{r.r(e),r.d(e,{assets:()=>d,contentTitle:()=>n,default:()=>o,frontMatter:()=>c,metadata:()=>h,toc:()=>l});var s=r(4848),i=r(8453);const c={},n="Resources",h={id:"Security Operations/secops-resources",title:"Resources",description:"MITRE Frameworks",source:"@site/docs/Security Operations/secops-resources.md",sourceDirName:"Security Operations",slug:"/Security Operations/secops-resources",permalink:"/docs/Security Operations/secops-resources",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Hi!",permalink:"/docs/GCP/Terraform/init"},next:{title:"Shuffle",permalink:"/docs/Shuffle"}},d={},l=[{value:"MITRE Frameworks",id:"mitre-frameworks",level:2},{value:"MITRE ATT&CK-related",id:"mitre-attck-related",level:2},{value:"CTI",id:"cti",level:3},{value:"Detection / Hunting / Blue Teams",id:"detection--hunting--blue-teams",level:3},{value:"Prevention / Purple-Red Teams / Testing of Controls",id:"prevention--purple-red-teams--testing-of-controls",level:3},{value:"Unclassified",id:"unclassified",level:3}];function a(t){const e={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"resources",children:"Resources"}),"\n",(0,s.jsx)(e.h2,{id:"mitre-frameworks",children:"MITRE Frameworks"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://attack.mitre.org/",children:"MITRE ATT&CK"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://d3fend.mitre.org/",children:"MITRE D3FEND"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://engage.mitre.org",children:"MITRE ENGAGE"})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://atlas.mitre.org/",children:"MITRE ATLAS"})}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"mitre-attck-related",children:"MITRE ATT&CK-related"}),"\n",(0,s.jsx)(e.h3,{id:"cti",children:"CTI"}),"\n",(0,s.jsxs)(e.table,{children:[(0,s.jsx)(e.thead,{children:(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.th,{children:"Name"}),(0,s.jsx)(e.th,{children:"Link"}),(0,s.jsx)(e.th,{children:"Owner"})]})}),(0,s.jsxs)(e.tbody,{children:[(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Navigator"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://mitre.github.io/attack-navigator/enterprise/",children:"https://mitre.github.io/attack-navigator/enterprise/"})}),(0,s.jsx)(e.td,{children:"MITRE"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"CAR"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://car.mitre.org/wiki/Main_Page",children:"https://car.mitre.org/wiki/Main_Page"})}),(0,s.jsx)(e.td,{children:"MITRE"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"AMITT"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/misinfosecproject/amitt_framework",children:"https://github.com/misinfosecproject/amitt_framework"})}),(0,s.jsx)(e.td,{})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"MISP"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://www.misp-project.org",children:"https://www.misp-project.org"})}),(0,s.jsx)(e.td,{children:"MISP Project"})]})]})]}),"\n",(0,s.jsx)(e.h3,{id:"detection--hunting--blue-teams",children:"Detection / Hunting / Blue Teams"}),"\n",(0,s.jsxs)(e.table,{children:[(0,s.jsx)(e.thead,{children:(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.th,{children:"Name"}),(0,s.jsx)(e.th,{children:"Link"}),(0,s.jsx)(e.th,{children:"Owner"})]})}),(0,s.jsxs)(e.tbody,{children:[(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"SIGMA"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/Neo23x0/sigma",children:"https://github.com/Neo23x0/sigma"})}),(0,s.jsx)(e.td,{children:"Florian Roth / Thomas Patzke"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"SIGMA Rules"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/Neo23x0/sigma/tree/master/rules",children:"https://github.com/Neo23x0/sigma/tree/master/rules"})}),(0,s.jsx)(e.td,{children:"Florian Roth"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"OSCD Community"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://oscd.community",children:"https://oscd.community"})}),(0,s.jsx)(e.td,{})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"BZAR"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/mitre-attack/bzar",children:"https://github.com/mitre-attack/bzar"})}),(0,s.jsx)(e.td,{children:"MITRE"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"SIGMA Editor"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://tdm.socprime.com/sigma/generate/",children:"https://tdm.socprime.com/sigma/generate/"})}),(0,s.jsx)(e.td,{children:"SOCPRIME"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"UNCODER"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://uncoder.io/",children:"https://uncoder.io/"})}),(0,s.jsx)(e.td,{children:"SOCPRIME"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Threathunter Playbook"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/Cyb3rWard0g/ThreatHunter-Playbook",children:"https://github.com/Cyb3rWard0g/ThreatHunter-Playbook"})}),(0,s.jsx)(e.td,{children:"Roberto Rodriguez"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"ThreatHunting App"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/olafhartong/ThreatHunting",children:"https://github.com/olafhartong/ThreatHunting"})}),(0,s.jsx)(e.td,{children:"Olaf Hartong"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Atomic Threat Coverage"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/atc-project/atomic-threat-coverage",children:"https://github.com/atc-project/atomic-threat-coverage"})}),(0,s.jsx)(e.td,{children:"ATC Project"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"RE&CT"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://atc-project.github.io/atc-react/",children:"https://atc-project.github.io/atc-react/"})}),(0,s.jsx)(e.td,{children:"ATC Project"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"DETT&CT"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/rabobank-cdc/DeTTECT",children:"https://github.com/rabobank-cdc/DeTTECT"})}),(0,s.jsx)(e.td,{children:"Marcus Bakker / Ruben Bouwman"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"attack2jira"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/mvelazc0/attack2jira",children:"https://github.com/mvelazc0/attack2jira"})}),(0,s.jsx)(e.td,{children:"Mauricio Velazco"})]})]})]}),"\n",(0,s.jsx)(e.h3,{id:"prevention--purple-red-teams--testing-of-controls",children:"Prevention / Purple-Red Teams / Testing of Controls"}),"\n",(0,s.jsxs)(e.table,{children:[(0,s.jsx)(e.thead,{children:(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.th,{children:"Name"}),(0,s.jsx)(e.th,{children:"Link"}),(0,s.jsx)(e.th,{children:"Owner"})]})}),(0,s.jsxs)(e.tbody,{children:[(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"CALDERA"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/mitre/caldera",children:"https://github.com/mitre/caldera"})}),(0,s.jsx)(e.td,{children:"MITRE"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"Atomic Red Team"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/redcanaryco/atomic-red-team",children:"https://github.com/redcanaryco/atomic-red-team"})}),(0,s.jsx)(e.td,{children:"Red Canary"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"SPLUNK ATTACK Range"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/splunk/attack_range",children:"https://github.com/splunk/attack_range"})}),(0,s.jsx)(e.td,{children:"SPLUNK"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"MORDOR"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://mordordatasets.com/introduction.html",children:"https://mordordatasets.com/introduction.html"})}),(0,s.jsx)(e.td,{children:"Roberto Rodriguez"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"PurpleSharp"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/mvelazc0/PurpleSharp",children:"https://github.com/mvelazc0/PurpleSharp"})}),(0,s.jsx)(e.td,{children:"Mauricio Velazco"})]}),(0,s.jsxs)(e.tr,{children:[(0,s.jsx)(e.td,{children:"VECTR"}),(0,s.jsx)(e.td,{children:(0,s.jsx)(e.a,{href:"https://github.com/SecurityRiskAdvisors/VECTR",children:"https://github.com/SecurityRiskAdvisors/VECTR"})}),(0,s.jsx)(e.td,{children:"Security Risk Advisors"})]})]})]}),"\n",(0,s.jsx)(e.h3,{id:"unclassified",children:"Unclassified"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://github.com/infosecn1nja/awesome-mitre-attack/blob/master/README.md",children:"https://github.com/infosecn1nja/awesome-mitre-attack/blob/master/README.md"})}),"\n"]})]})}function o(t={}){const{wrapper:e}={...(0,i.R)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(a,{...t})}):a(t)}},8453:(t,e,r)=>{r.d(e,{R:()=>n,x:()=>h});var s=r(6540);const i={},c=s.createContext(i);function n(t){const e=s.useContext(c);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function h(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:n(t.components),s.createElement(c.Provider,{value:e},t.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8037d0b1.bf46eca4.js b/assets/js/8037d0b1.e5531434.js
similarity index 99%
rename from assets/js/8037d0b1.bf46eca4.js
rename to assets/js/8037d0b1.e5531434.js
index 9178030..deda180 100644
--- a/assets/js/8037d0b1.bf46eca4.js
+++ b/assets/js/8037d0b1.e5531434.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[1218],{9832:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var n=r(4848),a=r(8453),o=r(1470),l=r(9365);const s={},u="Port-forwarding to localhost",i={id:"GCP/Identity-Aware Proxy/port-forwarding",title:"Port-forwarding to localhost",description:"Install the gcloud CLI",source:"@site/docs/GCP/Identity-Aware Proxy/port-forwarding.md",sourceDirName:"GCP/Identity-Aware Proxy",slug:"/GCP/Identity-Aware Proxy/port-forwarding",permalink:"/docs/GCP/Identity-Aware Proxy/port-forwarding",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Infrastructure as Code",permalink:"/docs/Engineering/IaC"},next:{title:"Remote SSH an IAP-secured server using a terminal or VSCode",permalink:"/docs/GCP/Identity-Aware Proxy/remote-ssh-iap"}},c={},d=[{value:"Install the gcloud CLI",id:"install-the-gcloud-cli",level:2},{value:"Authentication with the CLI",id:"gcloud-auth",level:2},{value:"Port-forwarding your application port to your localhost",id:"port-forwarding-your-application-port-to-your-localhost",level:2}];function h(e){const t={a:"a",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"port-forwarding-to-localhost",children:"Port-forwarding to localhost"}),"\n","\n","\n",(0,n.jsx)(t.h2,{id:"install-the-gcloud-cli",children:"Install the gcloud CLI"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://cloud.google.com/sdk/docs/install#linux",children:"Official documentation"})}),"\n",(0,n.jsx)(t.h2,{id:"gcloud-auth",children:"Authentication with the CLI"}),"\n",(0,n.jsxs)(t.p,{children:["Before each session you may launch, make sure to be ",(0,n.jsx)(t.strong,{children:"authenticated with your gcloud account"})," within the CLI"]}),"\n",(0,n.jsxs)(o.A,{groupId:"operating-systems",children:[(0,n.jsx)(l.A,{value:"Linux/mac",label:"Standard",children:(0,n.jsx)("pre",{children:"gcloud auth login"})}),(0,n.jsx)(l.A,{value:"WSL",label:"WSL",children:(0,n.jsx)("pre",{children:"gcloud auth login --no-launch-browser"})})]}),"\n",(0,n.jsx)(t.h2,{id:"port-forwarding-your-application-port-to-your-localhost",children:"Port-forwarding your application port to your localhost"}),"\n",(0,n.jsx)(t.p,{children:"If for instance, I am testing the great vectr purple team's app on a cloud-based instance. The frontend will be by default running on localhost:8501. As a result, I'll able to redirect such traffic to my local machine thanks to this command."}),"\n",(0,n.jsx)("pre",{children:"gcloud compute start-iap-tunnel vectr-test-instance 8501 --local-host-port=localhost:8501"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://cloud.google.com/solutions/connecting-securely#:~:text=or%20SOCKS%20proxy.-,Port%20forwarding%20over%20SSH,host%20over%20an%20SSH%20connection.&text=LOCAL_PORT%20%3Alocalhost%3A%20REMOTE_PORT-,Replace%20the%20following%3A,your%20Google%20Cloud%20project%20ID.",children:"Official documentation"})})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},9365:(e,t,r)=>{r.d(t,{A:()=>l});r(6540);var n=r(8215);const a={tabItem:"tabItem_Ymn6"};var o=r(4848);function l(e){let{children:t,hidden:r,className:l}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.A)(a.tabItem,l),hidden:r,children:t})}},1470:(e,t,r)=>{r.d(t,{A:()=>I});var n=r(6540),a=r(8215),o=r(3104),l=r(6347),s=r(205),u=r(7485),i=r(1682),c=r(9466);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.X)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:r}=e;const a=(0,l.W6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,u.aZ)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=h(e),[l,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=f({queryString:r,groupId:a}),[m,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Dv)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),g=(()=>{const e=i??m;return p({value:e,tabValues:o})?e:null})();(0,s.A)((()=>{g&&u(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=r(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=r(4848);function y(e){let{className:t,block:r,selectedValue:n,selectValue:l,tabValues:s}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.a_)(),c=e=>{const t=e.currentTarget,r=u.indexOf(t),a=s[r].value;a!==n&&(i(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=u.indexOf(e.currentTarget)+1;t=u[r]??u[0];break}case"ArrowLeft":{const r=u.indexOf(e.currentTarget)-1;t=u[r]??u[u.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":r},t),children:s.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.A)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function w(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function x(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,a.A)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function I(e){const t=(0,b.A)();return(0,v.jsx)(x,{...e,children:d(e.children)},String(t))}},8453:(e,t,r)=>{r.d(t,{R:()=>l,x:()=>s});var n=r(6540);const a={},o=n.createContext(a);function l(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[1218],{9832:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>u,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var n=r(4848),a=r(8453),o=r(1470),l=r(9365);const s={},u="Port-forwarding to localhost",i={id:"GCP/Identity-Aware Proxy/port-forwarding",title:"Port-forwarding to localhost",description:"Install the gcloud CLI",source:"@site/docs/GCP/Identity-Aware Proxy/port-forwarding.md",sourceDirName:"GCP/Identity-Aware Proxy",slug:"/GCP/Identity-Aware Proxy/port-forwarding",permalink:"/docs/GCP/Identity-Aware Proxy/port-forwarding",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Infrastructure as Code",permalink:"/docs/Engineering/IaC"},next:{title:"Remote SSH an IAP-secured server using a terminal or VSCode",permalink:"/docs/GCP/Identity-Aware Proxy/remote-ssh-iap"}},c={},d=[{value:"Install the gcloud CLI",id:"install-the-gcloud-cli",level:2},{value:"Authentication with the CLI",id:"gcloud-auth",level:2},{value:"Port-forwarding your application port to your localhost",id:"port-forwarding-your-application-port-to-your-localhost",level:2}];function h(e){const t={a:"a",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"port-forwarding-to-localhost",children:"Port-forwarding to localhost"}),"\n","\n","\n",(0,n.jsx)(t.h2,{id:"install-the-gcloud-cli",children:"Install the gcloud CLI"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://cloud.google.com/sdk/docs/install#linux",children:"Official documentation"})}),"\n",(0,n.jsx)(t.h2,{id:"gcloud-auth",children:"Authentication with the CLI"}),"\n",(0,n.jsxs)(t.p,{children:["Before each session you may launch, make sure to be ",(0,n.jsx)(t.strong,{children:"authenticated with your gcloud account"})," within the CLI"]}),"\n",(0,n.jsxs)(o.A,{groupId:"operating-systems",children:[(0,n.jsx)(l.A,{value:"Linux/mac",label:"Standard",children:(0,n.jsx)("pre",{children:"gcloud auth login"})}),(0,n.jsx)(l.A,{value:"WSL",label:"WSL",children:(0,n.jsx)("pre",{children:"gcloud auth login --no-launch-browser"})})]}),"\n",(0,n.jsx)(t.h2,{id:"port-forwarding-your-application-port-to-your-localhost",children:"Port-forwarding your application port to your localhost"}),"\n",(0,n.jsx)(t.p,{children:"If for instance, I am testing the great vectr purple team's app on a cloud-based instance. The frontend will be by default running on localhost:8501. As a result, I'll able to redirect such traffic to my local machine thanks to this command."}),"\n",(0,n.jsx)("pre",{children:"gcloud compute start-iap-tunnel vectr-test-instance 8501 --local-host-port=localhost:8501"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://cloud.google.com/solutions/connecting-securely#:~:text=or%20SOCKS%20proxy.-,Port%20forwarding%20over%20SSH,host%20over%20an%20SSH%20connection.&text=LOCAL_PORT%20%3Alocalhost%3A%20REMOTE_PORT-,Replace%20the%20following%3A,your%20Google%20Cloud%20project%20ID.",children:"Official documentation"})})]})}function p(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},9365:(e,t,r)=>{r.d(t,{A:()=>l});r(6540);var n=r(8215);const a={tabItem:"tabItem_Ymn6"};var o=r(4848);function l(e){let{children:t,hidden:r,className:l}=e;return(0,o.jsx)("div",{role:"tabpanel",className:(0,n.A)(a.tabItem,l),hidden:r,children:t})}},1470:(e,t,r)=>{r.d(t,{A:()=>I});var n=r(6540),a=r(8215),o=r(3104),l=r(6347),s=r(205),u=r(7485),i=r(1682),c=r(9466);function d(e){return n.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:t,children:r}=e;return(0,n.useMemo)((()=>{const e=t??function(e){return d(e).map((e=>{let{props:{value:t,label:r,attributes:n,default:a}}=e;return{value:t,label:r,attributes:n,default:a}}))}(r);return function(e){const t=(0,i.X)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,r])}function p(e){let{value:t,tabValues:r}=e;return r.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:r}=e;const a=(0,l.W6)(),o=function(e){let{queryString:t=!1,groupId:r}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!r)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return r??null}({queryString:t,groupId:r});return[(0,u.aZ)(o),(0,n.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function m(e){const{defaultValue:t,queryString:r=!1,groupId:a}=e,o=h(e),[l,u]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:r}=e;if(0===r.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!p({value:t,tabValues:r}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${r.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=r.find((e=>e.default))??r[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[i,d]=f({queryString:r,groupId:a}),[m,b]=function(e){let{groupId:t}=e;const r=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,c.Dv)(r);return[a,(0,n.useCallback)((e=>{r&&o.set(e)}),[r,o])]}({groupId:a}),g=(()=>{const e=i??m;return p({value:e,tabValues:o})?e:null})();(0,s.A)((()=>{g&&u(g)}),[g]);return{selectedValue:l,selectValue:(0,n.useCallback)((e=>{if(!p({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);u(e),d(e),b(e)}),[d,b,o]),tabValues:o}}var b=r(2303);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var v=r(4848);function y(e){let{className:t,block:r,selectedValue:n,selectValue:l,tabValues:s}=e;const u=[],{blockElementScrollPositionUntilNextRender:i}=(0,o.a_)(),c=e=>{const t=e.currentTarget,r=u.indexOf(t),a=s[r].value;a!==n&&(i(t),l(a))},d=e=>{let t=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const r=u.indexOf(e.currentTarget)+1;t=u[r]??u[0];break}case"ArrowLeft":{const r=u.indexOf(e.currentTarget)-1;t=u[r]??u[u.length-1];break}}t?.focus()};return(0,v.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.A)("tabs",{"tabs--block":r},t),children:s.map((e=>{let{value:t,label:r,attributes:o}=e;return(0,v.jsx)("li",{role:"tab",tabIndex:n===t?0:-1,"aria-selected":n===t,ref:e=>u.push(e),onKeyDown:d,onClick:c,...o,className:(0,a.A)("tabs__item",g.tabItem,o?.className,{"tabs__item--active":n===t}),children:r??t},t)}))})}function w(e){let{lazy:t,children:r,selectedValue:a}=e;const o=(Array.isArray(r)?r:[r]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return(0,v.jsx)("div",{className:"margin-top--md",children:o.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==a})))})}function x(e){const t=m(e);return(0,v.jsxs)("div",{className:(0,a.A)("tabs-container",g.tabList),children:[(0,v.jsx)(y,{...e,...t}),(0,v.jsx)(w,{...e,...t})]})}function I(e){const t=(0,b.A)();return(0,v.jsx)(x,{...e,children:d(e.children)},String(t))}},8453:(e,t,r)=>{r.d(t,{R:()=>l,x:()=>s});var n=r(6540);const a={},o=n.createContext(a);function l(e){const t=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:l(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/961cf1dd.4a1923e8.js b/assets/js/961cf1dd.4a1923e8.js
deleted file mode 100644
index 9fcacef..0000000
--- a/assets/js/961cf1dd.4a1923e8.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[2805],{610:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var o=t(4848),r=t(8453);const s={},i="Cortex Neurons",c={id:"TheHive/cortex-neurons",title:"Cortex Neurons",description:"Introduction",source:"@site/docs/TheHive/cortex-neurons.md",sourceDirName:"TheHive",slug:"/TheHive/cortex-neurons",permalink:"/docs/TheHive/cortex-neurons",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Shuffle",permalink:"/docs/Shuffle"},next:{title:"Resources",permalink:"/docs/TheHive/thehive-resources"}},l={},a=[{value:"Introduction",id:"introduction",level:2},{value:"Build & Test cortex-neurons",id:"build--test-cortex-neurons",level:2},{value:"Build my Cortex Neuron locally from Dockerfile",id:"build-my-cortex-neuron-locally-from-dockerfile",level:3},{value:"Test the local neuron",id:"test-the-local-neuron",level:3},{value:"Test remote existing cortex-neurons (on MacOS)",id:"test-remote-existing-cortex-neurons-on-macos",level:2}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"cortex-neurons",children:"Cortex Neurons"}),"\n",(0,o.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,o.jsxs)(n.p,{children:["As stated in the ",(0,o.jsx)(n.a,{href:"https://thehive-project.github.io/Cortex-Analyzers/",children:"Cortex Neurons documentation"})]}),"\n",(0,o.jsx)(n.h2,{id:"build--test-cortex-neurons",children:"Build & Test cortex-neurons"}),"\n",(0,o.jsx)(n.h3,{id:"build-my-cortex-neuron-locally-from-dockerfile",children:"Build my Cortex Neuron locally from Dockerfile"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"docker build -t myneuron:latest .\n"})}),"\n",(0,o.jsx)(n.h3,{id:"test-the-local-neuron",children:"Test the local neuron"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"docker run --rm -v ${PWD}:/job myneuron:latest\n"})}),"\n",(0,o.jsx)(n.h2,{id:"test-remote-existing-cortex-neurons-on-macos",children:"Test remote existing cortex-neurons (on MacOS)"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"docker run --platform=linux/amd64 -v ${PWD}:/job cortexneurons/dshield_lookup:devel\n"})}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"Make sure to have a ./input/input.json file configured locally. If the cortex neuron runs successfully, an output.json should appear in output folder."})}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-json",metastring:'title="input/input.json"',children:'{\n "data":"185.162.131.25",\n "tlp":0,\n "parameters":{\n \n },\n "dataType":"ip",\n "config":{\n "jobTimeout":30,\n "service":"",\n "url":"",\n "api_key":"",\n "proxy_http":"",\n "proxy":{\n "http":"",\n "https":""\n },\n "max_tlp":2,\n "max_pap":2,\n "check_tlp":true,\n "check_pap":true,\n "proxy_https":"",\n "cacerts":"",\n "auto_extract_artifacts":false,\n "jobCache":10\n },\n "pap":2,\n "message":"1"\n}\n'})})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var o=t(6540);const r={},s=o.createContext(r);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/961cf1dd.f10c81d0.js b/assets/js/961cf1dd.f10c81d0.js
new file mode 100644
index 0000000..11f5a44
--- /dev/null
+++ b/assets/js/961cf1dd.f10c81d0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[2805],{610:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>a});var t=o(4848),r=o(8453);const s={},i="Cortex Neurons",c={id:"TheHive/cortex-neurons",title:"Cortex Neurons",description:"Introduction",source:"@site/docs/TheHive/cortex-neurons.md",sourceDirName:"TheHive",slug:"/TheHive/cortex-neurons",permalink:"/docs/TheHive/cortex-neurons",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Shuffle",permalink:"/docs/Shuffle"},next:{title:"Resources",permalink:"/docs/TheHive/thehive-resources"}},l={},a=[{value:"Introduction",id:"introduction",level:2},{value:"Build & Test cortex-neurons",id:"build--test-cortex-neurons",level:2},{value:"Build my Cortex Neuron locally from Dockerfile",id:"build-my-cortex-neuron-locally-from-dockerfile",level:3},{value:"Test the local neuron",id:"test-the-local-neuron",level:3},{value:"Test remote existing cortex-neurons (on MacOS Apple Silicon)",id:"test-remote-existing-cortex-neurons-on-macos-apple-silicon",level:3},{value:"Debug remote existing cortex-neuron from command-line",id:"debug-remote-existing-cortex-neuron-from-command-line",level:3}];function u(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"cortex-neurons",children:"Cortex Neurons"}),"\n",(0,t.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsxs)(n.p,{children:["As stated in the ",(0,t.jsx)(n.a,{href:"https://thehive-project.github.io/Cortex-Analyzers/",children:"Cortex Neurons documentation"})]}),"\n",(0,t.jsx)(n.h2,{id:"build--test-cortex-neurons",children:"Build & Test cortex-neurons"}),"\n",(0,t.jsx)(n.h3,{id:"build-my-cortex-neuron-locally-from-dockerfile",children:"Build my Cortex Neuron locally from Dockerfile"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker build -t myneuron:latest .\n"})}),"\n",(0,t.jsx)(n.h3,{id:"test-the-local-neuron",children:"Test the local neuron"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run --rm -v ${PWD}:/job myneuron:latest\n"})}),"\n",(0,t.jsx)(n.h3,{id:"test-remote-existing-cortex-neurons-on-macos-apple-silicon",children:"Test remote existing cortex-neurons (on MacOS Apple Silicon)"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run --rm --platform=linux/amd64 -v ${PWD}:/job cortexneurons/dshield_lookup:devel\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"Make sure to have a ./input/input.json file configured locally. If the cortex neuron runs successfully, an output.json should appear in output folder."})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:'title="input/input.json"',children:'{\n "data":"185.162.131.25",\n "tlp":0,\n "parameters":{\n \n },\n "dataType":"ip",\n "config":{\n "jobTimeout":30,\n "service":"",\n "url":"",\n "api_key":"",\n "proxy_http":"",\n "proxy":{\n "http":"",\n "https":""\n },\n "max_tlp":2,\n "max_pap":2,\n "check_tlp":true,\n "check_pap":true,\n "proxy_https":"",\n "cacerts":"",\n "auto_extract_artifacts":false,\n "jobCache":10\n },\n "pap":2,\n "message":"1"\n}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"debug-remote-existing-cortex-neuron-from-command-line",children:"Debug remote existing cortex-neuron from command-line"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker run -ti --platform linux/amd64 --name=mylocalneuron --rm --entrypoint /bin/bash cortexneurons/falconsandbox:devel\n"})}),"\n",(0,t.jsx)(n.p,{children:"Upon new changes, to create an image if needed (better build from scratch, not recommended):"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker commit mylocalneuron mylocalneuron:latest\n"})})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>i,x:()=>c});var t=o(6540);const r={},s=t.createContext(r);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/996f5af2.fac392ba.js b/assets/js/996f5af2.787a72a8.js
similarity index 98%
rename from assets/js/996f5af2.fac392ba.js
rename to assets/js/996f5af2.787a72a8.js
index 4347db6..890c2de 100644
--- a/assets/js/996f5af2.fac392ba.js
+++ b/assets/js/996f5af2.787a72a8.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[5307],{2939:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>a});var t=i(4848),s=i(8453);const r={},l="SOC2",c={id:"Compliance/SOC2",title:"SOC2",description:"Introduction",source:"@site/docs/Compliance/SOC2.mdx",sourceDirName:"Compliance",slug:"/Compliance/SOC2",permalink:"/docs/Compliance/SOC2",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Welcome",permalink:"/docs/welcome"},next:{title:"Configuration Management",permalink:"/docs/Engineering/ConfigurationManagement"}},o={},a=[{value:"Introduction",id:"introduction",level:2},{value:"Available assessments",id:"available-assessments",level:3},{value:"Report types",id:"report-types",level:3},{value:"Type 1 Report",id:"type-1-report",level:4},{value:"Type 2 Report",id:"type-2-report",level:4},{value:"Benefits of Being Certified",id:"benefits-of-being-certified",level:3},{value:"Example",id:"example",level:3},{value:"Common criterias (CC)",id:"common-criterias-cc",level:2},{value:"CC1 - Control Environment",id:"cc1---control-environment",level:3},{value:"CC2 - Communication & Information",id:"cc2---communication--information",level:3},{value:"CC3 - Risk Assessment",id:"cc3---risk-assessment",level:3},{value:"CC4 - Monitoring Activities",id:"cc4---monitoring-activities",level:3},{value:"CC5 - Control Activities",id:"cc5---control-activities",level:3},{value:"CC6 - Logical & Physical Access",id:"cc6---logical--physical-access",level:3},{value:"CC7 - System Operations",id:"cc7---system-operations",level:3},{value:"CC8 - Change management",id:"cc8---change-management",level:3},{value:"CC9 - Risk Mitigation",id:"cc9---risk-mitigation",level:3},{value:"Additional criterias (AC)",id:"additional-criterias-ac",level:2}];function d(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"soc2",children:"SOC2"}),"\n",(0,t.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://us.aicpa.org/interestareas/frc/assuranceadvisoryservices/aicpasoc2report",children:"SOC2"})," is an assessment program ran by the ",(0,t.jsx)(n.a,{href:"https://www.aicpa-cima.com/",children:"AICPA"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"SOC"}),(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Focus"}),(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Restricted Use"}),(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Report Content"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"SOC1"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Internal Controls for financial reporting"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Restricted Use, Stakeholders require NDA"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Specific detail on controls relevant to financial reporting"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"SOC2"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Internal Controls for Security, Availability, Confidentiality, Process Integrity, Privacy"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Restricted Use, Stakeholders require NDA"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:'Specific detail on each controls for the "Trust Criteria" in scope.'})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"SOC2"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Internal Controls for Security, Availability, Confidentiality, Process Integrity, Privacy"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Can be shared publicly unrestricted"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"General description"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"available-assessments",children:"Available assessments"}),"\n",(0,t.jsx)(n.p,{children:"There is three different SOC assessments :"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"SOC for Service Organizations : Internal report on controls provided by the organization allowing users to assess risks."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"SOC for Cybersecurity : Reporting framework allowing organizations communicate effectiveness of cybersecurity risk management."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"SOC for Supply Chain : Internal controls report of controls for producing, manufacturing or distribution of goods."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"report-types",children:"Report types"}),"\n",(0,t.jsx)(n.h4,{id:"type-1-report",children:"Type 1 Report"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Focus on control design"}),"\n",(0,t.jsx)(n.li,{children:"Shorter time to undertake assessment"}),"\n",(0,t.jsx)(n.li,{children:"Can be undertaken prior to Type 2"}),"\n",(0,t.jsx)(n.li,{children:"Costs less than Type 2 report"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"type-2-report",children:"Type 2 Report"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Focus on operational effectiveness"}),"\n",(0,t.jsx)(n.li,{children:"Longer time to undertake assessment"}),"\n",(0,t.jsx)(n.li,{children:"Must have at least 6 months evidence"}),"\n",(0,t.jsx)(n.li,{children:"Costs more than Type 1 report"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"benefits-of-being-certified",children:"Benefits of Being Certified"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Customer demand"}),"\n",(0,t.jsx)(n.li,{children:"Independent security assurance"}),"\n",(0,t.jsx)(n.li,{children:"Competitive advantage"}),"\n",(0,t.jsx)(n.li,{children:"Regulatory compliance"}),"\n",(0,t.jsx)(n.li,{children:"Feedback on operational effectiveness"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"https://aws.amazon.com/fr/compliance/soc-faqs/",children:"AWS SOC Compliance"})}),"\n",(0,t.jsx)(n.h1,{id:"soc-trust-criterias",children:"SOC Trust Criterias"}),"\n",(0,t.jsxs)(n.p,{children:["The first 5 Common Criterias come from the ",(0,t.jsx)(n.a,{href:"https://www.coso.org/SitePages/Home.aspx",children:"COSO framework"})," which represents 17 principles.\nThe 4 other Common Criterias (which are all mandatories) are SOC2 specific.\nAdditionally, Additional Criterias can be covered if chosen by the company requesting the audit."]}),"\n",(0,t.jsx)(n.h2,{id:"common-criterias-cc",children:"Common criterias (CC)"}),"\n",(0,t.jsx)(n.h3,{id:"cc1---control-environment",children:"CC1 - Control Environment"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC1.1 - Demonstrate commitment to integrity & ethical values"}),"\n",(0,t.jsx)(n.li,{children:"CC1.2 - Exercise oversight of internal controls"}),"\n",(0,t.jsx)(n.li,{children:"CC1.3 - Establish structures & responsibility to meet objectives"}),"\n",(0,t.jsx)(n.li,{children:"CC1.4 - Demonstrate commitment to competence"}),"\n",(0,t.jsx)(n.li,{children:"CC1.5 - Enforce accountability"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc2---communication--information",children:"CC2 - Communication & Information"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC2.1 - Use quality information to support controls"}),"\n",(0,t.jsx)(n.li,{children:"CC2.2 - Communicate internally regarding controls"}),"\n",(0,t.jsx)(n.li,{children:"CC2.3 - Communicate externally regarding controls"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc3---risk-assessment",children:"CC3 - Risk Assessment"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC3.1 - Specify clear objectives"}),"\n",(0,t.jsx)(n.li,{children:"CC3.2 - Identify and assess risk"}),"\n",(0,t.jsx)(n.li,{children:"CC3.3 - Consider fraud risk"}),"\n",(0,t.jsx)(n.li,{children:"CC3.4 - Identify and assess significant change"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc4---monitoring-activities",children:"CC4 - Monitoring Activities"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC4.1 - Evaluate components of internal controls"}),"\n",(0,t.jsx)(n.li,{children:"CC4.2 - Communicate deficiencies in a timely manner"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc5---control-activities",children:"CC5 - Control Activities"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC5.1 - Select control activities to mitigate risk"}),"\n",(0,t.jsx)(n.li,{children:"CC5.2 - Select general controls over technology"}),"\n",(0,t.jsx)(n.li,{children:"CC5.3 - Deploy controls through policies"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc6---logical--physical-access",children:"CC6 - Logical & Physical Access"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC6.1 - Protect information assets with logical access security controls"}),"\n",(0,t.jsx)(n.li,{children:"CC6.2 - Authorize users before granting access, remove promptly"}),"\n",(0,t.jsx)(n.li,{children:"CC6.3 - Apply least privilege and segregation of duties"}),"\n",(0,t.jsx)(n.li,{children:"CC6.4 - Restrict physical access to authorized personnel"}),"\n",(0,t.jsx)(n.li,{children:"CC6.5 - Remove sensitive data before relaxing physical controls"}),"\n",(0,t.jsx)(n.li,{children:"CC6.6 - Implement logical access security measures"}),"\n",(0,t.jsx)(n.li,{children:"\u0421\u04216.7 - Restrict removal of information and protect in transit"}),"\n",(0,t.jsx)(n.li,{children:"CC6.8 - Protect against installation of malicious software"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc7---system-operations",children:"CC7 - System Operations"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC7.1 - Identify changes in configuration and vulnerabilities"}),"\n",(0,t.jsx)(n.li,{children:"CC7.2 - Monitor system for anomalies"}),"\n",(0,t.jsx)(n.li,{children:"CC7.3 - Evaluate Security incidents"}),"\n",(0,t.jsx)(n.li,{children:"CC7.4 - Respond to security incidents using a defined plan"}),"\n",(0,t.jsx)(n.li,{children:"CC7.5 - Identify and implement activities to recover from incidents"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc8---change-management",children:"CC8 - Change management"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC8.1 - Authorize, design, test, approves changes to meet objectives"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc9---risk-mitigation",children:"CC9 - Risk Mitigation"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC9.1- Identify and selects risk mitigation activities."}),"\n",(0,t.jsx)(n.li,{children:"CC9.2 - Assess and manage risk from vendors/partners"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"additional-criterias-ac",children:"Additional criterias (AC)"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Availability"}),"\n",(0,t.jsx)(n.li,{children:"Confidentiality"}),"\n",(0,t.jsx)(n.li,{children:"Process Integrity"}),"\n",(0,t.jsx)(n.li,{children:"Privacy"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>c});var t=i(6540);const s={},r=t.createContext(s);function l(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[5307],{2939:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>a});var t=i(4848),s=i(8453);const r={},l="SOC2",c={id:"Compliance/SOC2",title:"SOC2",description:"Introduction",source:"@site/docs/Compliance/SOC2.mdx",sourceDirName:"Compliance",slug:"/Compliance/SOC2",permalink:"/docs/Compliance/SOC2",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Welcome",permalink:"/docs/welcome"},next:{title:"Configuration Management",permalink:"/docs/Engineering/ConfigurationManagement"}},o={},a=[{value:"Introduction",id:"introduction",level:2},{value:"Available assessments",id:"available-assessments",level:3},{value:"Report types",id:"report-types",level:3},{value:"Type 1 Report",id:"type-1-report",level:4},{value:"Type 2 Report",id:"type-2-report",level:4},{value:"Benefits of Being Certified",id:"benefits-of-being-certified",level:3},{value:"Example",id:"example",level:3},{value:"Common criterias (CC)",id:"common-criterias-cc",level:2},{value:"CC1 - Control Environment",id:"cc1---control-environment",level:3},{value:"CC2 - Communication & Information",id:"cc2---communication--information",level:3},{value:"CC3 - Risk Assessment",id:"cc3---risk-assessment",level:3},{value:"CC4 - Monitoring Activities",id:"cc4---monitoring-activities",level:3},{value:"CC5 - Control Activities",id:"cc5---control-activities",level:3},{value:"CC6 - Logical & Physical Access",id:"cc6---logical--physical-access",level:3},{value:"CC7 - System Operations",id:"cc7---system-operations",level:3},{value:"CC8 - Change management",id:"cc8---change-management",level:3},{value:"CC9 - Risk Mitigation",id:"cc9---risk-mitigation",level:3},{value:"Additional criterias (AC)",id:"additional-criterias-ac",level:2}];function d(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"soc2",children:"SOC2"}),"\n",(0,t.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://us.aicpa.org/interestareas/frc/assuranceadvisoryservices/aicpasoc2report",children:"SOC2"})," is an assessment program ran by the ",(0,t.jsx)(n.a,{href:"https://www.aicpa-cima.com/",children:"AICPA"})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"SOC"}),(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Focus"}),(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Restricted Use"}),(0,t.jsx)(n.th,{style:{textAlign:"center"},children:"Report Content"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"SOC1"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Internal Controls for financial reporting"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Restricted Use, Stakeholders require NDA"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Specific detail on controls relevant to financial reporting"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"SOC2"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Internal Controls for Security, Availability, Confidentiality, Process Integrity, Privacy"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Restricted Use, Stakeholders require NDA"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:'Specific detail on each controls for the "Trust Criteria" in scope.'})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"SOC2"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Internal Controls for Security, Availability, Confidentiality, Process Integrity, Privacy"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"Can be shared publicly unrestricted"}),(0,t.jsx)(n.td,{style:{textAlign:"center"},children:"General description"})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"available-assessments",children:"Available assessments"}),"\n",(0,t.jsx)(n.p,{children:"There is three different SOC assessments :"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"SOC for Service Organizations : Internal report on controls provided by the organization allowing users to assess risks."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"SOC for Cybersecurity : Reporting framework allowing organizations communicate effectiveness of cybersecurity risk management."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"SOC for Supply Chain : Internal controls report of controls for producing, manufacturing or distribution of goods."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"report-types",children:"Report types"}),"\n",(0,t.jsx)(n.h4,{id:"type-1-report",children:"Type 1 Report"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Focus on control design"}),"\n",(0,t.jsx)(n.li,{children:"Shorter time to undertake assessment"}),"\n",(0,t.jsx)(n.li,{children:"Can be undertaken prior to Type 2"}),"\n",(0,t.jsx)(n.li,{children:"Costs less than Type 2 report"}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"type-2-report",children:"Type 2 Report"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Focus on operational effectiveness"}),"\n",(0,t.jsx)(n.li,{children:"Longer time to undertake assessment"}),"\n",(0,t.jsx)(n.li,{children:"Must have at least 6 months evidence"}),"\n",(0,t.jsx)(n.li,{children:"Costs more than Type 1 report"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"benefits-of-being-certified",children:"Benefits of Being Certified"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Customer demand"}),"\n",(0,t.jsx)(n.li,{children:"Independent security assurance"}),"\n",(0,t.jsx)(n.li,{children:"Competitive advantage"}),"\n",(0,t.jsx)(n.li,{children:"Regulatory compliance"}),"\n",(0,t.jsx)(n.li,{children:"Feedback on operational effectiveness"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"https://aws.amazon.com/fr/compliance/soc-faqs/",children:"AWS SOC Compliance"})}),"\n",(0,t.jsx)(n.h1,{id:"soc-trust-criterias",children:"SOC Trust Criterias"}),"\n",(0,t.jsxs)(n.p,{children:["The first 5 Common Criterias come from the ",(0,t.jsx)(n.a,{href:"https://www.coso.org/SitePages/Home.aspx",children:"COSO framework"})," which represents 17 principles.\nThe 4 other Common Criterias (which are all mandatories) are SOC2 specific.\nAdditionally, Additional Criterias can be covered if chosen by the company requesting the audit."]}),"\n",(0,t.jsx)(n.h2,{id:"common-criterias-cc",children:"Common criterias (CC)"}),"\n",(0,t.jsx)(n.h3,{id:"cc1---control-environment",children:"CC1 - Control Environment"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC1.1 - Demonstrate commitment to integrity & ethical values"}),"\n",(0,t.jsx)(n.li,{children:"CC1.2 - Exercise oversight of internal controls"}),"\n",(0,t.jsx)(n.li,{children:"CC1.3 - Establish structures & responsibility to meet objectives"}),"\n",(0,t.jsx)(n.li,{children:"CC1.4 - Demonstrate commitment to competence"}),"\n",(0,t.jsx)(n.li,{children:"CC1.5 - Enforce accountability"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc2---communication--information",children:"CC2 - Communication & Information"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC2.1 - Use quality information to support controls"}),"\n",(0,t.jsx)(n.li,{children:"CC2.2 - Communicate internally regarding controls"}),"\n",(0,t.jsx)(n.li,{children:"CC2.3 - Communicate externally regarding controls"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc3---risk-assessment",children:"CC3 - Risk Assessment"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC3.1 - Specify clear objectives"}),"\n",(0,t.jsx)(n.li,{children:"CC3.2 - Identify and assess risk"}),"\n",(0,t.jsx)(n.li,{children:"CC3.3 - Consider fraud risk"}),"\n",(0,t.jsx)(n.li,{children:"CC3.4 - Identify and assess significant change"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc4---monitoring-activities",children:"CC4 - Monitoring Activities"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC4.1 - Evaluate components of internal controls"}),"\n",(0,t.jsx)(n.li,{children:"CC4.2 - Communicate deficiencies in a timely manner"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc5---control-activities",children:"CC5 - Control Activities"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC5.1 - Select control activities to mitigate risk"}),"\n",(0,t.jsx)(n.li,{children:"CC5.2 - Select general controls over technology"}),"\n",(0,t.jsx)(n.li,{children:"CC5.3 - Deploy controls through policies"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc6---logical--physical-access",children:"CC6 - Logical & Physical Access"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC6.1 - Protect information assets with logical access security controls"}),"\n",(0,t.jsx)(n.li,{children:"CC6.2 - Authorize users before granting access, remove promptly"}),"\n",(0,t.jsx)(n.li,{children:"CC6.3 - Apply least privilege and segregation of duties"}),"\n",(0,t.jsx)(n.li,{children:"CC6.4 - Restrict physical access to authorized personnel"}),"\n",(0,t.jsx)(n.li,{children:"CC6.5 - Remove sensitive data before relaxing physical controls"}),"\n",(0,t.jsx)(n.li,{children:"CC6.6 - Implement logical access security measures"}),"\n",(0,t.jsx)(n.li,{children:"\u0421\u04216.7 - Restrict removal of information and protect in transit"}),"\n",(0,t.jsx)(n.li,{children:"CC6.8 - Protect against installation of malicious software"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc7---system-operations",children:"CC7 - System Operations"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC7.1 - Identify changes in configuration and vulnerabilities"}),"\n",(0,t.jsx)(n.li,{children:"CC7.2 - Monitor system for anomalies"}),"\n",(0,t.jsx)(n.li,{children:"CC7.3 - Evaluate Security incidents"}),"\n",(0,t.jsx)(n.li,{children:"CC7.4 - Respond to security incidents using a defined plan"}),"\n",(0,t.jsx)(n.li,{children:"CC7.5 - Identify and implement activities to recover from incidents"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc8---change-management",children:"CC8 - Change management"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC8.1 - Authorize, design, test, approves changes to meet objectives"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"cc9---risk-mitigation",children:"CC9 - Risk Mitigation"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"CC9.1- Identify and selects risk mitigation activities."}),"\n",(0,t.jsx)(n.li,{children:"CC9.2 - Assess and manage risk from vendors/partners"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"additional-criterias-ac",children:"Additional criterias (AC)"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Availability"}),"\n",(0,t.jsx)(n.li,{children:"Confidentiality"}),"\n",(0,t.jsx)(n.li,{children:"Process Integrity"}),"\n",(0,t.jsx)(n.li,{children:"Privacy"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>c});var t=i(6540);const s={},r=t.createContext(s);function l(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/9a0a0f1d.f68770f1.js b/assets/js/9a0a0f1d.2af7cd6b.js
similarity index 98%
rename from assets/js/9a0a0f1d.f68770f1.js
rename to assets/js/9a0a0f1d.2af7cd6b.js
index a066920..a5edb54 100644
--- a/assets/js/9a0a0f1d.f68770f1.js
+++ b/assets/js/9a0a0f1d.2af7cd6b.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[3393],{2219:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var i=t(4848),a=t(8453);const s={},r="Configuration Management",o={id:"Engineering/ConfigurationManagement",title:"Configuration Management",description:"Summary",source:"@site/docs/Engineering/ConfigurationManagement.md",sourceDirName:"Engineering",slug:"/Engineering/ConfigurationManagement",permalink:"/docs/Engineering/ConfigurationManagement",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"SOC2",permalink:"/docs/Compliance/SOC2"},next:{title:"Disaster Recovery Plan",permalink:"/docs/Engineering/DRP"}},d={},c=[{value:"Summary",id:"summary",level:2},{value:"Tools",id:"tools",level:2},{value:"OS Hardening",id:"os-hardening",level:2},{value:"Basic Debian 11 hardening example",id:"basic-debian-11-hardening-example",level:3}];function l(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"configuration-management",children:"Configuration Management"}),"\n",(0,i.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Used for virtual machine OS-level configuration"}),"\n",(0,i.jsx)(n.li,{children:"Ex: Configuring the internals of the VMs"}),"\n",(0,i.jsx)(n.li,{children:"Referring to package configuration & software maintenance"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"tools",children:"Tools"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Puppet ",(0,i.jsx)(n.em,{children:"(might be covered here later on)"})]}),"\n",(0,i.jsx)(n.li,{children:"Ansible"}),"\n",(0,i.jsx)(n.li,{children:"Chef"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"os-hardening",children:"OS Hardening"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/ovh/debian-cis/tree/master",children:"OVH Debian CIS OS Hardening helper"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"basic-debian-11-hardening-example",children:"Basic Debian 11 hardening example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'git clone https://github.com/ovh/debian-cis.git && cd debian-cis\ncp debian/default /etc/default/cis-hardening\nsed -i "s#CIS_ROOT_DIR=.*#CIS_ROOT_DIR=\'$(pwd)\'#" /etc/default/cis-hardening\nbin/hardening.sh --audit-all\nbin/hardening.sh --audit --set-hardening-level 2\nbin/hardening.sh --apply\n\n## Optional / for reference\nsed -i "s/status=.+/status=enabled/" etc/conf.d/*audit*.cfg\nsed -i "s/status=.+/status=enabled/" etc/conf.d/*kernel*.cfg\nsed -i "s/status=disabled/status=enabled/g" etc/conf.d/*audit*.cfg\nsed -i "s/status=disabled/status=enabled/g" etc/conf.d/*kernel*.cfg\nsed -i "s/status=disabled/status=enabled/g" etc/conf.d/4.1.*.cfg\nsed -i "s/status=disabled/status=enabled/g" etc/conf.d/4.1.15_record_sudo_usage.cfg \nsed -i "s/status=enabled/status=disabled/g" etc/conf.d/4.1.17_freeze_auditd_conf.cfg\nbin/hardening.sh --apply\n\n## 5.1.8 CIS\nrm /etc/cron.deny\ntouch /etc/cron.allow\nchmod 600 /etc/cron.allow\nchown root:root /etc/cron.allow\ntouch /etc/at.allow\nchmod 600 /etc/at.allow\nchown root:root /etc/at.allow\n## 5.2.1\nchmod 600 /etc/ssh/sshd_config\n'})})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>o});var i=t(6540);const a={},s=i.createContext(a);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[3393],{2219:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>c});var i=t(4848),a=t(8453);const s={},r="Configuration Management",o={id:"Engineering/ConfigurationManagement",title:"Configuration Management",description:"Summary",source:"@site/docs/Engineering/ConfigurationManagement.md",sourceDirName:"Engineering",slug:"/Engineering/ConfigurationManagement",permalink:"/docs/Engineering/ConfigurationManagement",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"SOC2",permalink:"/docs/Compliance/SOC2"},next:{title:"Disaster Recovery Plan",permalink:"/docs/Engineering/DRP"}},d={},c=[{value:"Summary",id:"summary",level:2},{value:"Tools",id:"tools",level:2},{value:"OS Hardening",id:"os-hardening",level:2},{value:"Basic Debian 11 hardening example",id:"basic-debian-11-hardening-example",level:3}];function l(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"configuration-management",children:"Configuration Management"}),"\n",(0,i.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Used for virtual machine OS-level configuration"}),"\n",(0,i.jsx)(n.li,{children:"Ex: Configuring the internals of the VMs"}),"\n",(0,i.jsx)(n.li,{children:"Referring to package configuration & software maintenance"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"tools",children:"Tools"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Puppet ",(0,i.jsx)(n.em,{children:"(might be covered here later on)"})]}),"\n",(0,i.jsx)(n.li,{children:"Ansible"}),"\n",(0,i.jsx)(n.li,{children:"Chef"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"os-hardening",children:"OS Hardening"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://github.com/ovh/debian-cis/tree/master",children:"OVH Debian CIS OS Hardening helper"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"basic-debian-11-hardening-example",children:"Basic Debian 11 hardening example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'git clone https://github.com/ovh/debian-cis.git && cd debian-cis\ncp debian/default /etc/default/cis-hardening\nsed -i "s#CIS_ROOT_DIR=.*#CIS_ROOT_DIR=\'$(pwd)\'#" /etc/default/cis-hardening\nbin/hardening.sh --audit-all\nbin/hardening.sh --audit --set-hardening-level 2\nbin/hardening.sh --apply\n\n## Optional / for reference\nsed -i "s/status=.+/status=enabled/" etc/conf.d/*audit*.cfg\nsed -i "s/status=.+/status=enabled/" etc/conf.d/*kernel*.cfg\nsed -i "s/status=disabled/status=enabled/g" etc/conf.d/*audit*.cfg\nsed -i "s/status=disabled/status=enabled/g" etc/conf.d/*kernel*.cfg\nsed -i "s/status=disabled/status=enabled/g" etc/conf.d/4.1.*.cfg\nsed -i "s/status=disabled/status=enabled/g" etc/conf.d/4.1.15_record_sudo_usage.cfg \nsed -i "s/status=enabled/status=disabled/g" etc/conf.d/4.1.17_freeze_auditd_conf.cfg\nbin/hardening.sh --apply\n\n## 5.1.8 CIS\nrm /etc/cron.deny\ntouch /etc/cron.allow\nchmod 600 /etc/cron.allow\nchown root:root /etc/cron.allow\ntouch /etc/at.allow\nchmod 600 /etc/at.allow\nchown root:root /etc/at.allow\n## 5.2.1\nchmod 600 /etc/ssh/sshd_config\n'})})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>o});var i=t(6540);const a={},s=i.createContext(a);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/9b629586.2a7b1374.js b/assets/js/9b629586.9583efac.js
similarity index 97%
rename from assets/js/9b629586.2a7b1374.js
rename to assets/js/9b629586.9583efac.js
index 7a09963..06aa822 100644
--- a/assets/js/9b629586.2a7b1374.js
+++ b/assets/js/9b629586.9583efac.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[9218],{7552:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var r=t(4848),i=t(8453);const s={},o="Disaster Recovery Plan",c={id:"Engineering/DRP",title:"Disaster Recovery Plan",description:"Resources",source:"@site/docs/Engineering/DRP.md",sourceDirName:"Engineering",slug:"/Engineering/DRP",permalink:"/docs/Engineering/DRP",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Configuration Management",permalink:"/docs/Engineering/ConfigurationManagement"},next:{title:"Infrastructure as Code",permalink:"/docs/Engineering/IaC"}},a={},l=[{value:"Resources",id:"resources",level:2}];function d(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"disaster-recovery-plan",children:"Disaster Recovery Plan"}),"\n",(0,r.jsx)(n.h2,{id:"resources",children:"Resources"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://c4model.com",children:"C4 Model for software engineering"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://googlecloudcheatsheet.withgoogle.com/architecture",children:"GCP Architecture diagram"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://cloud.google.com/architecture/dr-scenarios-planning-guide",children:"GCP DRP guide"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://cloud.google.com/architecture/disaster-recovery",children:"Architecting disaster recovery for cloud infrastructure outages"})}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>c});var r=t(6540);const i={},s=r.createContext(i);function o(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[9218],{7552:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var r=t(4848),i=t(8453);const s={},o="Disaster Recovery Plan",c={id:"Engineering/DRP",title:"Disaster Recovery Plan",description:"Resources",source:"@site/docs/Engineering/DRP.md",sourceDirName:"Engineering",slug:"/Engineering/DRP",permalink:"/docs/Engineering/DRP",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Configuration Management",permalink:"/docs/Engineering/ConfigurationManagement"},next:{title:"Infrastructure as Code",permalink:"/docs/Engineering/IaC"}},a={},l=[{value:"Resources",id:"resources",level:2}];function d(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"disaster-recovery-plan",children:"Disaster Recovery Plan"}),"\n",(0,r.jsx)(n.h2,{id:"resources",children:"Resources"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://c4model.com",children:"C4 Model for software engineering"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://googlecloudcheatsheet.withgoogle.com/architecture",children:"GCP Architecture diagram"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://cloud.google.com/architecture/dr-scenarios-planning-guide",children:"GCP DRP guide"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://cloud.google.com/architecture/disaster-recovery",children:"Architecting disaster recovery for cloud infrastructure outages"})}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>c});var r=t(6540);const i={},s=r.createContext(i);function o(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/b38cbf7d.f1b2e130.js b/assets/js/b38cbf7d.53868a14.js
similarity index 92%
rename from assets/js/b38cbf7d.f1b2e130.js
rename to assets/js/b38cbf7d.53868a14.js
index c87701c..6906930 100644
--- a/assets/js/b38cbf7d.f1b2e130.js
+++ b/assets/js/b38cbf7d.53868a14.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4e3],{2140:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>u});var n=r(4848),o=r(8453);const s={},i="Hi!",a={id:"GCP/Terraform/init",title:"Hi!",description:"Some content for terraforming a GCP infrastructure is coming soon!",source:"@site/docs/GCP/Terraform/init.md",sourceDirName:"GCP/Terraform",slug:"/GCP/Terraform/init",permalink:"/docs/GCP/Terraform/init",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Remote SSH an IAP-secured server using a terminal or VSCode",permalink:"/docs/GCP/Identity-Aware Proxy/remote-ssh-iap"},next:{title:"Resources",permalink:"/docs/Security Operations/secops-resources"}},c={},u=[];function m(e){const t={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"hi",children:"Hi!"}),"\n",(0,n.jsx)(t.p,{children:"Some content for terraforming a GCP infrastructure is coming soon!"})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>a});var n=r(6540);const o={},s=n.createContext(o);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[4e3],{2140:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>u});var n=r(4848),o=r(8453);const s={},i="Hi!",a={id:"GCP/Terraform/init",title:"Hi!",description:"Some content for terraforming a GCP infrastructure is coming soon!",source:"@site/docs/GCP/Terraform/init.md",sourceDirName:"GCP/Terraform",slug:"/GCP/Terraform/init",permalink:"/docs/GCP/Terraform/init",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Remote SSH an IAP-secured server using a terminal or VSCode",permalink:"/docs/GCP/Identity-Aware Proxy/remote-ssh-iap"},next:{title:"Resources",permalink:"/docs/Security Operations/secops-resources"}},c={},u=[];function m(e){const t={h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"hi",children:"Hi!"}),"\n",(0,n.jsx)(t.p,{children:"Some content for terraforming a GCP infrastructure is coming soon!"})]})}function d(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>a});var n=r(6540);const o={},s=n.createContext(o);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/c37619b8.e33c3c8e.js b/assets/js/c37619b8.bf61e07a.js
similarity index 99%
rename from assets/js/c37619b8.e33c3c8e.js
rename to assets/js/c37619b8.bf61e07a.js
index 42849bf..4c50421 100644
--- a/assets/js/c37619b8.e33c3c8e.js
+++ b/assets/js/c37619b8.bf61e07a.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[3186],{4411:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>u,toc:()=>d});var o=t(4848),r=t(8453),s=t(1470),i=t(9365);const a={},l="Remote SSH an IAP-secured server using a terminal or VSCode",u={id:"GCP/Identity-Aware Proxy/remote-ssh-iap",title:"Remote SSH an IAP-secured server using a terminal or VSCode",description:"Getting started",source:"@site/docs/GCP/Identity-Aware Proxy/remote-ssh-iap.md",sourceDirName:"GCP/Identity-Aware Proxy",slug:"/GCP/Identity-Aware Proxy/remote-ssh-iap",permalink:"/docs/GCP/Identity-Aware Proxy/remote-ssh-iap",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Port-forwarding to localhost",permalink:"/docs/GCP/Identity-Aware Proxy/port-forwarding"},next:{title:"Hi!",permalink:"/docs/GCP/Terraform/init"}},c={},d=[{value:"Getting started",id:"getting-started",level:2},{value:"Install the gcloud CLI",id:"install-the-gcloud-cli",level:3},{value:"Authentication with the CLI",id:"gcloud-auth",level:3},{value:"Using a standard terminal",id:"using-a-standard-terminal",level:2},{value:"Using VSCode Remote Explorer",id:"using-vscode-remote-explorer",level:2},{value:"CLI Authentication",id:"cli-authentication",level:3},{value:"SSH tunnel dry run",id:"ssh-tunnel-dry-run",level:3},{value:"Updating your ~/.ssh/config",id:"updating-your-sshconfig",level:3},{value:"Connect to Host on VSCode",id:"connect-to-host-on-vscode",level:3},{value:"Troubleshoot",id:"troubleshoot",level:2},{value:"SSH issues with WSL & VScode on Windows",id:"ssh-issues-with-wsl--vscode-on-windows",level:3}];function h(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"remote-ssh-an-iap-secured-server-using-a-terminal-or-vscode",children:"Remote SSH an IAP-secured server using a terminal or VSCode"}),"\n","\n","\n",(0,o.jsx)(n.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,o.jsx)(n.h3,{id:"install-the-gcloud-cli",children:"Install the gcloud CLI"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"https://cloud.google.com/sdk/docs/install#linux",children:"Official documentation"})}),"\n",(0,o.jsx)(n.h3,{id:"gcloud-auth",children:"Authentication with the CLI"}),"\n",(0,o.jsxs)(n.p,{children:["Before each session you may launch, make sure to be ",(0,o.jsx)(n.strong,{children:"authenticated with your gcloud account"})," within the CLI"]}),"\n",(0,o.jsxs)(s.A,{groupId:"operating-systems",children:[(0,o.jsx)(i.A,{value:"Linux/mac",label:"Standard",children:(0,o.jsx)("pre",{children:"gcloud auth login"})}),(0,o.jsx)(i.A,{value:"WSL",label:"WSL",children:(0,o.jsx)("pre",{children:"gcloud auth login --no-launch-browser"})})]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h2,{id:"using-a-standard-terminal",children:"Using a standard terminal"}),"\n",(0,o.jsxs)(n.p,{children:["Very straightforward, make sure to be authenticated and run the following command :\n",(0,o.jsx)("pre",{children:"gcloud compute ssh my-instance --tunnel-through-iap "})]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h2,{id:"using-vscode-remote-explorer",children:"Using VSCode Remote Explorer"}),"\n",(0,o.jsx)(n.h3,{id:"cli-authentication",children:"CLI Authentication"}),"\n",(0,o.jsxs)(n.p,{children:["As usual, make sure to be authenticated : ",(0,o.jsx)(n.a,{href:"#gcloud-auth",children:"gcloud authentication"})]}),"\n",(0,o.jsx)(n.h3,{id:"ssh-tunnel-dry-run",children:"SSH tunnel dry run"}),"\n",(0,o.jsxs)(n.p,{children:["Then, make sure to ",(0,o.jsx)(n.strong,{children:"dry run ssh tunnel"})," to your instance :"]}),"\n",(0,o.jsx)("pre",{children:"gcloud compute ssh my-instance --tunnel-through-iap --dry-run"}),"\n",(0,o.jsx)(n.p,{children:"You should get a response similar to that one :"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:'/usr/bin/ssh -t -i /Users/YOURNAME/.ssh/google_compute_engine \n-o CheckHostIP=no \n-o HashKnownHosts=no -o HostKeyAlias=compute.XXXX -o IdentitiesOnly=yes \n-o StrictHostKeyChecking=yes \n-o UserKnownHostsFile=/Users/YOURNAME/.ssh/google_compute_known_hosts \n-o ProxyCommand="/Library/Frameworks/Python.framework/Versions/3.9/bin/python3 -S /Applications/google-cloud-sdk/lib/gcloud.py compute start-iap-tunnel my-instance %p --listen-on-stdin --project=my-project --zone=my-zone --verbosity=warning" \n-o ProxyUseFdpass=no YOURNAME@compute.XXXX\n'})}),"\n",(0,o.jsxs)(n.p,{children:["Now, what we are going to do is to ",(0,o.jsx)(n.strong,{children:"copy the ProxyCommand"})," out of it, which contains the info we need :\n",(0,o.jsx)(n.code,{children:"/Library/Frameworks/Python [....] -verbosity=warning"})]}),"\n",(0,o.jsx)(n.h3,{id:"updating-your-sshconfig",children:"Updating your ~/.ssh/config"}),"\n",(0,o.jsx)(n.p,{children:"Now, using VScode, let's have a look at our ssh config file :"}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"CMD + shift + P"})}),"\n"]}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Remote-SSH : Open SSH configuration file"})}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Into this file, add the following content and make sure to ",(0,o.jsx)(n.strong,{children:"replace the full ProxyCommand"})," by the way copied ealier :"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"Host my-instance-name\n HostName my-instance-name\n IdentityFile /Users/YOURNAME/.ssh/google_compute_engine\n CheckHostIP no\n HashKnownHosts no\n HostKeyAlias my-instance-name\n IdentitiesOnly yes\n StrictHostKeyChecking yes\n UserKnownHostsFile /Users/YOURNAME/.ssh/google_compute_known_hosts\n ProxyCommand /Library/Frameworks/Python [....] -verbosity=warning\n ProxyUseFdpass no\n"})}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.em,{children:"Host, HostName & HostKeyAlias"})," can all be replaced by whatever value you wish.\nDo not forget ",(0,o.jsx)(n.em,{children:"setting the right UserKnownHostsFile"})," directory as well as pasting the ",(0,o.jsx)(n.em,{children:"full ProxyCommand content"})]})}),"\n",(0,o.jsx)(n.h3,{id:"connect-to-host-on-vscode",children:"Connect to Host on VSCode"}),"\n",(0,o.jsx)(n.p,{children:"Now, you should be able to remote SSH your IAP-secured instance directly on VScode."}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"CMD + shift + P"})}),"\n"]}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Remote-SSH : Connect to Host"})}),"\n"]}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsxs)(n.p,{children:["Pick your new entry ",(0,o.jsx)(n.strong,{children:"'my-instance-name'"}),", which should appear"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"You can now use File Explorer tab to go to whatever folder you wish and edit files directly in VSCode. Saving you ton of time if you are not an avid vim programmer."}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsxs)(n.p,{children:["There might be a few additional steps on a ",(0,o.jsx)(n.strong,{children:"Windows"})," environment where you use ",(0,o.jsx)(n.em,{children:(0,o.jsx)(n.strong,{children:"Windows Subsystem for Linux"})}),". By default, VSCode does not use the WSL's ssh, which is a problem. See ",(0,o.jsx)(n.a,{href:"#troubleshoot",children:"Troubleshoot"})," below."]})}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h2,{id:"troubleshoot",children:"Troubleshoot"}),"\n",(0,o.jsx)(n.h3,{id:"ssh-issues-with-wsl--vscode-on-windows",children:"SSH issues with WSL & VScode on Windows"}),"\n",(0,o.jsx)(n.p,{children:"Coming later"})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},9365:(e,n,t)=>{t.d(n,{A:()=>i});t(6540);var o=t(8215);const r={tabItem:"tabItem_Ymn6"};var s=t(4848);function i(e){let{children:n,hidden:t,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,o.A)(r.tabItem,i),hidden:t,children:n})}},1470:(e,n,t)=>{t.d(n,{A:()=>j});var o=t(6540),r=t(8215),s=t(3104),i=t(6347),a=t(205),l=t(7485),u=t(1682),c=t(9466);function d(e){return o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:t,attributes:o,default:r}}=e;return{value:n,label:t,attributes:o,default:r}}))}(t);return function(e){const n=(0,u.X)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function m(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:t}=e;const r=(0,i.W6)(),s=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l.aZ)(s),(0,o.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(r.location.search);n.set(s,e),r.replace({...r.location,search:n.toString()})}),[s,r])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=h(e),[i,l]=(0,o.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!m({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const o=t.find((e=>e.default))??t[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:n,tabValues:s}))),[u,d]=p({queryString:t,groupId:r}),[g,x]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,s]=(0,c.Dv)(t);return[r,(0,o.useCallback)((e=>{t&&s.set(e)}),[t,s])]}({groupId:r}),y=(()=>{const e=u??g;return m({value:e,tabValues:s})?e:null})();(0,a.A)((()=>{y&&l(y)}),[y]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),x(e)}),[d,x,s]),tabValues:s}}var x=t(2303);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=t(4848);function b(e){let{className:n,block:t,selectedValue:o,selectValue:i,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.a_)(),c=e=>{const n=e.currentTarget,t=l.indexOf(n),r=a[t].value;r!==o&&(u(n),i(r))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":t},n),children:a.map((e=>{let{value:n,label:t,attributes:s}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:o===n?0:-1,"aria-selected":o===n,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.A)("tabs__item",y.tabItem,s?.className,{"tabs__item--active":o===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:r}=e;const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=s.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function w(e){const n=g(e);return(0,f.jsxs)("div",{className:(0,r.A)("tabs-container",y.tabList),children:[(0,f.jsx)(b,{...e,...n}),(0,f.jsx)(v,{...e,...n})]})}function j(e){const n=(0,x.A)();return(0,f.jsx)(w,{...e,children:d(e.children)},String(n))}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var o=t(6540);const r={},s=o.createContext(r);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[3186],{4411:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>a,metadata:()=>u,toc:()=>d});var o=t(4848),r=t(8453),s=t(1470),i=t(9365);const a={},l="Remote SSH an IAP-secured server using a terminal or VSCode",u={id:"GCP/Identity-Aware Proxy/remote-ssh-iap",title:"Remote SSH an IAP-secured server using a terminal or VSCode",description:"Getting started",source:"@site/docs/GCP/Identity-Aware Proxy/remote-ssh-iap.md",sourceDirName:"GCP/Identity-Aware Proxy",slug:"/GCP/Identity-Aware Proxy/remote-ssh-iap",permalink:"/docs/GCP/Identity-Aware Proxy/remote-ssh-iap",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Port-forwarding to localhost",permalink:"/docs/GCP/Identity-Aware Proxy/port-forwarding"},next:{title:"Hi!",permalink:"/docs/GCP/Terraform/init"}},c={},d=[{value:"Getting started",id:"getting-started",level:2},{value:"Install the gcloud CLI",id:"install-the-gcloud-cli",level:3},{value:"Authentication with the CLI",id:"gcloud-auth",level:3},{value:"Using a standard terminal",id:"using-a-standard-terminal",level:2},{value:"Using VSCode Remote Explorer",id:"using-vscode-remote-explorer",level:2},{value:"CLI Authentication",id:"cli-authentication",level:3},{value:"SSH tunnel dry run",id:"ssh-tunnel-dry-run",level:3},{value:"Updating your ~/.ssh/config",id:"updating-your-sshconfig",level:3},{value:"Connect to Host on VSCode",id:"connect-to-host-on-vscode",level:3},{value:"Troubleshoot",id:"troubleshoot",level:2},{value:"SSH issues with WSL & VScode on Windows",id:"ssh-issues-with-wsl--vscode-on-windows",level:3}];function h(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"remote-ssh-an-iap-secured-server-using-a-terminal-or-vscode",children:"Remote SSH an IAP-secured server using a terminal or VSCode"}),"\n","\n","\n",(0,o.jsx)(n.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,o.jsx)(n.h3,{id:"install-the-gcloud-cli",children:"Install the gcloud CLI"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.a,{href:"https://cloud.google.com/sdk/docs/install#linux",children:"Official documentation"})}),"\n",(0,o.jsx)(n.h3,{id:"gcloud-auth",children:"Authentication with the CLI"}),"\n",(0,o.jsxs)(n.p,{children:["Before each session you may launch, make sure to be ",(0,o.jsx)(n.strong,{children:"authenticated with your gcloud account"})," within the CLI"]}),"\n",(0,o.jsxs)(s.A,{groupId:"operating-systems",children:[(0,o.jsx)(i.A,{value:"Linux/mac",label:"Standard",children:(0,o.jsx)("pre",{children:"gcloud auth login"})}),(0,o.jsx)(i.A,{value:"WSL",label:"WSL",children:(0,o.jsx)("pre",{children:"gcloud auth login --no-launch-browser"})})]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h2,{id:"using-a-standard-terminal",children:"Using a standard terminal"}),"\n",(0,o.jsxs)(n.p,{children:["Very straightforward, make sure to be authenticated and run the following command :\n",(0,o.jsx)("pre",{children:"gcloud compute ssh my-instance --tunnel-through-iap "})]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h2,{id:"using-vscode-remote-explorer",children:"Using VSCode Remote Explorer"}),"\n",(0,o.jsx)(n.h3,{id:"cli-authentication",children:"CLI Authentication"}),"\n",(0,o.jsxs)(n.p,{children:["As usual, make sure to be authenticated : ",(0,o.jsx)(n.a,{href:"#gcloud-auth",children:"gcloud authentication"})]}),"\n",(0,o.jsx)(n.h3,{id:"ssh-tunnel-dry-run",children:"SSH tunnel dry run"}),"\n",(0,o.jsxs)(n.p,{children:["Then, make sure to ",(0,o.jsx)(n.strong,{children:"dry run ssh tunnel"})," to your instance :"]}),"\n",(0,o.jsx)("pre",{children:"gcloud compute ssh my-instance --tunnel-through-iap --dry-run"}),"\n",(0,o.jsx)(n.p,{children:"You should get a response similar to that one :"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:'/usr/bin/ssh -t -i /Users/YOURNAME/.ssh/google_compute_engine \n-o CheckHostIP=no \n-o HashKnownHosts=no -o HostKeyAlias=compute.XXXX -o IdentitiesOnly=yes \n-o StrictHostKeyChecking=yes \n-o UserKnownHostsFile=/Users/YOURNAME/.ssh/google_compute_known_hosts \n-o ProxyCommand="/Library/Frameworks/Python.framework/Versions/3.9/bin/python3 -S /Applications/google-cloud-sdk/lib/gcloud.py compute start-iap-tunnel my-instance %p --listen-on-stdin --project=my-project --zone=my-zone --verbosity=warning" \n-o ProxyUseFdpass=no YOURNAME@compute.XXXX\n'})}),"\n",(0,o.jsxs)(n.p,{children:["Now, what we are going to do is to ",(0,o.jsx)(n.strong,{children:"copy the ProxyCommand"})," out of it, which contains the info we need :\n",(0,o.jsx)(n.code,{children:"/Library/Frameworks/Python [....] -verbosity=warning"})]}),"\n",(0,o.jsx)(n.h3,{id:"updating-your-sshconfig",children:"Updating your ~/.ssh/config"}),"\n",(0,o.jsx)(n.p,{children:"Now, using VScode, let's have a look at our ssh config file :"}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"CMD + shift + P"})}),"\n"]}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Remote-SSH : Open SSH configuration file"})}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Into this file, add the following content and make sure to ",(0,o.jsx)(n.strong,{children:"replace the full ProxyCommand"})," by the way copied ealier :"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"Host my-instance-name\n HostName my-instance-name\n IdentityFile /Users/YOURNAME/.ssh/google_compute_engine\n CheckHostIP no\n HashKnownHosts no\n HostKeyAlias my-instance-name\n IdentitiesOnly yes\n StrictHostKeyChecking yes\n UserKnownHostsFile /Users/YOURNAME/.ssh/google_compute_known_hosts\n ProxyCommand /Library/Frameworks/Python [....] -verbosity=warning\n ProxyUseFdpass no\n"})}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.em,{children:"Host, HostName & HostKeyAlias"})," can all be replaced by whatever value you wish.\nDo not forget ",(0,o.jsx)(n.em,{children:"setting the right UserKnownHostsFile"})," directory as well as pasting the ",(0,o.jsx)(n.em,{children:"full ProxyCommand content"})]})}),"\n",(0,o.jsx)(n.h3,{id:"connect-to-host-on-vscode",children:"Connect to Host on VSCode"}),"\n",(0,o.jsx)(n.p,{children:"Now, you should be able to remote SSH your IAP-secured instance directly on VScode."}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"CMD + shift + P"})}),"\n"]}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Remote-SSH : Connect to Host"})}),"\n"]}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsxs)(n.p,{children:["Pick your new entry ",(0,o.jsx)(n.strong,{children:"'my-instance-name'"}),", which should appear"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"You can now use File Explorer tab to go to whatever folder you wish and edit files directly in VSCode. Saving you ton of time if you are not an avid vim programmer."}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsxs)(n.p,{children:["There might be a few additional steps on a ",(0,o.jsx)(n.strong,{children:"Windows"})," environment where you use ",(0,o.jsx)(n.em,{children:(0,o.jsx)(n.strong,{children:"Windows Subsystem for Linux"})}),". By default, VSCode does not use the WSL's ssh, which is a problem. See ",(0,o.jsx)(n.a,{href:"#troubleshoot",children:"Troubleshoot"})," below."]})}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h2,{id:"troubleshoot",children:"Troubleshoot"}),"\n",(0,o.jsx)(n.h3,{id:"ssh-issues-with-wsl--vscode-on-windows",children:"SSH issues with WSL & VScode on Windows"}),"\n",(0,o.jsx)(n.p,{children:"Coming later"})]})}function m(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},9365:(e,n,t)=>{t.d(n,{A:()=>i});t(6540);var o=t(8215);const r={tabItem:"tabItem_Ymn6"};var s=t(4848);function i(e){let{children:n,hidden:t,className:i}=e;return(0,s.jsx)("div",{role:"tabpanel",className:(0,o.A)(r.tabItem,i),hidden:t,children:n})}},1470:(e,n,t)=>{t.d(n,{A:()=>j});var o=t(6540),r=t(8215),s=t(3104),i=t(6347),a=t(205),l=t(7485),u=t(1682),c=t(9466);function d(e){return o.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,o.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:t}=e;return(0,o.useMemo)((()=>{const e=n??function(e){return d(e).map((e=>{let{props:{value:n,label:t,attributes:o,default:r}}=e;return{value:n,label:t,attributes:o,default:r}}))}(t);return function(e){const n=(0,u.X)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,t])}function m(e){let{value:n,tabValues:t}=e;return t.some((e=>e.value===n))}function p(e){let{queryString:n=!1,groupId:t}=e;const r=(0,i.W6)(),s=function(e){let{queryString:n=!1,groupId:t}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!t)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:n,groupId:t});return[(0,l.aZ)(s),(0,o.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(r.location.search);n.set(s,e),r.replace({...r.location,search:n.toString()})}),[s,r])]}function g(e){const{defaultValue:n,queryString:t=!1,groupId:r}=e,s=h(e),[i,l]=(0,o.useState)((()=>function(e){let{defaultValue:n,tabValues:t}=e;if(0===t.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!m({value:n,tabValues:t}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${t.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const o=t.find((e=>e.default))??t[0];if(!o)throw new Error("Unexpected error: 0 tabValues");return o.value}({defaultValue:n,tabValues:s}))),[u,d]=p({queryString:t,groupId:r}),[g,x]=function(e){let{groupId:n}=e;const t=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,s]=(0,c.Dv)(t);return[r,(0,o.useCallback)((e=>{t&&s.set(e)}),[t,s])]}({groupId:r}),y=(()=>{const e=u??g;return m({value:e,tabValues:s})?e:null})();(0,a.A)((()=>{y&&l(y)}),[y]);return{selectedValue:i,selectValue:(0,o.useCallback)((e=>{if(!m({value:e,tabValues:s}))throw new Error(`Can't select invalid tab value=${e}`);l(e),d(e),x(e)}),[d,x,s]),tabValues:s}}var x=t(2303);const y={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=t(4848);function b(e){let{className:n,block:t,selectedValue:o,selectValue:i,tabValues:a}=e;const l=[],{blockElementScrollPositionUntilNextRender:u}=(0,s.a_)(),c=e=>{const n=e.currentTarget,t=l.indexOf(n),r=a[t].value;r!==o&&(u(n),i(r))},d=e=>{let n=null;switch(e.key){case"Enter":c(e);break;case"ArrowRight":{const t=l.indexOf(e.currentTarget)+1;n=l[t]??l[0];break}case"ArrowLeft":{const t=l.indexOf(e.currentTarget)-1;n=l[t]??l[l.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.A)("tabs",{"tabs--block":t},n),children:a.map((e=>{let{value:n,label:t,attributes:s}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:o===n?0:-1,"aria-selected":o===n,ref:e=>l.push(e),onKeyDown:d,onClick:c,...s,className:(0,r.A)("tabs__item",y.tabItem,s?.className,{"tabs__item--active":o===n}),children:t??n},n)}))})}function v(e){let{lazy:n,children:t,selectedValue:r}=e;const s=(Array.isArray(t)?t:[t]).filter(Boolean);if(n){const e=s.find((e=>e.props.value===r));return e?(0,o.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:s.map(((e,n)=>(0,o.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function w(e){const n=g(e);return(0,f.jsxs)("div",{className:(0,r.A)("tabs-container",y.tabList),children:[(0,f.jsx)(b,{...e,...n}),(0,f.jsx)(v,{...e,...n})]})}function j(e){const n=(0,x.A)();return(0,f.jsx)(w,{...e,children:d(e.children)},String(n))}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var o=t(6540);const r={},s=o.createContext(r);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/ebfee794.d4bb9236.js b/assets/js/ebfee794.00b8372f.js
similarity index 97%
rename from assets/js/ebfee794.d4bb9236.js
rename to assets/js/ebfee794.00b8372f.js
index 66ae12b..1444c49 100644
--- a/assets/js/ebfee794.d4bb9236.js
+++ b/assets/js/ebfee794.00b8372f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[2005],{3414:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var o=t(4848),i=t(8453);const s={sidebar_position:0},l="Welcome",c={id:"welcome",title:"Welcome",description:"Welcome to the documentation space.",source:"@site/docs/welcome.md",sourceDirName:".",slug:"/welcome",permalink:"/docs/welcome",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708049878,formattedLastUpdatedAt:"Feb 16, 2024",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"tutorialSidebar",next:{title:"SOC2",permalink:"/docs/Compliance/SOC2"}},r={},d=[{value:"Sections coming soon",id:"sections-coming-soon",level:3},{value:"Blog posts subjects to be covered",id:"blog-posts-subjects-to-be-covered",level:3}];function a(e){const n={admonition:"admonition",em:"em",h1:"h1",h3:"h3",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"welcome",children:"Welcome"}),"\n",(0,o.jsx)(n.p,{children:"Welcome to the documentation space."}),"\n",(0,o.jsx)(n.h3,{id:"sections-coming-soon",children:"Sections coming soon"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Cloud Service Providers : AWS, GCP \u2601\ufe0f"}),"\n",(0,o.jsx)(n.li,{children:"TheHive \ud83d\udc1d"}),"\n",(0,o.jsx)(n.li,{children:"Shuffle \ud83d\udd00"}),"\n",(0,o.jsxs)(n.li,{children:["Splunk \ud83e\udeb5 ",(0,o.jsx)(n.em,{children:"(log pun intended)"})]}),"\n",(0,o.jsx)(n.li,{children:"Python \ud83d\udc0d"}),"\n",(0,o.jsx)(n.li,{children:"VSCode \ud83d\udcbb"}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"blog-posts-subjects-to-be-covered",children:"Blog posts subjects to be covered"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Security Operations Center"}),"\n",(0,o.jsx)(n.li,{children:"Security Operations Automation"}),"\n",(0,o.jsx)(n.li,{children:"Identity-Aware Proxy"}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{title:"Note to self",type:"note",children:(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Stay hydrated! \ud83d\udca6"}),"\n",(0,o.jsx)(n.li,{children:"Easy with the all-nighters \ud83d\ude34"}),"\n",(0,o.jsx)(n.li,{children:"You hold the keys to the path you'll walk down \u26f0"}),"\n"]})})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>c});var o=t(6540);const i={},s=o.createContext(i);function l(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[2005],{3414:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var o=t(4848),i=t(8453);const s={sidebar_position:0},l="Welcome",c={id:"welcome",title:"Welcome",description:"Welcome to the documentation space.",source:"@site/docs/welcome.md",sourceDirName:".",slug:"/welcome",permalink:"/docs/welcome",draft:!1,unlisted:!1,tags:[],version:"current",lastUpdatedAt:1708051930,formattedLastUpdatedAt:"Feb 16, 2024",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"tutorialSidebar",next:{title:"SOC2",permalink:"/docs/Compliance/SOC2"}},r={},d=[{value:"Sections coming soon",id:"sections-coming-soon",level:3},{value:"Blog posts subjects to be covered",id:"blog-posts-subjects-to-be-covered",level:3}];function a(e){const n={admonition:"admonition",em:"em",h1:"h1",h3:"h3",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"welcome",children:"Welcome"}),"\n",(0,o.jsx)(n.p,{children:"Welcome to the documentation space."}),"\n",(0,o.jsx)(n.h3,{id:"sections-coming-soon",children:"Sections coming soon"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Cloud Service Providers : AWS, GCP \u2601\ufe0f"}),"\n",(0,o.jsx)(n.li,{children:"TheHive \ud83d\udc1d"}),"\n",(0,o.jsx)(n.li,{children:"Shuffle \ud83d\udd00"}),"\n",(0,o.jsxs)(n.li,{children:["Splunk \ud83e\udeb5 ",(0,o.jsx)(n.em,{children:"(log pun intended)"})]}),"\n",(0,o.jsx)(n.li,{children:"Python \ud83d\udc0d"}),"\n",(0,o.jsx)(n.li,{children:"VSCode \ud83d\udcbb"}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"blog-posts-subjects-to-be-covered",children:"Blog posts subjects to be covered"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Security Operations Center"}),"\n",(0,o.jsx)(n.li,{children:"Security Operations Automation"}),"\n",(0,o.jsx)(n.li,{children:"Identity-Aware Proxy"}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{title:"Note to self",type:"note",children:(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Stay hydrated! \ud83d\udca6"}),"\n",(0,o.jsx)(n.li,{children:"Easy with the all-nighters \ud83d\ude34"}),"\n",(0,o.jsx)(n.li,{children:"You hold the keys to the path you'll walk down \u26f0"}),"\n"]})})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>c});var o=t(6540);const i={},s=o.createContext(i);function l(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.d607c0b0.js b/assets/js/runtime~main.d607c0b0.js
new file mode 100644
index 0000000..3d3e934
--- /dev/null
+++ b/assets/js/runtime~main.d607c0b0.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,r,t,c,o={},d={};function f(e){var a=d[e];if(void 0!==a)return a.exports;var r=d[e]={id:e,loaded:!1,exports:{}};return o[e].call(r.exports,r,r.exports,f),r.loaded=!0,r.exports}f.m=o,f.c=d,e=[],f.O=(a,r,t,c)=>{if(!r){var o=1/0;for(i=0;i=c)&&Object.keys(f.O).every((e=>f.O[e](r[b])))?r.splice(b--,1):(d=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[r,t,c]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var c=Object.create(null);f.r(c);var o={};a=a||[null,r({}),r([]),r(r)];for(var d=2&t&&e;"object"==typeof d&&!~a.indexOf(d);d=r(d))Object.getOwnPropertyNames(d).forEach((a=>o[a]=()=>e[a]));return o.default=()=>e,f.d(c,o),c},f.d=(e,a)=>{for(var r in a)f.o(a,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((a,r)=>(f.f[r](e,a),a)),[])),f.u=e=>"assets/js/"+({804:"7dd8714f",1218:"8037d0b1",1991:"b2b675dd",2005:"ebfee794",2042:"reactPlayerTwitch",2434:"5ad2500b",2711:"9e4087bc",2805:"961cf1dd",3186:"c37619b8",3249:"ccc49370",3392:"reactPlayerVidyard",3393:"9a0a0f1d",3671:"41d37d98",4e3:"b38cbf7d",4134:"393be207",4386:"5b48c0f7",4583:"1df93b7f",4813:"6875c492",4923:"a5e00c02",5307:"996f5af2",5894:"b2f554cd",6061:"1f391b9e",6173:"reactPlayerVimeo",6328:"reactPlayerDailyMotion",6344:"1365e388",6353:"reactPlayerPreview",6463:"reactPlayerKaltura",6887:"reactPlayerFacebook",7023:"9d09d54c",7098:"a7bd4aaa",7284:"d2c8aa9a",7458:"reactPlayerFilePlayer",7472:"814f3328",7570:"reactPlayerMixcloud",7627:"reactPlayerStreamable",7643:"a6aa9e1f",8209:"01a85c17",8211:"843ef7c4",8401:"17896441",8446:"reactPlayerYouTube",8581:"935f2afb",8880:"0817c5ed",9048:"a94703ab",9218:"9b629586",9267:"a7023ddc",9340:"reactPlayerWistia",9425:"20417f73",9647:"5e95c892",9979:"reactPlayerSoundCloud"}[e]||e)+"."+{804:"677c563a",1218:"e5531434",1991:"1f36a942",2005:"00b8372f",2042:"a665823a",2237:"828ae68e",2434:"e206c883",2711:"dfabb06b",2733:"cd7e52b8",2805:"f10c81d0",3186:"bf61e07a",3249:"0422c987",3392:"b7d2f5f7",3393:"2af7cd6b",3671:"d2c9612d",4e3:"53868a14",4132:"185d2d78",4134:"7b95467f",4386:"c74b3358",4583:"ca839791",4813:"6425f445",4923:"aea3236c",5307:"787a72a8",5533:"3684102d",5894:"02ff2493",6061:"7b4522f1",6173:"666e1510",6328:"201a091c",6344:"c1b6fbd3",6353:"51575468",6463:"b4e69bb5",6887:"c08f1b60",7023:"b7a543ce",7098:"ad7f231a",7284:"69f24718",7458:"1a26df48",7472:"7318fa57",7570:"576cd1a6",7627:"2876126e",7643:"7d1c99f3",8209:"33a996d5",8211:"0cb0336c",8401:"b236b53d",8446:"39fc7ab9",8581:"3593d4ca",8747:"85078120",8880:"8457de86",9048:"29a07037",9218:"9583efac",9267:"5165082b",9340:"c152af9a",9425:"7d8cb90e",9647:"25ed6bcb",9979:"e0da7116"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},c="my-website:",f.l=(e,a,r,o)=>{if(t[e])t[e].push(a);else{var d,b;if(void 0!==r)for(var l=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(s);var c=t[e];if(delete t[e],d.parentNode&&d.parentNode.removeChild(d),c&&c.forEach((e=>e(r))),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),b&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/",f.gca=function(e){return e={17896441:"8401","7dd8714f":"804","8037d0b1":"1218",b2b675dd:"1991",ebfee794:"2005",reactPlayerTwitch:"2042","5ad2500b":"2434","9e4087bc":"2711","961cf1dd":"2805",c37619b8:"3186",ccc49370:"3249",reactPlayerVidyard:"3392","9a0a0f1d":"3393","41d37d98":"3671",b38cbf7d:"4000","393be207":"4134","5b48c0f7":"4386","1df93b7f":"4583","6875c492":"4813",a5e00c02:"4923","996f5af2":"5307",b2f554cd:"5894","1f391b9e":"6061",reactPlayerVimeo:"6173",reactPlayerDailyMotion:"6328","1365e388":"6344",reactPlayerPreview:"6353",reactPlayerKaltura:"6463",reactPlayerFacebook:"6887","9d09d54c":"7023",a7bd4aaa:"7098",d2c8aa9a:"7284",reactPlayerFilePlayer:"7458","814f3328":"7472",reactPlayerMixcloud:"7570",reactPlayerStreamable:"7627",a6aa9e1f:"7643","01a85c17":"8209","843ef7c4":"8211",reactPlayerYouTube:"8446","935f2afb":"8581","0817c5ed":"8880",a94703ab:"9048","9b629586":"9218",a7023ddc:"9267",reactPlayerWistia:"9340","20417f73":"9425","5e95c892":"9647",reactPlayerSoundCloud:"9979"}[e]||e,f.p+f.u(e)},(()=>{var e={5354:0,1869:0};f.f.j=(a,r)=>{var t=f.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise(((r,c)=>t=e[a]=[r,c]));r.push(t[2]=c);var o=f.p+f.u(a),d=new Error;f.l(o,(r=>{if(f.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var c=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;d.message="Loading chunk "+a+" failed.\n("+c+": "+o+")",d.name="ChunkLoadError",d.type=c,d.request=o,t[1](d)}}),"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,r)=>{var t,c,o=r[0],d=r[1],b=r[2],l=0;if(o.some((a=>0!==e[a]))){for(t in d)f.o(d,t)&&(f.m[t]=d[t]);if(b)var i=b(f)}for(a&&a(r);l{"use strict";var e,a,r,t,c,o={},f={};function d(e){var a=f[e];if(void 0!==a)return a.exports;var r=f[e]={id:e,loaded:!1,exports:{}};return o[e].call(r.exports,r,r.exports,d),r.loaded=!0,r.exports}d.m=o,d.c=f,e=[],d.O=(a,r,t,c)=>{if(!r){var o=1/0;for(i=0;i=c)&&Object.keys(d.O).every((e=>d.O[e](r[l])))?r.splice(l--,1):(f=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[r,t,c]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var c=Object.create(null);d.r(c);var o={};a=a||[null,r({}),r([]),r(r)];for(var f=2&t&&e;"object"==typeof f&&!~a.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach((a=>o[a]=()=>e[a]));return o.default=()=>e,d.d(c,o),c},d.d=(e,a)=>{for(var r in a)d.o(a,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,r)=>(d.f[r](e,a),a)),[])),d.u=e=>"assets/js/"+({804:"7dd8714f",1218:"8037d0b1",1991:"b2b675dd",2005:"ebfee794",2042:"reactPlayerTwitch",2434:"5ad2500b",2711:"9e4087bc",2805:"961cf1dd",3186:"c37619b8",3249:"ccc49370",3392:"reactPlayerVidyard",3393:"9a0a0f1d",3671:"41d37d98",4e3:"b38cbf7d",4134:"393be207",4386:"5b48c0f7",4583:"1df93b7f",4813:"6875c492",4923:"a5e00c02",5307:"996f5af2",5894:"b2f554cd",6061:"1f391b9e",6173:"reactPlayerVimeo",6328:"reactPlayerDailyMotion",6344:"1365e388",6353:"reactPlayerPreview",6463:"reactPlayerKaltura",6887:"reactPlayerFacebook",7023:"9d09d54c",7098:"a7bd4aaa",7284:"d2c8aa9a",7458:"reactPlayerFilePlayer",7472:"814f3328",7570:"reactPlayerMixcloud",7627:"reactPlayerStreamable",7643:"a6aa9e1f",8209:"01a85c17",8211:"843ef7c4",8401:"17896441",8446:"reactPlayerYouTube",8581:"935f2afb",8880:"0817c5ed",9048:"a94703ab",9218:"9b629586",9267:"a7023ddc",9340:"reactPlayerWistia",9425:"20417f73",9647:"5e95c892",9979:"reactPlayerSoundCloud"}[e]||e)+"."+{804:"b72b0207",1218:"bf46eca4",1991:"1f36a942",2005:"d4bb9236",2042:"a665823a",2237:"828ae68e",2434:"e206c883",2711:"dfabb06b",2733:"cd7e52b8",2805:"4a1923e8",3186:"e33c3c8e",3249:"0422c987",3392:"b7d2f5f7",3393:"f68770f1",3671:"d2c9612d",4e3:"f1b2e130",4132:"185d2d78",4134:"7b95467f",4386:"1e1feb59",4583:"ca839791",4813:"6425f445",4923:"aea3236c",5307:"fac392ba",5533:"3684102d",5894:"02ff2493",6061:"7b4522f1",6173:"666e1510",6328:"201a091c",6344:"4537fe05",6353:"51575468",6463:"b4e69bb5",6887:"c08f1b60",7023:"b7a543ce",7098:"ad7f231a",7284:"69f24718",7458:"1a26df48",7472:"7318fa57",7570:"576cd1a6",7627:"2876126e",7643:"7d1c99f3",8209:"33a996d5",8211:"0cb0336c",8401:"b236b53d",8446:"39fc7ab9",8581:"3593d4ca",8747:"85078120",8880:"3a57a2f1",9048:"29a07037",9218:"2a7b1374",9267:"5165082b",9340:"c152af9a",9425:"7d8cb90e",9647:"25ed6bcb",9979:"e0da7116"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},c="my-website:",d.l=(e,a,r,o)=>{if(t[e])t[e].push(a);else{var f,l;if(void 0!==r)for(var b=document.getElementsByTagName("script"),i=0;i{f.onerror=f.onload=null,clearTimeout(s);var c=t[e];if(delete t[e],f.parentNode&&f.parentNode.removeChild(f),c&&c.forEach((e=>e(r))),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=u.bind(null,f.onerror),f.onload=u.bind(null,f.onload),l&&document.head.appendChild(f)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"8401","7dd8714f":"804","8037d0b1":"1218",b2b675dd:"1991",ebfee794:"2005",reactPlayerTwitch:"2042","5ad2500b":"2434","9e4087bc":"2711","961cf1dd":"2805",c37619b8:"3186",ccc49370:"3249",reactPlayerVidyard:"3392","9a0a0f1d":"3393","41d37d98":"3671",b38cbf7d:"4000","393be207":"4134","5b48c0f7":"4386","1df93b7f":"4583","6875c492":"4813",a5e00c02:"4923","996f5af2":"5307",b2f554cd:"5894","1f391b9e":"6061",reactPlayerVimeo:"6173",reactPlayerDailyMotion:"6328","1365e388":"6344",reactPlayerPreview:"6353",reactPlayerKaltura:"6463",reactPlayerFacebook:"6887","9d09d54c":"7023",a7bd4aaa:"7098",d2c8aa9a:"7284",reactPlayerFilePlayer:"7458","814f3328":"7472",reactPlayerMixcloud:"7570",reactPlayerStreamable:"7627",a6aa9e1f:"7643","01a85c17":"8209","843ef7c4":"8211",reactPlayerYouTube:"8446","935f2afb":"8581","0817c5ed":"8880",a94703ab:"9048","9b629586":"9218",a7023ddc:"9267",reactPlayerWistia:"9340","20417f73":"9425","5e95c892":"9647",reactPlayerSoundCloud:"9979"}[e]||e,d.p+d.u(e)},(()=>{var e={5354:0,1869:0};d.f.j=(a,r)=>{var t=d.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise(((r,c)=>t=e[a]=[r,c]));r.push(t[2]=c);var o=d.p+d.u(a),f=new Error;d.l(o,(r=>{if(d.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var c=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;f.message="Loading chunk "+a+" failed.\n("+c+": "+o+")",f.name="ChunkLoadError",f.type=c,f.request=o,t[1](f)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,r)=>{var t,c,o=r[0],f=r[1],l=r[2],b=0;if(o.some((a=>0!==e[a]))){for(t in f)d.o(f,t)&&(d.m[t]=f[t]);if(l)var i=l(d)}for(a&&a(r);b
-
+
diff --git a/blog/archive.html b/blog/archive.html
index d215250..ad46abd 100644
--- a/blog/archive.html
+++ b/blog/archive.html
@@ -10,7 +10,7 @@
-
+
diff --git a/blog/hello-world.html b/blog/hello-world.html
index 54ce252..6f1f5ac 100644
--- a/blog/hello-world.html
+++ b/blog/hello-world.html
@@ -10,7 +10,7 @@
-
+
diff --git a/blog/tags.html b/blog/tags.html
index a8cd4b8..a1e3259 100644
--- a/blog/tags.html
+++ b/blog/tags.html
@@ -10,7 +10,7 @@
-
+
diff --git a/blog/tags/introduction.html b/blog/tags/introduction.html
index 053a4b3..607b4eb 100644
--- a/blog/tags/introduction.html
+++ b/blog/tags/introduction.html
@@ -10,7 +10,7 @@
-
+
diff --git a/docs/Compliance/SOC2.html b/docs/Compliance/SOC2.html
index 8c70b41..f420252 100644
--- a/docs/Compliance/SOC2.html
+++ b/docs/Compliance/SOC2.html
@@ -10,7 +10,7 @@
-
+
@@ -127,6 +127,6 @@