diff --git a/404.html b/404.html index 1ec495b..f0e203e 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@ Cyscale Cloud Platform - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/js/71eadb69.44724dcc.js b/assets/js/71eadb69.44724dcc.js new file mode 100644 index 0000000..078b659 --- /dev/null +++ b/assets/js/71eadb69.44724dcc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[528],{9881:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var t=n(4848),s=n(8453);const o={sidebar_position:7},i="Entra ID",a={id:"connectors/entra",title:"Entra ID",description:"Cyscale enables you to keep track of Entra entities (users, groups, devices, etc.) and what they have access to, such as Azure resources and even resources from other cloud providers if you are using Entra ID as an IdP for your SSO setup. You connect Cyscale to your Entra ID tenant through an app registration.",source:"@site/docs/connectors/entra.mdx",sourceDirName:"connectors",slug:"/connectors/entra",permalink:"/connectors/entra",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"Okta",permalink:"/connectors/okta"},next:{title:"Inventory",permalink:"/visibility/inventory"}},c={},d=[{value:"Connecting Your Entra ID Tenant",id:"connecting-your-entra-id-tenant",level:2},{value:"Step 1",id:"step-1",level:3},{value:"Step 2",id:"step-2",level:3},{value:"Terraform",id:"terraform",level:4},{value:"Manual",id:"manual",level:4},{value:"Deep Dive on Permissions",id:"deep-dive-on-permissions",level:2}];function l(e){const r={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.h1,{id:"entra-id",children:"Entra ID"}),"\n",(0,t.jsxs)(r.p,{children:["Cyscale enables you to keep track of Entra entities (users, groups, devices, etc.) and what they have access to, such as Azure resources and even resources from other cloud providers if you are using Entra ID as an IdP for your SSO setup. You connect Cyscale to your Entra ID tenant through an ",(0,t.jsx)(r.strong,{children:"app registration"}),"."]}),"\n",(0,t.jsx)(r.h2,{id:"connecting-your-entra-id-tenant",children:"Connecting Your Entra ID Tenant"}),"\n",(0,t.jsxs)(r.p,{children:["Once you are ready to connect your Entra ID tenant and have the required permissions, press the ",(0,t.jsx)(r.strong,{children:"+"})," button from the sidebar and choose ",(0,t.jsx)(r.strong,{children:"Microsoft Entra ID"}),". You will be greeted with a simple multi-step process."]}),"\n",(0,t.jsx)(r.h3,{id:"step-1",children:"Step 1"}),"\n",(0,t.jsxs)(r.p,{children:["In the first step, you provide the ID of your Entra ID tenant. You can find your tenant ID using the Azure Portal ",(0,t.jsx)(r.a,{href:"https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview",children:"here"}),"."]}),"\n",(0,t.jsx)(r.h3,{id:"step-2",children:"Step 2"}),"\n",(0,t.jsx)(r.p,{children:"In the second step you create the Entra ID app registration, the service principal, and assign the required permissions."}),"\n",(0,t.jsx)(r.admonition,{title:"Linking with Existing Azure Connectors",type:"tip",children:(0,t.jsx)(r.p,{children:"If you already have Azure subscriptions connected, Cyscale will reuse the app registration and credentials. All you have to do is assign the Entra ID permissions and grant admin consent."})}),"\n",(0,t.jsx)(r.h4,{id:"terraform",children:"Terraform"}),"\n",(0,t.jsxs)(r.p,{children:["Download the Terraform configuration file and, using the ",(0,t.jsx)(r.a,{href:"https://www.terraform.io/cli",children:"Terraform CLI"})," either from your machine or using ",(0,t.jsx)(r.a,{href:"https://docs.microsoft.com/en-us/azure/cloud-shell/overview",children:"Azure Cloud Shell"})," (click ",(0,t.jsx)(r.a,{href:"https://shell.azure.com/",children:"here"})," to directly open the shell), you provision the required resources."]}),"\n",(0,t.jsxs)(r.admonition,{title:"Authentication and Authorization",type:"info",children:[(0,t.jsxs)(r.p,{children:["Terraform uses the provider's APIs/SDKs to manage the resource. Cyscale makes use of the ",(0,t.jsx)(r.code,{children:"hashicorp/azuread"})," Terraform provider for creating the Entra ID app registration and service principal. You can read more about the available authentication options ",(0,t.jsx)(r.a,{href:"https://registry.terraform.io/providers/hashicorp/azuread/latest/docs#authenticating-to-azure-active-directory",children:"here"}),"."]}),(0,t.jsxs)(r.p,{children:["Perhaps the simplest option is to let the provider use the credentials stored by the ",(0,t.jsx)(r.code,{children:"az"})," CLI."]})]}),"\n",(0,t.jsx)(r.p,{children:"Inspect the Terraform configuration file and follow the instructions provided by Cyscale."}),"\n",(0,t.jsx)(r.h4,{id:"manual",children:"Manual"}),"\n",(0,t.jsx)(r.p,{children:"If you prefer setting up the resources manually from the Azure portal, follow the steps provided by Cyscale."}),"\n",(0,t.jsxs)(r.admonition,{title:"Access Security",type:"info",children:[(0,t.jsx)(r.p,{children:"While the permissions you grant to Cyscale are limited to reading the entities from your Entra ID tenant, you might still be concerned about the security of your information. Providing the service principal credentials to Cyscale means that any entity with access to these credentials can read your Entra ID data."}),(0,t.jsx)(r.p,{children:"Cyscale encrypts and stores the credentials in a database accessible only from within the Cyscale infrastructure. Then, a specialized service decrypts and uses the credentials to read your Entra ID assets. No member of the Cyscale team has access to your credentials."})]}),"\n",(0,t.jsx)(r.h2,{id:"deep-dive-on-permissions",children:"Deep Dive on Permissions"}),"\n",(0,t.jsx)(r.p,{children:"Cyscale requires the following Entra ID permissions:"}),"\n",(0,t.jsxs)(r.ul,{children:["\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.code,{children:"Directory.Read.All"})," - for reading the users, groups, and other resources"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.code,{children:"UserAuthenticationMethod.Read.All"})," - for the reading the MFA information"]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.code,{children:"Policy.Read.All"})," - for reading the ",(0,t.jsx)(r.a,{href:"https://learn.microsoft.com/en-us/entra/fundamentals/security-defaults",children:"Security Defaults"})]}),"\n",(0,t.jsxs)(r.li,{children:[(0,t.jsx)(r.code,{children:"AuditLog.Read.All"})," - for reading the MFA information"]}),"\n"]}),"\n",(0,t.jsxs)(r.p,{children:["Since these are considered high privilege permissions, you will have to grant admin consent for them. You can read more about admin consent in the ",(0,t.jsx)(r.a,{href:"https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent?WT.mc_id=Portal-Microsoft_AAD_RegisteredApps#admin-consent",children:"Azure documentation"}),"."]})]})}function h(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,t.jsx)(r,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,r,n)=>{n.d(r,{R:()=>i,x:()=>a});var t=n(6540);const s={},o=t.createContext(s);function i(e){const r=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function a(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(o.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7e9b59b3.a5dc6367.js b/assets/js/7e9b59b3.a5dc6367.js new file mode 100644 index 0000000..8790683 --- /dev/null +++ b/assets/js/7e9b59b3.a5dc6367.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[621],{9153:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var t=s(4848),n=s(8453);const r={sidebar_position:1},o="Inventory",l={id:"visibility/inventory",title:"Inventory",description:"Once at least one Connector is onboarded, Cyscale will periodically sync it. This will result in an extensive Inventory page that includes all the assets that Cyscale supports. You can check for supported assets on the Connectors page.",source:"@site/docs/visibility/inventory.mdx",sourceDirName:"visibility",slug:"/visibility/inventory",permalink:"/visibility/inventory",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Entra ID",permalink:"/connectors/entra"},next:{title:"Alerts",permalink:"/security/alerts"}},c={},a=[{value:"Filtering",id:"filtering",level:2},{value:"Security Score",id:"security-score",level:3},{value:"Failed Controls",id:"failed-controls",level:3}];function d(e){const i={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"inventory",children:"Inventory"}),"\n",(0,t.jsx)(i.p,{children:"Once at least one Connector is onboarded, Cyscale will periodically sync it. This will result in an extensive Inventory page that includes all the assets that Cyscale supports. You can check for supported assets on the Connectors page."}),"\n",(0,t.jsx)(i.h2,{id:"filtering",children:"Filtering"}),"\n",(0,t.jsxs)(i.p,{children:["The Inventory will include hundreds or even thousands of assets which will become difficult to manage. For this, Cyscale provides an intuitive filter palette that will allow you to filter by common asset properties like ",(0,t.jsx)(i.code,{children:"Provider"}),", ",(0,t.jsx)(i.code,{children:"Connector"}),", ",(0,t.jsx)(i.code,{children:"Region"}),", ",(0,t.jsx)(i.code,{children:"Asset Category"}),", ",(0,t.jsx)(i.code,{children:"Asset Type"})," and ",(0,t.jsx)(i.code,{children:"Tags"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["Besides these, Cyscale supports filtering by ",(0,t.jsx)(i.code,{children:"Security Score"})," and ",(0,t.jsx)(i.code,{children:"Failed Controls"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"security-score",children:"Security Score"}),"\n",(0,t.jsx)(i.p,{children:"The asset score is a metric that indicates the security impact of an asset. When filtering by score, you can choose from 4 options:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Minimal Risk"}),": 100% score (or no risk detected by Cyscale)"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Low Risk"}),": 76% - 99% score"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Medium Risk"}),": 51% - 75% score"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"High Risk"}),": 0% - 50%"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"This will allow you to check which are the most insecure assets and focus on remediating them to increase your overall security posture."}),"\n",(0,t.jsxs)(i.p,{children:["You can combine this filter with any other to get powerful insights like ",(0,t.jsx)(i.em,{children:'"AWS Virtual Machines with High Risk"'})," or ",(0,t.jsxs)(i.em,{children:['"Assets with ',(0,t.jsx)(i.code,{children:"env: production"}),' tag with Medium Risk"']}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["For more information check ",(0,t.jsx)(i.a,{href:"/security/security-score",children:"Asset Score Page"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"failed-controls",children:"Failed Controls"}),"\n",(0,t.jsxs)(i.p,{children:["Another powerful filter is ",(0,t.jsx)(i.strong,{children:"Failed Controls"}),". This will allow you to filter the inventory based on specific security controls like ",(0,t.jsx)(i.em,{children:'"Ensure VMs are not publicly accessible"'}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["When this filter is applied, the inventory will display all the assets impacted by a control (notice that secondary impacted assets are displayed as well, check ",(0,t.jsx)(i.a,{href:"/security/alerts#impacted-assets",children:"Alerts Page"})," for more details about this)."]}),"\n",(0,t.jsxs)(i.p,{children:["We've created an intuitive yet familiar control selector which allows you to search for controls based on ",(0,t.jsx)(i.code,{children:"Name"}),", ",(0,t.jsx)(i.code,{children:"Provider"}),", ",(0,t.jsx)(i.code,{children:"Severity"})," and ",(0,t.jsx)(i.code,{children:"Category"}),". You can then click to select one or multiple controls. Notice that you can only select ",(0,t.jsx)(i.code,{children:"Failed"})," controls."]}),"\n",(0,t.jsxs)(i.p,{children:["For example, you can combine this filter with any other to get valuable information of ",(0,t.jsx)(i.em,{children:'"Production AWS Virtual Machines publicly accessible from the Internet"'}),":"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Failed Controls filter UI",src:s(3940).A+"",width:"1094",height:"466"})})]})}function h(e={}){const{wrapper:i}={...(0,n.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},3940:(e,i,s)=>{s.d(i,{A:()=>t});const t=s.p+"assets/images/impacted-by-controls-filter-b4001be2fa89c4df7f9037ca6bb58aa9.png"},8453:(e,i,s)=>{s.d(i,{R:()=>o,x:()=>l});var t=s(6540);const n={},r=t.createContext(n);function o(e){const i=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),t.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7e9b59b3.ae25f63f.js b/assets/js/7e9b59b3.ae25f63f.js deleted file mode 100644 index 7fa16ff..0000000 --- a/assets/js/7e9b59b3.ae25f63f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[621],{9153:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var t=s(4848),n=s(8453);const r={sidebar_position:1},o="Inventory",l={id:"visibility/inventory",title:"Inventory",description:"Once at least one Connector is onboarded, Cyscale will periodically sync it. This will result in an extensive Inventory page that includes all the assets that Cyscale supports. You can check for supported assets on the Connectors page.",source:"@site/docs/visibility/inventory.mdx",sourceDirName:"visibility",slug:"/visibility/inventory",permalink:"/visibility/inventory",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Kubernetes",permalink:"/connectors/kubernetes"},next:{title:"Alerts",permalink:"/security/alerts"}},c={},a=[{value:"Filtering",id:"filtering",level:2},{value:"Security Score",id:"security-score",level:3},{value:"Failed Controls",id:"failed-controls",level:3}];function d(e){const i={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"inventory",children:"Inventory"}),"\n",(0,t.jsx)(i.p,{children:"Once at least one Connector is onboarded, Cyscale will periodically sync it. This will result in an extensive Inventory page that includes all the assets that Cyscale supports. You can check for supported assets on the Connectors page."}),"\n",(0,t.jsx)(i.h2,{id:"filtering",children:"Filtering"}),"\n",(0,t.jsxs)(i.p,{children:["The Inventory will include hundreds or even thousands of assets which will become difficult to manage. For this, Cyscale provides an intuitive filter palette that will allow you to filter by common asset properties like ",(0,t.jsx)(i.code,{children:"Provider"}),", ",(0,t.jsx)(i.code,{children:"Connector"}),", ",(0,t.jsx)(i.code,{children:"Region"}),", ",(0,t.jsx)(i.code,{children:"Asset Category"}),", ",(0,t.jsx)(i.code,{children:"Asset Type"})," and ",(0,t.jsx)(i.code,{children:"Tags"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["Besides these, Cyscale supports filtering by ",(0,t.jsx)(i.code,{children:"Security Score"})," and ",(0,t.jsx)(i.code,{children:"Failed Controls"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"security-score",children:"Security Score"}),"\n",(0,t.jsx)(i.p,{children:"The asset score is a metric that indicates the security impact of an asset. When filtering by score, you can choose from 4 options:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Minimal Risk"}),": 100% score (or no risk detected by Cyscale)"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Low Risk"}),": 76% - 99% score"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Medium Risk"}),": 51% - 75% score"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"High Risk"}),": 0% - 50%"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"This will allow you to check which are the most insecure assets and focus on remediating them to increase your overall security posture."}),"\n",(0,t.jsxs)(i.p,{children:["You can combine this filter with any other to get powerful insights like ",(0,t.jsx)(i.em,{children:'"AWS Virtual Machines with High Risk"'})," or ",(0,t.jsxs)(i.em,{children:['"Assets with ',(0,t.jsx)(i.code,{children:"env: production"}),' tag with Medium Risk"']}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["For more information check ",(0,t.jsx)(i.a,{href:"/security/security-score",children:"Asset Score Page"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"failed-controls",children:"Failed Controls"}),"\n",(0,t.jsxs)(i.p,{children:["Another powerful filter is ",(0,t.jsx)(i.strong,{children:"Failed Controls"}),". This will allow you to filter the inventory based on specific security controls like ",(0,t.jsx)(i.em,{children:'"Ensure VMs are not publicly accessible"'}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["When this filter is applied, the inventory will display all the assets impacted by a control (notice that secondary impacted assets are displayed as well, check ",(0,t.jsx)(i.a,{href:"/security/alerts#impacted-assets",children:"Alerts Page"})," for more details about this)."]}),"\n",(0,t.jsxs)(i.p,{children:["We've created an intuitive yet familiar control selector which allows you to search for controls based on ",(0,t.jsx)(i.code,{children:"Name"}),", ",(0,t.jsx)(i.code,{children:"Provider"}),", ",(0,t.jsx)(i.code,{children:"Severity"})," and ",(0,t.jsx)(i.code,{children:"Category"}),". You can then click to select one or multiple controls. Notice that you can only select ",(0,t.jsx)(i.code,{children:"Failed"})," controls."]}),"\n",(0,t.jsxs)(i.p,{children:["For example, you can combine this filter with any other to get valuable information of ",(0,t.jsx)(i.em,{children:'"Production AWS Virtual Machines publicly accessible from the Internet"'}),":"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Failed Controls filter UI",src:s(3940).A+"",width:"1094",height:"466"})})]})}function h(e={}){const{wrapper:i}={...(0,n.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},3940:(e,i,s)=>{s.d(i,{A:()=>t});const t=s.p+"assets/images/impacted-by-controls-filter-b4001be2fa89c4df7f9037ca6bb58aa9.png"},8453:(e,i,s)=>{s.d(i,{R:()=>o,x:()=>l});var t=s(6540);const n={},r=t.createContext(n);function o(e){const i=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),t.createElement(r.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.09ecd53e.js b/assets/js/935f2afb.09ecd53e.js new file mode 100644 index 0000000..73299c0 --- /dev/null +++ b/assets/js/935f2afb.09ecd53e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Intro","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Overview","href":"/","docId":"intro/overview","unlisted":false},{"type":"link","label":"Dictionary","href":"/intro/dictionary","docId":"intro/dictionary","unlisted":false},{"type":"link","label":"Prerequisites","href":"/intro/prerequisites","docId":"intro/prerequisites","unlisted":false}]},{"type":"link","label":"Getting Started","href":"/getting-started","docId":"getting-started","unlisted":false},{"type":"category","label":"General","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Scopes","href":"/general/scopes","docId":"general/scopes","unlisted":false},{"type":"link","label":"Users","href":"/general/users","docId":"general/users","unlisted":false},{"type":"link","label":"Account Deletion","href":"/general/account-deletion","docId":"general/account-deletion","unlisted":false},{"type":"link","label":"Notifications","href":"/general/notifications","docId":"general/notifications","unlisted":false},{"type":"link","label":"Billing & Usage","href":"/general/billing","docId":"general/billing","unlisted":false}]},{"type":"category","label":"Connectors","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Amazon Web Services","href":"/connectors/aws","docId":"connectors/aws","unlisted":false},{"type":"link","label":"Azure","href":"/connectors/azure","docId":"connectors/azure","unlisted":false},{"type":"link","label":"Google Cloud","href":"/connectors/gcp","docId":"connectors/gcp","unlisted":false},{"type":"link","label":"Alibaba Cloud","href":"/connectors/alibaba","docId":"connectors/alibaba","unlisted":false},{"type":"link","label":"Kubernetes","href":"/connectors/kubernetes","docId":"connectors/kubernetes","unlisted":false},{"type":"link","label":"Okta","href":"/connectors/okta","docId":"connectors/okta","unlisted":false},{"type":"link","label":"Entra ID","href":"/connectors/entra","docId":"connectors/entra","unlisted":false}]},{"type":"category","label":"Visibility","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Inventory","href":"/visibility/inventory","docId":"visibility/inventory","unlisted":false}]},{"type":"category","label":"Security","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Alerts","href":"/security/alerts","docId":"security/alerts","unlisted":false},{"type":"link","label":"Exemptions","href":"/security/exemptions","docId":"security/exemptions","unlisted":false},{"type":"link","label":"Security Score","href":"/security/security-score","docId":"security/security-score","unlisted":false}]},{"type":"category","label":"Compliance","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Standards","href":"/compliance/standards","docId":"compliance/standards","unlisted":false},{"type":"link","label":"Policies","href":"/compliance/policies","docId":"compliance/policies","unlisted":false}]},{"type":"category","label":"Third-Party Licenses","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"MITRE ATT&CK\xae","href":"/licenses/mitre","docId":"licenses/mitre","unlisted":false}]}]},"docs":{"compliance/policies":{"id":"compliance/policies","title":"Policies","description":"Asset Management (Inventory)","sidebar":"tutorialSidebar"},"compliance/standards":{"id":"compliance/standards","title":"Standards","description":"CIS Amazon Web Services (AWS) Foundations Benchmark","sidebar":"tutorialSidebar"},"connectors/alibaba":{"id":"connectors/alibaba","title":"Alibaba Cloud","description":"Cyscale enables you to keep track and secure your Alibaba Cloud (Aliyun) infrastructure natively. You connect your Aliyun account(s) by creating a RAM role that Cyscale can assume to read your Aliyun resources.","sidebar":"tutorialSidebar"},"connectors/aws":{"id":"connectors/aws","title":"Amazon Web Services","description":"Cyscale enables you to keep track and secure your AWS infrastructure natively. You connect your AWS account(s) by creating an IAM role which Cyscale can assume to read your AWS resources.","sidebar":"tutorialSidebar"},"connectors/azure":{"id":"connectors/azure","title":"Azure","description":"Cyscale enables you to keep track and secure your Azure infrastructure natively. You connect your Azure subscription(s) by registering an AAD service principal which Cyscale uses to read your Azure resources.","sidebar":"tutorialSidebar"},"connectors/entra":{"id":"connectors/entra","title":"Entra ID","description":"Cyscale enables you to keep track of Entra entities (users, groups, devices, etc.) and what they have access to, such as Azure resources and even resources from other cloud providers if you are using Entra ID as an IdP for your SSO setup. You connect Cyscale to your Entra ID tenant through an app registration.","sidebar":"tutorialSidebar"},"connectors/gcp":{"id":"connectors/gcp","title":"Google Cloud","description":"Cyscale enables you to keep track and secure your Google Cloud infrastructure natively. You connect your Google Cloud project(s) by creating an IAM service account that Cyscale impersonates to read your Google Cloud resources.","sidebar":"tutorialSidebar"},"connectors/kubernetes":{"id":"connectors/kubernetes","title":"Kubernetes","description":"Cyscale enables you to keep track of and secure your Kubernetes resources natively. You connect your Kubernetes clusters by deploying the Cyscale agent. The agent, at its core, is a Kubernetes controller that listens to changes in your cluster, aggregates them, and sends them to Cyscale.","sidebar":"tutorialSidebar"},"connectors/okta":{"id":"connectors/okta","title":"Okta","description":"Cyscale enables you to keep track and secure your Okta identities. You connect your Okta organization(s) by creating an API Token that Cyscale uses to read your Okta resources.","sidebar":"tutorialSidebar"},"general/account-deletion":{"id":"general/account-deletion","title":"Account Deletion","description":"In the event you want Cyscale to forget everything about you, you have two options:","sidebar":"tutorialSidebar"},"general/billing":{"id":"general/billing","title":"Billing & Usage","description":"While Cyscale is committed to offering a generous free plan and trial version, in case you want continuous support and greater quotas, you will need a paid plan.","sidebar":"tutorialSidebar"},"general/notifications":{"id":"general/notifications","title":"Notifications","description":"An important part of maintaining a good security posture is represented by notifications. Cyscale gives you two notification flavors, personal and via configured notification channels.","sidebar":"tutorialSidebar"},"general/scopes":{"id":"general/scopes","title":"Scopes","description":"The scopes feature allows you to change what Cyscale displays throughout the platform. It helps you cover scenarios such as:","sidebar":"tutorialSidebar"},"general/users":{"id":"general/users","title":"Users","description":"Cyscale is based on two entities: users and accounts. When you register, you create a new Cyscale account with one user - yourself.","sidebar":"tutorialSidebar"},"getting-started":{"id":"getting-started","title":"Getting Started","description":"Sign Up","sidebar":"tutorialSidebar"},"intro/dictionary":{"id":"intro/dictionary","title":"Dictionary","description":"This page is a compilation of the most relevant terms encountered in the cloud security area in general and in the Cyscale Cloud Platform in particular.","sidebar":"tutorialSidebar"},"intro/overview":{"id":"intro/overview","title":"Overview","description":"Welcome to the Cyscale documentation website. Here you can find out more about what the Cyscale Cloud Platform is, how it works, and when to use it.","sidebar":"tutorialSidebar"},"intro/prerequisites":{"id":"intro/prerequisites","title":"Prerequisites","description":"This page describes what you need to fully leverage Cyscale Cloud Platform.","sidebar":"tutorialSidebar"},"licenses/mitre":{"id":"licenses/mitre","title":"MITRE ATT&CK\xae","description":"LICENSE","sidebar":"tutorialSidebar"},"security/alerts":{"id":"security/alerts","title":"Alerts","description":"An alert represents a specific issue of a certain asset. Cyscale creates alerts for assets that are not compliant with the controls it checks.","sidebar":"tutorialSidebar"},"security/exemptions":{"id":"security/exemptions","title":"Exemptions","description":"Exemptions enable you to exclude a specific asset from being assessed against a specific control. Cyscale will consider the asset as passing that specific control.","sidebar":"tutorialSidebar"},"security/security-score":{"id":"security/security-score","title":"Security Score","description":"The security score per asset is a metric that indicates the security impact of an asset. It is calculated based on the controls that are relevant for that asset and any assets that are impacted by the failure. The asset score is a number between 0 and 100, where 0 means that the asset has a high impact on your security posture and 100 means the asset is compliant with all the controls that check it.","sidebar":"tutorialSidebar"},"visibility/inventory":{"id":"visibility/inventory","title":"Inventory","description":"Once at least one Connector is onboarded, Cyscale will periodically sync it. This will result in an extensive Inventory page that includes all the assets that Cyscale supports. You can check for supported assets on the Connectors page.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.8ff42abc.js b/assets/js/935f2afb.8ff42abc.js deleted file mode 100644 index f831169..0000000 --- a/assets/js/935f2afb.8ff42abc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Intro","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Overview","href":"/","docId":"intro/overview","unlisted":false},{"type":"link","label":"Dictionary","href":"/intro/dictionary","docId":"intro/dictionary","unlisted":false},{"type":"link","label":"Prerequisites","href":"/intro/prerequisites","docId":"intro/prerequisites","unlisted":false}]},{"type":"link","label":"Getting Started","href":"/getting-started","docId":"getting-started","unlisted":false},{"type":"category","label":"General","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Scopes","href":"/general/scopes","docId":"general/scopes","unlisted":false},{"type":"link","label":"Users","href":"/general/users","docId":"general/users","unlisted":false},{"type":"link","label":"Account Deletion","href":"/general/account-deletion","docId":"general/account-deletion","unlisted":false},{"type":"link","label":"Notifications","href":"/general/notifications","docId":"general/notifications","unlisted":false},{"type":"link","label":"Billing & Usage","href":"/general/billing","docId":"general/billing","unlisted":false}]},{"type":"category","label":"Connectors","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Amazon Web Services","href":"/connectors/aws","docId":"connectors/aws","unlisted":false},{"type":"link","label":"Azure","href":"/connectors/azure","docId":"connectors/azure","unlisted":false},{"type":"link","label":"Google Cloud","href":"/connectors/gcp","docId":"connectors/gcp","unlisted":false},{"type":"link","label":"Alibaba Cloud","href":"/connectors/alibaba","docId":"connectors/alibaba","unlisted":false},{"type":"link","label":"Okta","href":"/connectors/okta","docId":"connectors/okta","unlisted":false},{"type":"link","label":"Kubernetes","href":"/connectors/kubernetes","docId":"connectors/kubernetes","unlisted":false}]},{"type":"category","label":"Visibility","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Inventory","href":"/visibility/inventory","docId":"visibility/inventory","unlisted":false}]},{"type":"category","label":"Security","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Alerts","href":"/security/alerts","docId":"security/alerts","unlisted":false},{"type":"link","label":"Exemptions","href":"/security/exemptions","docId":"security/exemptions","unlisted":false},{"type":"link","label":"Security Score","href":"/security/security-score","docId":"security/security-score","unlisted":false}]},{"type":"category","label":"Compliance","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Standards","href":"/compliance/standards","docId":"compliance/standards","unlisted":false},{"type":"link","label":"Policies","href":"/compliance/policies","docId":"compliance/policies","unlisted":false}]},{"type":"category","label":"Third-Party Licenses","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"MITRE ATT&CK\xae","href":"/licenses/mitre","docId":"licenses/mitre","unlisted":false}]}]},"docs":{"compliance/policies":{"id":"compliance/policies","title":"Policies","description":"Asset Management (Inventory)","sidebar":"tutorialSidebar"},"compliance/standards":{"id":"compliance/standards","title":"Standards","description":"CIS Amazon Web Services (AWS) Foundations Benchmark","sidebar":"tutorialSidebar"},"connectors/alibaba":{"id":"connectors/alibaba","title":"Alibaba Cloud","description":"Cyscale enables you to keep track and secure your Alibaba Cloud (Aliyun) infrastructure natively. You connect your Aliyun account(s) by creating a RAM role that Cyscale can assume to read your Aliyun resources.","sidebar":"tutorialSidebar"},"connectors/aws":{"id":"connectors/aws","title":"Amazon Web Services","description":"Cyscale enables you to keep track and secure your AWS infrastructure natively. You connect your AWS account(s) by creating an IAM role which Cyscale can assume to read your AWS resources.","sidebar":"tutorialSidebar"},"connectors/azure":{"id":"connectors/azure","title":"Azure","description":"Cyscale enables you to keep track and secure your Azure infrastructure natively. You connect your Azure subscription(s) by registering an AAD service principal which Cyscale uses to read your Azure resources.","sidebar":"tutorialSidebar"},"connectors/gcp":{"id":"connectors/gcp","title":"Google Cloud","description":"Cyscale enables you to keep track and secure your Google Cloud infrastructure natively. You connect your Google Cloud project(s) by creating an IAM service account that Cyscale impersonates to read your Google Cloud resources.","sidebar":"tutorialSidebar"},"connectors/kubernetes":{"id":"connectors/kubernetes","title":"Kubernetes","description":"Cyscale enables you to keep track of and secure your Kubernetes resources natively. You connect your Kubernetes clusters by deploying the Cyscale agent. The agent, at its core, is a Kubernetes controller that listens to changes in your cluster, aggregates them, and sends them to Cyscale.","sidebar":"tutorialSidebar"},"connectors/okta":{"id":"connectors/okta","title":"Okta","description":"Cyscale enables you to keep track and secure your Okta identities. You connect your Okta organization(s) by creating an API Token that Cyscale uses to read your Okta resources.","sidebar":"tutorialSidebar"},"general/account-deletion":{"id":"general/account-deletion","title":"Account Deletion","description":"In the event you want Cyscale to forget everything about you, you have two options:","sidebar":"tutorialSidebar"},"general/billing":{"id":"general/billing","title":"Billing & Usage","description":"While Cyscale is committed to offering a generous free plan and trial version, in case you want continuous support and greater quotas, you will need a paid plan.","sidebar":"tutorialSidebar"},"general/notifications":{"id":"general/notifications","title":"Notifications","description":"An important part of maintaining a good security posture is represented by notifications. Cyscale gives you two notification flavors, personal and via configured notification channels.","sidebar":"tutorialSidebar"},"general/scopes":{"id":"general/scopes","title":"Scopes","description":"The scopes feature allows you to change what Cyscale displays throughout the platform. It helps you cover scenarios such as:","sidebar":"tutorialSidebar"},"general/users":{"id":"general/users","title":"Users","description":"Cyscale is based on two entities: users and accounts. When you register, you create a new Cyscale account with one user - yourself.","sidebar":"tutorialSidebar"},"getting-started":{"id":"getting-started","title":"Getting Started","description":"Sign Up","sidebar":"tutorialSidebar"},"intro/dictionary":{"id":"intro/dictionary","title":"Dictionary","description":"This page is a compilation of the most relevant terms encountered in the cloud security area in general and in the Cyscale Cloud Platform in particular.","sidebar":"tutorialSidebar"},"intro/overview":{"id":"intro/overview","title":"Overview","description":"Welcome to the Cyscale documentation website. Here you can find out more about what the Cyscale Cloud Platform is, how it works, and when to use it.","sidebar":"tutorialSidebar"},"intro/prerequisites":{"id":"intro/prerequisites","title":"Prerequisites","description":"This page describes what you need to fully leverage Cyscale Cloud Platform.","sidebar":"tutorialSidebar"},"licenses/mitre":{"id":"licenses/mitre","title":"MITRE ATT&CK\xae","description":"LICENSE","sidebar":"tutorialSidebar"},"security/alerts":{"id":"security/alerts","title":"Alerts","description":"An alert represents a specific issue of a certain asset. Cyscale creates alerts for assets that are not compliant with the controls it checks.","sidebar":"tutorialSidebar"},"security/exemptions":{"id":"security/exemptions","title":"Exemptions","description":"Exemptions enable you to exclude a specific asset from being assessed against a specific control. Cyscale will consider the asset as passing that specific control.","sidebar":"tutorialSidebar"},"security/security-score":{"id":"security/security-score","title":"Security Score","description":"The security score per asset is a metric that indicates the security impact of an asset. It is calculated based on the controls that are relevant for that asset and any assets that are impacted by the failure. The asset score is a number between 0 and 100, where 0 means that the asset has a high impact on your security posture and 100 means the asset is compliant with all the controls that check it.","sidebar":"tutorialSidebar"},"visibility/inventory":{"id":"visibility/inventory","title":"Inventory","description":"Once at least one Connector is onboarded, Cyscale will periodically sync it. This will result in an extensive Inventory page that includes all the assets that Cyscale supports. You can check for supported assets on the Connectors page.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/a1b0924c.7b575744.js b/assets/js/a1b0924c.7b575744.js new file mode 100644 index 0000000..2bba34e --- /dev/null +++ b/assets/js/a1b0924c.7b575744.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[409],{4705:(e,n,t)=>{t.d(n,{Ay:()=>i});var o=t(4848),r=t(8453);function s(e){const n={p:"p",...(0,r.R)(),...e.components};return(0,o.jsx)(n.p,{children:"By default, all connectors are enabled. If you want to prevent Cyscale from syncing and assessing your assets for a certain connector, you can disable it. The state of the connector in Cyscale will be locked until you enable it again. The assets will not be updated based on your actual resources and assessments will not be performed for them."})}function i(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(s,{...e})}):s(e)}},5792:(e,n,t)=>{t.d(n,{Ay:()=>i});var o=t(4848),r=t(8453);function s(e){const n={p:"p",...(0,r.R)(),...e.components};return(0,o.jsx)(n.p,{children:"You can always trigger a new sync and assessment manually for a given connector (unless the sync is already in progress). This will make Cyscale read all your resources for that particular connector, evaluate the applicable controls, and generate any alerts if necessary."})}function i(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(s,{...e})}):s(e)}},6562:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var o=t(4848),r=t(8453),s=t(4705),i=t(5792);const a={sidebar_position:6},c="Okta",l={id:"connectors/okta",title:"Okta",description:"Cyscale enables you to keep track and secure your Okta identities. You connect your Okta organization(s) by creating an API Token that Cyscale uses to read your Okta resources.",source:"@site/docs/connectors/okta.mdx",sourceDirName:"connectors",slug:"/connectors/okta",permalink:"/connectors/okta",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Kubernetes",permalink:"/connectors/kubernetes"},next:{title:"Entra ID",permalink:"/connectors/entra"}},d={},h=[{value:"Connecting Your Okta Organization",id:"connecting-your-okta-organization",level:2},{value:"Step 1",id:"step-1",level:3},{value:"Step 2",id:"step-2",level:3},{value:"Managing Your Connected Okta Organization(s)",id:"managing-your-connected-okta-organizations",level:2},{value:"Configure",id:"configure",level:3},{value:"Disable/Enable",id:"disableenable",level:3},{value:"Sync",id:"sync",level:3},{value:"Service Coverage",id:"service-coverage",level:2}];function u(e){const n={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"okta",children:"Okta"}),"\n",(0,o.jsxs)(n.p,{children:["Cyscale enables you to keep track and secure your Okta identities. You connect your Okta organization(s) by creating an ",(0,o.jsx)(n.a,{href:"https://help.okta.com/oie/en-us/Content/Topics/Security/API.htm?cshid=Security_API#Security_API",children:"API Token"})," that Cyscale uses to read your Okta resources."]}),"\n",(0,o.jsx)(n.h2,{id:"connecting-your-okta-organization",children:"Connecting Your Okta Organization"}),"\n",(0,o.jsxs)(n.p,{children:["Once you are ready to connect your Okta organization and have the required permissions, press the ",(0,o.jsx)(n.strong,{children:"Create"})," button from the top-right corner, select ",(0,o.jsx)(n.strong,{children:"Add Connector"}),", and choose ",(0,o.jsx)(n.strong,{children:"Okta"}),". You will be greeted with a simple multi-step process."]}),"\n",(0,o.jsx)(n.h3,{id:"step-1",children:"Step 1"}),"\n",(0,o.jsxs)(n.p,{children:["In the first step, you provide a ",(0,o.jsx)(n.strong,{children:"name"})," for your Okta connector to be used throughout Cyscale. This is a plain-text identifier that helps you better manage your resources."]}),"\n",(0,o.jsxs)(n.p,{children:["Here, you also provide the ",(0,o.jsx)(n.strong,{children:"organization URL"})," - ",(0,o.jsx)(n.em,{children:(0,o.jsx)(n.a,{href:"https://my-org.okta.com",children:"https://my-org.okta.com"})})," for example."]}),"\n",(0,o.jsx)(n.h3,{id:"step-2",children:"Step 2"}),"\n",(0,o.jsx)(n.p,{children:"In the second step, you provide the API token that grants Cyscale access. You can find the exact steps to follow in order to create the token within the application."}),"\n",(0,o.jsx)(n.admonition,{title:"Token Permissions",type:"info",children:(0,o.jsx)(n.p,{children:"Okta API tokens inherit the permissions of the user that creates them. Ideally, you would have a separate Okta user with read-only permissions (besides permission to create API Tokens) that you use to create the token."})}),"\n",(0,o.jsx)(n.h2,{id:"managing-your-connected-okta-organizations",children:"Managing Your Connected Okta Organization(s)"}),"\n",(0,o.jsxs)(n.p,{children:["Once connected, your Okta organization(s) will show up in the ",(0,o.jsx)(n.a,{href:"https://app.cyscale.com/connectors",children:"Connectors"})," list. You can perform the following actions:"]}),"\n",(0,o.jsx)(n.h3,{id:"configure",children:"Configure"}),"\n",(0,o.jsx)(n.p,{children:"You can update the following information for your Okta connectors:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Identity Provider Name - this helps you better identify the connector throughout Cyscale"}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Okta API Token"})," - you might want to rotate the token or, in case the token hasn't been used for more than 30 days, you will have to replace it"]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"disableenable",children:"Disable/Enable"}),"\n",(0,o.jsx)(s.Ay,{}),"\n",(0,o.jsx)(n.h3,{id:"sync",children:"Sync"}),"\n",(0,o.jsx)(i.Ay,{}),"\n",(0,o.jsx)(n.h2,{id:"service-coverage",children:"Service Coverage"}),"\n",(0,o.jsx)(n.p,{children:"The Okta resources that Cyscale can handle are listed in the tables below, along with the number of controls that check their configuration:"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"IAM"}),(0,o.jsx)(n.th,{children:"# of Controls"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"User"}),(0,o.jsx)(n.td,{children:"3"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Group"}),(0,o.jsx)(n.td,{children:"0"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Application"}),(0,o.jsx)(n.td,{children:"0"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"PasswordPolicy"}),(0,o.jsx)(n.td,{children:"1"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Policy"}),(0,o.jsx)(n.td,{children:"1"})]})]})]}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Management"}),(0,o.jsx)(n.th,{children:"# of Controls"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"IdentityProvider"}),(0,o.jsx)(n.td,{children:"1"})]})})]})]})}function p(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:()=>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/a1b0924c.f18e70f1.js b/assets/js/a1b0924c.f18e70f1.js deleted file mode 100644 index 80a6f3b..0000000 --- a/assets/js/a1b0924c.f18e70f1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[409],{4705:(e,n,t)=>{t.d(n,{Ay:()=>i});var o=t(4848),r=t(8453);function s(e){const n={p:"p",...(0,r.R)(),...e.components};return(0,o.jsx)(n.p,{children:"By default, all connectors are enabled. If you want to prevent Cyscale from syncing and assessing your assets for a certain connector, you can disable it. The state of the connector in Cyscale will be locked until you enable it again. The assets will not be updated based on your actual resources and assessments will not be performed for them."})}function i(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(s,{...e})}):s(e)}},5792:(e,n,t)=>{t.d(n,{Ay:()=>i});var o=t(4848),r=t(8453);function s(e){const n={p:"p",...(0,r.R)(),...e.components};return(0,o.jsx)(n.p,{children:"You can always trigger a new sync and assessment manually for a given connector (unless the sync is already in progress). This will make Cyscale read all your resources for that particular connector, evaluate the applicable controls, and generate any alerts if necessary."})}function i(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(s,{...e})}):s(e)}},6562:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>h});var o=t(4848),r=t(8453),s=t(4705),i=t(5792);const a={sidebar_position:5},c="Okta",l={id:"connectors/okta",title:"Okta",description:"Cyscale enables you to keep track and secure your Okta identities. You connect your Okta organization(s) by creating an API Token that Cyscale uses to read your Okta resources.",source:"@site/docs/connectors/okta.mdx",sourceDirName:"connectors",slug:"/connectors/okta",permalink:"/connectors/okta",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Alibaba Cloud",permalink:"/connectors/alibaba"},next:{title:"Kubernetes",permalink:"/connectors/kubernetes"}},d={},h=[{value:"Connecting Your Okta Organization",id:"connecting-your-okta-organization",level:2},{value:"Step 1",id:"step-1",level:3},{value:"Step 2",id:"step-2",level:3},{value:"Managing Your Connected Okta Organization(s)",id:"managing-your-connected-okta-organizations",level:2},{value:"Configure",id:"configure",level:3},{value:"Disable/Enable",id:"disableenable",level:3},{value:"Sync",id:"sync",level:3},{value:"Service Coverage",id:"service-coverage",level:2}];function u(e){const n={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"okta",children:"Okta"}),"\n",(0,o.jsxs)(n.p,{children:["Cyscale enables you to keep track and secure your Okta identities. You connect your Okta organization(s) by creating an ",(0,o.jsx)(n.a,{href:"https://help.okta.com/oie/en-us/Content/Topics/Security/API.htm?cshid=Security_API#Security_API",children:"API Token"})," that Cyscale uses to read your Okta resources."]}),"\n",(0,o.jsx)(n.h2,{id:"connecting-your-okta-organization",children:"Connecting Your Okta Organization"}),"\n",(0,o.jsxs)(n.p,{children:["Once you are ready to connect your Okta organization and have the required permissions, press the ",(0,o.jsx)(n.strong,{children:"Create"})," button from the top-right corner, select ",(0,o.jsx)(n.strong,{children:"Add Connector"}),", and choose ",(0,o.jsx)(n.strong,{children:"Okta"}),". You will be greeted with a simple multi-step process."]}),"\n",(0,o.jsx)(n.h3,{id:"step-1",children:"Step 1"}),"\n",(0,o.jsxs)(n.p,{children:["In the first step, you provide a ",(0,o.jsx)(n.strong,{children:"name"})," for your Okta connector to be used throughout Cyscale. This is a plain-text identifier that helps you better manage your resources."]}),"\n",(0,o.jsxs)(n.p,{children:["Here, you also provide the ",(0,o.jsx)(n.strong,{children:"organization URL"})," - ",(0,o.jsx)(n.em,{children:(0,o.jsx)(n.a,{href:"https://my-org.okta.com",children:"https://my-org.okta.com"})})," for example."]}),"\n",(0,o.jsx)(n.h3,{id:"step-2",children:"Step 2"}),"\n",(0,o.jsx)(n.p,{children:"In the second step, you provide the API token that grants Cyscale access. You can find the exact steps to follow in order to create the token within the application."}),"\n",(0,o.jsx)(n.admonition,{title:"Token Permissions",type:"info",children:(0,o.jsx)(n.p,{children:"Okta API tokens inherit the permissions of the user that creates them. Ideally, you would have a separate Okta user with read-only permissions (besides permission to create API Tokens) that you use to create the token."})}),"\n",(0,o.jsx)(n.h2,{id:"managing-your-connected-okta-organizations",children:"Managing Your Connected Okta Organization(s)"}),"\n",(0,o.jsxs)(n.p,{children:["Once connected, your Okta organization(s) will show up in the ",(0,o.jsx)(n.a,{href:"https://app.cyscale.com/connectors",children:"Connectors"})," list. You can perform the following actions:"]}),"\n",(0,o.jsx)(n.h3,{id:"configure",children:"Configure"}),"\n",(0,o.jsx)(n.p,{children:"You can update the following information for your Okta connectors:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Identity Provider Name - this helps you better identify the connector throughout Cyscale"}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Okta API Token"})," - you might want to rotate the token or, in case the token hasn't been used for more than 30 days, you will have to replace it"]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"disableenable",children:"Disable/Enable"}),"\n",(0,o.jsx)(s.Ay,{}),"\n",(0,o.jsx)(n.h3,{id:"sync",children:"Sync"}),"\n",(0,o.jsx)(i.Ay,{}),"\n",(0,o.jsx)(n.h2,{id:"service-coverage",children:"Service Coverage"}),"\n",(0,o.jsx)(n.p,{children:"The Okta resources that Cyscale can handle are listed in the tables below, along with the number of controls that check their configuration:"}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"IAM"}),(0,o.jsx)(n.th,{children:"# of Controls"})]})}),(0,o.jsxs)(n.tbody,{children:[(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"User"}),(0,o.jsx)(n.td,{children:"3"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Group"}),(0,o.jsx)(n.td,{children:"0"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Application"}),(0,o.jsx)(n.td,{children:"0"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"PasswordPolicy"}),(0,o.jsx)(n.td,{children:"1"})]}),(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"Policy"}),(0,o.jsx)(n.td,{children:"1"})]})]})]}),"\n",(0,o.jsxs)(n.table,{children:[(0,o.jsx)(n.thead,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.th,{children:"Management"}),(0,o.jsx)(n.th,{children:"# of Controls"})]})}),(0,o.jsx)(n.tbody,{children:(0,o.jsxs)(n.tr,{children:[(0,o.jsx)(n.td,{children:"IdentityProvider"}),(0,o.jsx)(n.td,{children:"1"})]})})]})]})}function p(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:()=>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/b1b15f33.1e7f5bb0.js b/assets/js/b1b15f33.1e7f5bb0.js deleted file mode 100644 index e476c4a..0000000 --- a/assets/js/b1b15f33.1e7f5bb0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[340],{4705:(e,n,t)=>{t.d(n,{Ay:()=>i});var s=t(4848),r=t(8453);function c(e){const n={p:"p",...(0,r.R)(),...e.components};return(0,s.jsx)(n.p,{children:"By default, all connectors are enabled. If you want to prevent Cyscale from syncing and assessing your assets for a certain connector, you can disable it. The state of the connector in Cyscale will be locked until you enable it again. The assets will not be updated based on your actual resources and assessments will not be performed for them."})}function i(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},5792:(e,n,t)=>{t.d(n,{Ay:()=>i});var s=t(4848),r=t(8453);function c(e){const n={p:"p",...(0,r.R)(),...e.components};return(0,s.jsx)(n.p,{children:"You can always trigger a new sync and assessment manually for a given connector (unless the sync is already in progress). This will make Cyscale read all your resources for that particular connector, evaluate the applicable controls, and generate any alerts if necessary."})}function i(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8829:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>x,frontMatter:()=>l,metadata:()=>d,toc:()=>h});var s=t(4848),r=t(8453),c=t(4705),i=t(5792);const l={sidebar_position:4},o="Alibaba Cloud",d={id:"connectors/alibaba",title:"Alibaba Cloud",description:"Cyscale enables you to keep track and secure your Alibaba Cloud (Aliyun) infrastructure natively. You connect your Aliyun account(s) by creating a RAM role that Cyscale can assume to read your Aliyun resources.",source:"@site/docs/connectors/alibaba.mdx",sourceDirName:"connectors",slug:"/connectors/alibaba",permalink:"/connectors/alibaba",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Google Cloud",permalink:"/connectors/gcp"},next:{title:"Okta",permalink:"/connectors/okta"}},a={},h=[{value:"Connecting Your Alibaba Cloud Account",id:"connecting-your-alibaba-cloud-account",level:2},{value:"Step 1",id:"step-1",level:3},{value:"Step 2",id:"step-2",level:3},{value:"Step 3",id:"step-3",level:3},{value:"Deep Dive on Permissions",id:"deep-dive-on-permissions",level:2},{value:"Managing Your Connected Alibaba Cloud Account(s)",id:"managing-your-connected-alibaba-cloud-accounts",level:2},{value:"Configure",id:"configure",level:3},{value:"Disable/Enable",id:"disableenable",level:3},{value:"Sync",id:"sync",level:3},{value:"Service Coverage",id:"service-coverage",level:2}];function u(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"alibaba-cloud",children:"Alibaba Cloud"}),"\n",(0,s.jsxs)(n.p,{children:["Cyscale enables you to keep track and secure your Alibaba Cloud (Aliyun) infrastructure natively. You connect your Aliyun account(s) by creating a ",(0,s.jsx)(n.a,{href:"https://www.alibabacloud.com/help/en/resource-access-management/latest/ram-role-overview",children:"RAM role"})," that Cyscale can assume to read your Aliyun resources."]}),"\n",(0,s.jsx)(n.h2,{id:"connecting-your-alibaba-cloud-account",children:"Connecting Your Alibaba Cloud Account"}),"\n",(0,s.jsxs)(n.p,{children:["Once you are ready to connect your Aliyun account(s) and have the required permissions, press the ",(0,s.jsx)(n.strong,{children:"Create"})," button from the top-right corner, select ",(0,s.jsx)(n.strong,{children:"Add Connector"}),", and choose ",(0,s.jsx)(n.strong,{children:"Alibaba"}),". You will be greeted with a simple multi-step process."]}),"\n",(0,s.jsx)(n.h3,{id:"step-1",children:"Step 1"}),"\n",(0,s.jsxs)(n.p,{children:["In the first step, you provide a ",(0,s.jsx)(n.strong,{children:"name"})," for your Alibaba Cloud account to be used throughout Cyscale. This is a plain-text identifier that helps you better manage your resources."]}),"\n",(0,s.jsx)(n.h3,{id:"step-2",children:"Step 2"}),"\n",(0,s.jsx)(n.p,{children:"In the second step, you create the Alibaba RAM role. Cyscale provides you with the exact steps to create the role."}),"\n",(0,s.jsxs)(n.admonition,{title:"Access Security",type:"info",children:[(0,s.jsxs)(n.p,{children:["While the permissions you grant to Cyscale are limited to ",(0,s.jsx)(n.strong,{children:"reading"})," the configuration of your cloud resources, you might still be concerned about the security of your Alibaba Cloud account. Setting the trust relationship with the Cyscale Alibaba Cloud account means that any entity from the Cyscale Alibaba Cloud account with the privilege to assume the role from your account can read your Aliyun infrastructure."]}),(0,s.jsx)(n.p,{children:"The Cyscale Alibaba Cloud account (5015623141518445) follows all the best practices and is continuously secured by Cyscale itself."})]}),"\n",(0,s.jsx)(n.h3,{id:"step-3",children:"Step 3"}),"\n",(0,s.jsx)(n.p,{children:"In the third step, the system makes sure the connection to your cloud account can be established and starts the first sync in the background. You can navigate to the cloud account overview page. The page will automatically refresh when the sync and assessment are completed."}),"\n",(0,s.jsx)(n.h2,{id:"deep-dive-on-permissions",children:"Deep Dive on Permissions"}),"\n",(0,s.jsx)(n.p,{children:"Since Cyscale connects to your Aliyun account(s) by assuming the RAM role you create, all permissions are controlled through the policies that are attached to the role."}),"\n",(0,s.jsx)(n.p,{children:"To benefit from everything Cyscale has and will have to offer, the following policy is required:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"ReadOnlyAccess"})," - This system policy grants ",(0,s.jsx)(n.strong,{children:"read"})," access to all Aliyun resources. You can see the permissions it provides in ",(0,s.jsx)(n.a,{href:"https://ram.console.aliyun.com/policies/ReadOnlyAccess/System/content",children:"the Alibaba Cloud Console"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"managing-your-connected-alibaba-cloud-accounts",children:"Managing Your Connected Alibaba Cloud Account(s)"}),"\n",(0,s.jsxs)(n.p,{children:["Once connected, your Aliyun account(s) will show up in the ",(0,s.jsx)(n.a,{href:"https://app.cyscale.com/connectors",children:"Connectors"})," list. From there, you can either use the inline actions or navigate to the overview page of the cloud account. The available options are:"]}),"\n",(0,s.jsx)(n.h3,{id:"configure",children:"Configure"}),"\n",(0,s.jsx)(n.p,{children:"You can update the following information for your Aliyun cloud accounts:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Name - this helps you better identify the cloud account throughout the Cyscale platform"}),"\n",(0,s.jsx)(n.li,{children:"Role ARN - in case you want Cyscale to use another RAM role"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"disableenable",children:"Disable/Enable"}),"\n",(0,s.jsx)(c.Ay,{}),"\n",(0,s.jsx)(n.h3,{id:"sync",children:"Sync"}),"\n",(0,s.jsx)(i.Ay,{}),"\n",(0,s.jsx)(n.h2,{id:"service-coverage",children:"Service Coverage"}),"\n",(0,s.jsx)(n.p,{children:"The Alibaba Cloud resources that Cyscale can handle are listed in the tables below, along with the number of controls that check their configuration:"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Compute"}),(0,s.jsx)(n.th,{children:"# of Controls"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Cluster (ACK)"}),(0,s.jsx)(n.td,{children:"0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Function"}),(0,s.jsx)(n.td,{children:"1"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"FunctionService"}),(0,s.jsx)(n.td,{children:"0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"VM (ECS)"}),(0,s.jsx)(n.td,{children:"2"})]})]})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Databases"}),(0,s.jsx)(n.th,{children:"# of Controls"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"DBInstance (ApsaraDB)"}),(0,s.jsx)(n.td,{children:"7"})]})})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"IAM (RAM)"}),(0,s.jsx)(n.th,{children:"# of Controls"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IAMGroup"}),(0,s.jsx)(n.td,{children:"0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IAMPasswordPolicy"}),(0,s.jsx)(n.td,{children:"8"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IAMPolicy"}),(0,s.jsx)(n.td,{children:"1"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IAMRole"}),(0,s.jsx)(n.td,{children:"0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IAMUser"}),(0,s.jsx)(n.td,{children:"5"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IAMVirtualMFADevice"}),(0,s.jsx)(n.td,{children:"0"})]})]})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Services"}),(0,s.jsx)(n.th,{children:"# of Controls"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"MNSQueue"}),(0,s.jsx)(n.td,{children:"0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"MNSSubscription"}),(0,s.jsx)(n.td,{children:"0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"MNSTopic"}),(0,s.jsx)(n.td,{children:"0"})]})]})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Management"}),(0,s.jsx)(n.th,{children:"# of Controls"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"CloudAccount"}),(0,s.jsx)(n.td,{children:"3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"IAMAccountSummary"}),(0,s.jsx)(n.td,{children:"0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Trail"}),(0,s.jsx)(n.td,{children:"0"})]})]})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Networking"}),(0,s.jsx)(n.th,{children:"# of Controls"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Domain"}),(0,s.jsx)(n.td,{children:"1"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"SecurityGroup"}),(0,s.jsx)(n.td,{children:"3"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"VPC"}),(0,s.jsx)(n.td,{children:"0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"VPCFlowLog"}),(0,s.jsx)(n.td,{children:"0"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"VPCRouteTable"}),(0,s.jsx)(n.td,{children:"0"})]})]})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Operations"}),(0,s.jsx)(n.th,{children:"# of Controls"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Alert"}),(0,s.jsx)(n.td,{children:"0"})]})})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Security"}),(0,s.jsx)(n.th,{children:"# of Controls"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"KMSKey"}),(0,s.jsx)(n.td,{children:"5"})]})})]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Storage"}),(0,s.jsx)(n.th,{children:"# of Controls"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Bucket"}),(0,s.jsx)(n.td,{children:"10"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Disk"}),(0,s.jsx)(n.td,{children:"2"})]})]})]})]})}function x(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var s=t(6540);const r={},c=s.createContext(r);function i(e){const n=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b1b15f33.e2db0f2e.js b/assets/js/b1b15f33.e2db0f2e.js new file mode 100644 index 0000000..6eb4aee --- /dev/null +++ b/assets/js/b1b15f33.e2db0f2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[340],{4705:(e,n,s)=>{s.d(n,{Ay:()=>i});var t=s(4848),r=s(8453);function c(e){const n={p:"p",...(0,r.R)(),...e.components};return(0,t.jsx)(n.p,{children:"By default, all connectors are enabled. If you want to prevent Cyscale from syncing and assessing your assets for a certain connector, you can disable it. The state of the connector in Cyscale will be locked until you enable it again. The assets will not be updated based on your actual resources and assessments will not be performed for them."})}function i(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},5792:(e,n,s)=>{s.d(n,{Ay:()=>i});var t=s(4848),r=s(8453);function c(e){const n={p:"p",...(0,r.R)(),...e.components};return(0,t.jsx)(n.p,{children:"You can always trigger a new sync and assessment manually for a given connector (unless the sync is already in progress). This will make Cyscale read all your resources for that particular connector, evaluate the applicable controls, and generate any alerts if necessary."})}function i(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8829:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>x,frontMatter:()=>l,metadata:()=>d,toc:()=>h});var t=s(4848),r=s(8453),c=s(4705),i=s(5792);const l={sidebar_position:4},o="Alibaba Cloud",d={id:"connectors/alibaba",title:"Alibaba Cloud",description:"Cyscale enables you to keep track and secure your Alibaba Cloud (Aliyun) infrastructure natively. You connect your Aliyun account(s) by creating a RAM role that Cyscale can assume to read your Aliyun resources.",source:"@site/docs/connectors/alibaba.mdx",sourceDirName:"connectors",slug:"/connectors/alibaba",permalink:"/connectors/alibaba",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Google Cloud",permalink:"/connectors/gcp"},next:{title:"Kubernetes",permalink:"/connectors/kubernetes"}},a={},h=[{value:"Connecting Your Alibaba Cloud Account",id:"connecting-your-alibaba-cloud-account",level:2},{value:"Step 1",id:"step-1",level:3},{value:"Step 2",id:"step-2",level:3},{value:"Step 3",id:"step-3",level:3},{value:"Deep Dive on Permissions",id:"deep-dive-on-permissions",level:2},{value:"Managing Your Connected Alibaba Cloud Account(s)",id:"managing-your-connected-alibaba-cloud-accounts",level:2},{value:"Configure",id:"configure",level:3},{value:"Disable/Enable",id:"disableenable",level:3},{value:"Sync",id:"sync",level:3},{value:"Service Coverage",id:"service-coverage",level:2}];function u(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"alibaba-cloud",children:"Alibaba Cloud"}),"\n",(0,t.jsxs)(n.p,{children:["Cyscale enables you to keep track and secure your Alibaba Cloud (Aliyun) infrastructure natively. You connect your Aliyun account(s) by creating a ",(0,t.jsx)(n.a,{href:"https://www.alibabacloud.com/help/en/resource-access-management/latest/ram-role-overview",children:"RAM role"})," that Cyscale can assume to read your Aliyun resources."]}),"\n",(0,t.jsx)(n.h2,{id:"connecting-your-alibaba-cloud-account",children:"Connecting Your Alibaba Cloud Account"}),"\n",(0,t.jsxs)(n.p,{children:["Once you are ready to connect your Aliyun account(s) and have the required permissions, press the ",(0,t.jsx)(n.strong,{children:"Create"})," button from the top-right corner, select ",(0,t.jsx)(n.strong,{children:"Add Connector"}),", and choose ",(0,t.jsx)(n.strong,{children:"Alibaba"}),". You will be greeted with a simple multi-step process."]}),"\n",(0,t.jsx)(n.h3,{id:"step-1",children:"Step 1"}),"\n",(0,t.jsxs)(n.p,{children:["In the first step, you provide a ",(0,t.jsx)(n.strong,{children:"name"})," for your Alibaba Cloud account to be used throughout Cyscale. This is a plain-text identifier that helps you better manage your resources."]}),"\n",(0,t.jsx)(n.h3,{id:"step-2",children:"Step 2"}),"\n",(0,t.jsx)(n.p,{children:"In the second step, you create the Alibaba RAM role. Cyscale provides you with the exact steps to create the role."}),"\n",(0,t.jsxs)(n.admonition,{title:"Access Security",type:"info",children:[(0,t.jsxs)(n.p,{children:["While the permissions you grant to Cyscale are limited to ",(0,t.jsx)(n.strong,{children:"reading"})," the configuration of your cloud resources, you might still be concerned about the security of your Alibaba Cloud account. Setting the trust relationship with the Cyscale Alibaba Cloud account means that any entity from the Cyscale Alibaba Cloud account with the privilege to assume the role from your account can read your Aliyun infrastructure."]}),(0,t.jsx)(n.p,{children:"The Cyscale Alibaba Cloud account (5015623141518445) follows all the best practices and is continuously secured by Cyscale itself."})]}),"\n",(0,t.jsx)(n.h3,{id:"step-3",children:"Step 3"}),"\n",(0,t.jsx)(n.p,{children:"In the third step, the system makes sure the connection to your cloud account can be established and starts the first sync in the background. You can navigate to the cloud account overview page. The page will automatically refresh when the sync and assessment are completed."}),"\n",(0,t.jsx)(n.h2,{id:"deep-dive-on-permissions",children:"Deep Dive on Permissions"}),"\n",(0,t.jsx)(n.p,{children:"Since Cyscale connects to your Aliyun account(s) by assuming the RAM role you create, all permissions are controlled through the policies that are attached to the role."}),"\n",(0,t.jsx)(n.p,{children:"To benefit from everything Cyscale has and will have to offer, the following policy is required:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"ReadOnlyAccess"})," - This system policy grants ",(0,t.jsx)(n.strong,{children:"read"})," access to all Aliyun resources. You can see the permissions it provides in ",(0,t.jsx)(n.a,{href:"https://ram.console.aliyun.com/policies/ReadOnlyAccess/System/content",children:"the Alibaba Cloud Console"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"managing-your-connected-alibaba-cloud-accounts",children:"Managing Your Connected Alibaba Cloud Account(s)"}),"\n",(0,t.jsxs)(n.p,{children:["Once connected, your Aliyun account(s) will show up in the ",(0,t.jsx)(n.a,{href:"https://app.cyscale.com/connectors",children:"Connectors"})," list. From there, you can either use the inline actions or navigate to the overview page of the cloud account. The available options are:"]}),"\n",(0,t.jsx)(n.h3,{id:"configure",children:"Configure"}),"\n",(0,t.jsx)(n.p,{children:"You can update the following information for your Aliyun cloud accounts:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Name - this helps you better identify the cloud account throughout the Cyscale platform"}),"\n",(0,t.jsx)(n.li,{children:"Role ARN - in case you want Cyscale to use another RAM role"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"disableenable",children:"Disable/Enable"}),"\n",(0,t.jsx)(c.Ay,{}),"\n",(0,t.jsx)(n.h3,{id:"sync",children:"Sync"}),"\n",(0,t.jsx)(i.Ay,{}),"\n",(0,t.jsx)(n.h2,{id:"service-coverage",children:"Service Coverage"}),"\n",(0,t.jsx)(n.p,{children:"The Alibaba Cloud resources that Cyscale can handle are listed in the tables below, along with the number of controls that check their configuration:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Compute"}),(0,t.jsx)(n.th,{children:"# of Controls"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Cluster (ACK)"}),(0,t.jsx)(n.td,{children:"0"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Function"}),(0,t.jsx)(n.td,{children:"1"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"FunctionService"}),(0,t.jsx)(n.td,{children:"0"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"VM (ECS)"}),(0,t.jsx)(n.td,{children:"2"})]})]})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Databases"}),(0,t.jsx)(n.th,{children:"# of Controls"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"DBInstance (ApsaraDB)"}),(0,t.jsx)(n.td,{children:"7"})]})})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"IAM (RAM)"}),(0,t.jsx)(n.th,{children:"# of Controls"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"IAMGroup"}),(0,t.jsx)(n.td,{children:"0"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"IAMPasswordPolicy"}),(0,t.jsx)(n.td,{children:"8"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"IAMPolicy"}),(0,t.jsx)(n.td,{children:"1"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"IAMRole"}),(0,t.jsx)(n.td,{children:"0"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"IAMUser"}),(0,t.jsx)(n.td,{children:"5"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"IAMVirtualMFADevice"}),(0,t.jsx)(n.td,{children:"0"})]})]})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Services"}),(0,t.jsx)(n.th,{children:"# of Controls"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"MNSQueue"}),(0,t.jsx)(n.td,{children:"0"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"MNSSubscription"}),(0,t.jsx)(n.td,{children:"0"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"MNSTopic"}),(0,t.jsx)(n.td,{children:"0"})]})]})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Management"}),(0,t.jsx)(n.th,{children:"# of Controls"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"CloudAccount"}),(0,t.jsx)(n.td,{children:"3"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"IAMAccountSummary"}),(0,t.jsx)(n.td,{children:"0"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Trail"}),(0,t.jsx)(n.td,{children:"0"})]})]})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Networking"}),(0,t.jsx)(n.th,{children:"# of Controls"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Domain"}),(0,t.jsx)(n.td,{children:"1"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"SecurityGroup"}),(0,t.jsx)(n.td,{children:"3"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"VPC"}),(0,t.jsx)(n.td,{children:"0"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"VPCFlowLog"}),(0,t.jsx)(n.td,{children:"0"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"VPCRouteTable"}),(0,t.jsx)(n.td,{children:"0"})]})]})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Operations"}),(0,t.jsx)(n.th,{children:"# of Controls"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Alert"}),(0,t.jsx)(n.td,{children:"0"})]})})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Security"}),(0,t.jsx)(n.th,{children:"# of Controls"})]})}),(0,t.jsx)(n.tbody,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"KMSKey"}),(0,t.jsx)(n.td,{children:"5"})]})})]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Storage"}),(0,t.jsx)(n.th,{children:"# of Controls"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Bucket"}),(0,t.jsx)(n.td,{children:"10"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Disk"}),(0,t.jsx)(n.td,{children:"2"})]})]})]})]})}function x(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,s)=>{s.d(n,{R:()=>i,x:()=>l});var t=s(6540);const r={},c=t.createContext(r);function i(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c29cb72e.4f6ae450.js b/assets/js/c29cb72e.4f6ae450.js new file mode 100644 index 0000000..ddd7798 --- /dev/null +++ b/assets/js/c29cb72e.4f6ae450.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[510],{7113:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>i});var t=n(4848),r=n(8453);const o={sidebar_position:5},c="Kubernetes",a={id:"connectors/kubernetes",title:"Kubernetes",description:"Cyscale enables you to keep track of and secure your Kubernetes resources natively. You connect your Kubernetes clusters by deploying the Cyscale agent. The agent, at its core, is a Kubernetes controller that listens to changes in your cluster, aggregates them, and sends them to Cyscale.",source:"@site/docs/connectors/kubernetes.mdx",sourceDirName:"connectors",slug:"/connectors/kubernetes",permalink:"/connectors/kubernetes",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Alibaba Cloud",permalink:"/connectors/alibaba"},next:{title:"Okta",permalink:"/connectors/okta"}},l={},i=[{value:"Connecting Your Kubernetes Clusters",id:"connecting-your-kubernetes-clusters",level:2},{value:"Permissions",id:"permissions",level:2},{value:"Exclusions",id:"exclusions",level:3},{value:"Additional Notes",id:"additional-notes",level:2}];function u(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"kubernetes",children:"Kubernetes"}),"\n",(0,t.jsxs)(s.p,{children:["Cyscale enables you to keep track of and secure your Kubernetes resources natively. You connect your Kubernetes clusters by deploying the ",(0,t.jsx)(s.a,{href:"https://hub.docker.com/repository/docker/cyscaledev/kubernetes-agent/general",children:"Cyscale agent"}),". The agent, at its core, is a ",(0,t.jsx)(s.a,{href:"https://kubernetes.io/docs/concepts/architecture/controller/",children:"Kubernetes controller"})," that listens to changes in your cluster, aggregates them, and sends them to Cyscale."]}),"\n",(0,t.jsx)(s.p,{children:"You can connect any type of Kubernetes cluster, including Amazon EKS, Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), and self-managed clusters. If you connect EKS, AKS, or GKE clusters, and the corresponding cloud environment is also connected, Cyscale will link the resources helping you understand the infrastructure, networking, and IAM context of your Kubernetes workloads."}),"\n",(0,t.jsx)(s.h2,{id:"connecting-your-kubernetes-clusters",children:"Connecting Your Kubernetes Clusters"}),"\n",(0,t.jsxs)(s.p,{children:["You connect your Kubernetes clusters to Cyscale by installing the ",(0,t.jsx)(s.a,{href:"https://github.com/cyscale/helm-charts/tree/3b902c37334cbf05e4a4a82e10f17b77c661d2d6/charts/kubernetes-agent",children:"Helm chart"})," containing the Cyscale Kubernetes agent."]}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsx)(s.li,{children:"Add the Cyscale Helm repository on your machine:"}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-shell",children:"helm repo add cyscale https://cyscale.github.io/helm-charts\nhelm repo update\n"})}),"\n",(0,t.jsxs)(s.ol,{start:"2",children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.strong,{children:"Install/upgrade"})," the chart into the cluster:"]}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-shell",children:"helm upgrade -i cyscale -n cyscale --create-namespace --set config.cyscaleAPIKey= cyscale/kubernetes-agent\n"})}),"\n",(0,t.jsxs)(s.p,{children:["You can choose a different release name (",(0,t.jsx)(s.code,{children:"cyscale"})," by default). This is used as a prefix for the resources that will be created such as the deployment, service account, and secret. You can also choose a different namespace in which to install the agent (",(0,t.jsx)(s.code,{children:"cyscale"})," by default)."]}),"\n",(0,t.jsxs)(s.p,{children:["Cyscale identifies your cluster using the ",(0,t.jsx)(s.strong,{children:"API key"}),". This is a unique value for each Kubernetes connector. You can obtain it only during the cluster onboarding and, if you forgot it or want to rotate it, you can always generate a new one and update your release in the cluster using the same helm command from above."]}),"\n",(0,t.jsx)(s.h2,{id:"permissions",children:"Permissions"}),"\n",(0,t.jsx)(s.p,{children:"The helm chart creates a cluster role and role binding together with a service account."}),"\n",(0,t.jsxs)(s.p,{children:["By default, the agent synchronizes most Kubernetes resources. You can configure this by overwriting the default ",(0,t.jsx)(s.code,{children:"config.resourcesToScan"})," value from the chart. See ",(0,t.jsx)(s.a,{href:"https://github.com/cyscale/helm-charts/blob/main/charts/kubernetes-agent/values.yaml#L11",children:"values.yaml"}),". Changing this will also change the permissions granted by the cluster role."]}),"\n",(0,t.jsx)(s.h3,{id:"exclusions",children:"Exclusions"}),"\n",(0,t.jsxs)(s.p,{children:["The ",(0,t.jsx)(s.code,{children:"permission"})," configuration also allows you to exclude certain resources from being processed and sent to the Cyscale application for scanning."]}),"\n",(0,t.jsxs)(s.p,{children:["The resource exclusion is done for each entry in the ",(0,t.jsx)(s.code,{children:"config.resourcesToScan"})," list, meaning you can granularly exclude resources from any ",(0,t.jsx)(s.strong,{children:"GVK"})," (Group Version Kind; E.g., ",(0,t.jsx)(s.code,{children:"apps/v1/deployments"}),") that you have selected for monitoring."]}),"\n",(0,t.jsx)(s.p,{children:"You can do this in 2 ways:"}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"excludeSelectors"})," - you can define a label selector to be used to exclude assets that match the selector"]}),"\n",(0,t.jsxs)(s.li,{children:[(0,t.jsx)(s.code,{children:"excludeResources"})," - You can add a list of namespaced names of that GVK to be excluded from the selected assets."]}),"\n"]}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-yaml",children:"httpClientTimeout: '5s'\ncyscaleAPIBaseURL: 'https://app.cyscale.com/collect/kubernetes'\ncyscaleAPIKey: ''\nresourcesToScan:\n - group: 'apps'\n version: 'v1'\n kind: 'Deployment'\n excludeSelectors:\n - labelSelector:\n matchExpressions:\n - key: 'testKey'\n operator: 'In'\n values:\n - 'testValue'\n excludeResources:\n - name: 'app-name'\n namespace: 'app-namespace'\n"})}),"\n",(0,t.jsx)(s.h2,{id:"additional-notes",children:"Additional Notes"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["The agent attempts to find out if the cluster is managed based on several heuristics:","\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsxs)(s.li,{children:["It attempts to call the ",(0,t.jsx)(s.a,{href:"https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity#metadata_server",children:"GKE metadata server"})," and retrieve the cluster UID, which then Cyscale will use to link it to the actual GKE cluster asset (if you also connected the corresponding Google Cloud project)"]}),"\n",(0,t.jsxs)(s.li,{children:["It attempts to retrieve the FQDN from the ",(0,t.jsx)(s.code,{children:"KUBERNETES_SERVICE_HOST"})," environment variable set on pods from the kube-system namespace for ",(0,t.jsx)(s.a,{href:"https://learn.microsoft.com/en-us/azure/aks/outbound-rules-control-egress#required-outbound-network-rules-and-fqdns-for-aks-clusters",children:"AKS"}),"."]}),"\n",(0,t.jsxs)(s.li,{children:["It attempts to retrieve the server hostname from the ",(0,t.jsx)(s.code,{children:"kube-proxy"})," configmap for EKS."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.li,{children:"For Kubernetes, Cyscale updates the asset inventory in real-time. However, it still updates the relationships between assets (between Kubernetes assets, between the Kubernetes assets and the cloud provider resources, and with the vulnerabilities) as well as assesses the assets against the controls library at specific time intervals. You can also trigger this process manually at any given time."}),"\n"]})]})}function d(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>c,x:()=>a});var t=n(6540);const r={},o=t.createContext(r);function c(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c29cb72e.9e02b917.js b/assets/js/c29cb72e.9e02b917.js deleted file mode 100644 index 135cdb2..0000000 --- a/assets/js/c29cb72e.9e02b917.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[510],{7113:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>i});var t=s(4848),r=s(8453);const o={sidebar_position:6},c="Kubernetes",a={id:"connectors/kubernetes",title:"Kubernetes",description:"Cyscale enables you to keep track of and secure your Kubernetes resources natively. You connect your Kubernetes clusters by deploying the Cyscale agent. The agent, at its core, is a Kubernetes controller that listens to changes in your cluster, aggregates them, and sends them to Cyscale.",source:"@site/docs/connectors/kubernetes.mdx",sourceDirName:"connectors",slug:"/connectors/kubernetes",permalink:"/connectors/kubernetes",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Okta",permalink:"/connectors/okta"},next:{title:"Inventory",permalink:"/visibility/inventory"}},l={},i=[{value:"Connecting Your Kubernetes Clusters",id:"connecting-your-kubernetes-clusters",level:2},{value:"Permissions",id:"permissions",level:2},{value:"Exclusions",id:"exclusions",level:3},{value:"Additional Notes",id:"additional-notes",level:2}];function u(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"kubernetes",children:"Kubernetes"}),"\n",(0,t.jsxs)(n.p,{children:["Cyscale enables you to keep track of and secure your Kubernetes resources natively. You connect your Kubernetes clusters by deploying the ",(0,t.jsx)(n.a,{href:"https://hub.docker.com/repository/docker/cyscaledev/kubernetes-agent/general",children:"Cyscale agent"}),". The agent, at its core, is a ",(0,t.jsx)(n.a,{href:"https://kubernetes.io/docs/concepts/architecture/controller/",children:"Kubernetes controller"})," that listens to changes in your cluster, aggregates them, and sends them to Cyscale."]}),"\n",(0,t.jsx)(n.p,{children:"You can connect any type of Kubernetes cluster, including Amazon EKS, Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), and self-managed clusters. If you connect EKS, AKS, or GKE clusters, and the corresponding cloud environment is also connected, Cyscale will link the resources helping you understand the infrastructure, networking, and IAM context of your Kubernetes workloads."}),"\n",(0,t.jsx)(n.h2,{id:"connecting-your-kubernetes-clusters",children:"Connecting Your Kubernetes Clusters"}),"\n",(0,t.jsxs)(n.p,{children:["You connect your Kubernetes clusters to Cyscale by installing the ",(0,t.jsx)(n.a,{href:"https://github.com/cyscale/helm-charts/tree/3b902c37334cbf05e4a4a82e10f17b77c661d2d6/charts/kubernetes-agent",children:"Helm chart"})," containing the Cyscale Kubernetes agent."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Add the Cyscale Helm repository on your machine:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"helm repo add cyscale https://cyscale.github.io/helm-charts\nhelm repo update\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Install/upgrade"})," the chart into the cluster:"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"helm upgrade -i cyscale -n cyscale --create-namespace --set config.cyscaleAPIKey= cyscale/kubernetes-agent\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You can choose a different release name (",(0,t.jsx)(n.code,{children:"cyscale"})," by default). This is used as a prefix for the resources that will be created such as the deployment, service account, and secret. You can also choose a different namespace in which to install the agent (",(0,t.jsx)(n.code,{children:"cyscale"})," by default)."]}),"\n",(0,t.jsxs)(n.p,{children:["Cyscale identifies your cluster using the ",(0,t.jsx)(n.strong,{children:"API key"}),". This is a unique value for each Kubernetes connector. You can obtain it only during the cluster onboarding and, if you forgot it or want to rotate it, you can always generate a new one and update your release in the cluster using the same helm command from above."]}),"\n",(0,t.jsx)(n.h2,{id:"permissions",children:"Permissions"}),"\n",(0,t.jsx)(n.p,{children:"The helm chart creates a cluster role and role binding together with a service account."}),"\n",(0,t.jsxs)(n.p,{children:["By default, the agent synchronizes most Kubernetes resources. You can configure this by overwriting the default ",(0,t.jsx)(n.code,{children:"config.resourcesToScan"})," value from the chart. See ",(0,t.jsx)(n.a,{href:"https://github.com/cyscale/helm-charts/blob/main/charts/kubernetes-agent/values.yaml#L11",children:"values.yaml"}),". Changing this will also change the permissions granted by the cluster role."]}),"\n",(0,t.jsx)(n.h3,{id:"exclusions",children:"Exclusions"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"permission"})," configuration also allows you to exclude certain resources from being processed and sent to the Cyscale application for scanning."]}),"\n",(0,t.jsxs)(n.p,{children:["The resource exclusion is done for each entry in the ",(0,t.jsx)(n.code,{children:"config.resourcesToScan"})," list, meaning you can granularly exclude resources from any ",(0,t.jsx)(n.strong,{children:"GVK"})," (Group Version Kind; E.g., ",(0,t.jsx)(n.code,{children:"apps/v1/deployments"}),") that you have selected for monitoring."]}),"\n",(0,t.jsx)(n.p,{children:"You can do this in 2 ways:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"excludeSelectors"})," - you can define a label selector to be used to exclude assets that match the selector"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"excludeResources"})," - You can add a list of namespaced names of that GVK to be excluded from the selected assets."]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"httpClientTimeout: '5s'\ncyscaleAPIBaseURL: 'https://app.cyscale.com/collect/kubernetes'\ncyscaleAPIKey: ''\nresourcesToScan:\n - group: 'apps'\n version: 'v1'\n kind: 'Deployment'\n excludeSelectors:\n - labelSelector:\n matchExpressions:\n - key: 'testKey'\n operator: 'In'\n values:\n - 'testValue'\n excludeResources:\n - name: 'app-name'\n namespace: 'app-namespace'\n"})}),"\n",(0,t.jsx)(n.h2,{id:"additional-notes",children:"Additional Notes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The agent attempts to find out if the cluster is managed based on several heuristics:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["It attempts to call the ",(0,t.jsx)(n.a,{href:"https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity#metadata_server",children:"GKE metadata server"})," and retrieve the cluster UID, which then Cyscale will use to link it to the actual GKE cluster asset (if you also connected the corresponding Google Cloud project)"]}),"\n",(0,t.jsxs)(n.li,{children:["It attempts to retrieve the FQDN from the ",(0,t.jsx)(n.code,{children:"KUBERNETES_SERVICE_HOST"})," environment variable set on pods from the kube-system namespace for ",(0,t.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/aks/outbound-rules-control-egress#required-outbound-network-rules-and-fqdns-for-aks-clusters",children:"AKS"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["It attempts to retrieve the server hostname from the ",(0,t.jsx)(n.code,{children:"kube-proxy"})," configmap for EKS."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"For Kubernetes, Cyscale updates the asset inventory in real-time. However, it still updates the relationships between assets (between Kubernetes assets, between the Kubernetes assets and the cloud provider resources, and with the vulnerabilities) as well as assesses the assets against the controls library at specific time intervals. You can also trigger this process manually at any given time."}),"\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,s)=>{s.d(n,{R:()=>c,x:()=>a});var t=s(6540);const r={},o=t.createContext(r);function c(e){const n=t.useContext(o);return t.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:c(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.9ea34955.js b/assets/js/main.9ea34955.js new file mode 100644 index 0000000..0c899f2 --- /dev/null +++ b/assets/js/main.9ea34955.js @@ -0,0 +1,2 @@ +/*! For license information please see main.9ea34955.js.LICENSE.txt */ +(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});n(6540);var r=n(3259),a=n.n(r),o=n(4054);const i={"0086fdc4":[()=>n.e(34).then(n.bind(n,1980)),"@site/docs/intro/prerequisites.mdx",1980],"03fdc764":[()=>n.e(142).then(n.bind(n,506)),"@site/docs/connectors/aws.mdx",506],"067c81f1":[()=>n.e(373).then(n.bind(n,620)),"@site/docs/connectors/azure.mdx",620],17896441:[()=>Promise.all([n.e(869),n.e(401)]).then(n.bind(n,1152)),"@theme/DocItem",1152],"1e1069eb":[()=>n.e(412).then(n.bind(n,3595)),"@site/docs/connectors/gcp.mdx",3595],"3021cf83":[()=>n.e(857).then(n.bind(n,6942)),"@site/docs/getting-started.mdx",6942],"324884d6":[()=>n.e(626).then(n.t.bind(n,1966,19)),"/home/runner/work/docs.cyscale.com/docs.cyscale.com/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",1966],"5aa91738":[()=>n.e(766).then(n.bind(n,2813)),"@site/docs/security/exemptions.md",2813],"5e95c892":[()=>n.e(647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"71eadb69":[()=>n.e(528).then(n.bind(n,9881)),"@site/docs/connectors/entra.mdx",9881],"73ab9878":[()=>n.e(914).then(n.bind(n,4988)),"@site/docs/security/security-score.mdx",4988],"7c00b1d3":[()=>n.e(617).then(n.bind(n,6188)),"@site/docs/licenses/mitre.md",6188],"7e9b59b3":[()=>n.e(621).then(n.bind(n,9153)),"@site/docs/visibility/inventory.mdx",9153],"89df9c20":[()=>n.e(618).then(n.bind(n,4956)),"@site/docs/compliance/policies.md",4956],"9295ebf6":[()=>n.e(185).then(n.bind(n,5112)),"@site/docs/general/scopes.md",5112],"935f2afb":[()=>n.e(581).then(n.t.bind(n,5610,19)),"~docs/default/version-current-metadata-prop-751.json",5610],a1b0924c:[()=>n.e(409).then(n.bind(n,6562)),"@site/docs/connectors/okta.mdx",6562],a7bd4aaa:[()=>n.e(98).then(n.bind(n,4532)),"@theme/DocVersionRoot",4532],a94703ab:[()=>Promise.all([n.e(869),n.e(48)]).then(n.bind(n,2559)),"@theme/DocRoot",2559],ab1e093f:[()=>n.e(154).then(n.bind(n,2698)),"@site/docs/compliance/standards.md",2698],b1b15f33:[()=>n.e(340).then(n.bind(n,8829)),"@site/docs/connectors/alibaba.mdx",8829],b25eb3ea:[()=>n.e(722).then(n.bind(n,2977)),"@site/docs/general/account-deletion.md",2977],b56514b9:[()=>n.e(599).then(n.bind(n,3014)),"@site/docs/security/alerts.md",3014],c29cb72e:[()=>n.e(510).then(n.bind(n,7113)),"@site/docs/connectors/kubernetes.mdx",7113],d0ad24dd:[()=>n.e(206).then(n.bind(n,7277)),"@site/docs/general/notifications.md",7277],d7eff6da:[()=>n.e(504).then(n.bind(n,766)),"@site/docs/general/billing.mdx",766],deeb38eb:[()=>Promise.all([n.e(869),n.e(579)]).then(n.bind(n,2348)),"@site/docs/intro/overview.mdx",2348],e2309dd3:[()=>n.e(583).then(n.bind(n,8353)),"@site/docs/general/users.md",8353],fed108e9:[()=>n.e(683).then(n.bind(n,1717)),"@site/docs/intro/dictionary.mdx",1717]};var l=n(4848);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(6921),c=n(3102);function d(e,t){if("*"===e)return a()({loading:s,loader:()=>n.e(237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,l.jsx)(c.W,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},f=[],p=[],g=(0,u.A)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),a().Map({loading:s,loader:d,modules:f,webpack:()=>p,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;return delete a.__context,(0,l.jsx)(c.W,{value:i,children:(0,l.jsx)(o,{...a,...n})})}})}const f=[{path:"/",component:d("/","b4d"),routes:[{path:"/",component:d("/","9f2"),routes:[{path:"/",component:d("/","6ac"),routes:[{path:"/compliance/policies",component:d("/compliance/policies","13e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/compliance/standards",component:d("/compliance/standards","c1d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/connectors/alibaba",component:d("/connectors/alibaba","a8a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/connectors/aws",component:d("/connectors/aws","b61"),exact:!0,sidebar:"tutorialSidebar"},{path:"/connectors/azure",component:d("/connectors/azure","069"),exact:!0,sidebar:"tutorialSidebar"},{path:"/connectors/entra",component:d("/connectors/entra","1ac"),exact:!0,sidebar:"tutorialSidebar"},{path:"/connectors/gcp",component:d("/connectors/gcp","8dc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/connectors/kubernetes",component:d("/connectors/kubernetes","d73"),exact:!0,sidebar:"tutorialSidebar"},{path:"/connectors/okta",component:d("/connectors/okta","043"),exact:!0,sidebar:"tutorialSidebar"},{path:"/general/account-deletion",component:d("/general/account-deletion","771"),exact:!0,sidebar:"tutorialSidebar"},{path:"/general/billing",component:d("/general/billing","693"),exact:!0,sidebar:"tutorialSidebar"},{path:"/general/notifications",component:d("/general/notifications","384"),exact:!0,sidebar:"tutorialSidebar"},{path:"/general/scopes",component:d("/general/scopes","b46"),exact:!0,sidebar:"tutorialSidebar"},{path:"/general/users",component:d("/general/users","deb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/getting-started",component:d("/getting-started","78f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/intro/dictionary",component:d("/intro/dictionary","72f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/intro/prerequisites",component:d("/intro/prerequisites","65b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/licenses/mitre",component:d("/licenses/mitre","b4f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/security/alerts",component:d("/security/alerts","3ea"),exact:!0,sidebar:"tutorialSidebar"},{path:"/security/exemptions",component:d("/security/exemptions","f32"),exact:!0,sidebar:"tutorialSidebar"},{path:"/security/security-score",component:d("/security/security-score","efc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/visibility/inventory",component:d("/visibility/inventory","365"),exact:!0,sidebar:"tutorialSidebar"},{path:"/",component:d("/","b25"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>o,x:()=>i});var r=n(6540),a=n(4848);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},8536:(e,t,n)=>{"use strict";var r=n(6540),a=n(5338),o=n(4625),i=n(545),l=n(8193);const s=[n(119),n(6134),n(6294),n(1043)];var u=n(8328),c=n(6347),d=n(2831),f=n(4848);function p(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var g=n(5260),m=n(4586),h=n(6025),y=n(6342),b=n(1003),v=n(2131),w=n(4090),k=n(2967),x=n(440),S=n(1463);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,m.A)(),r=(0,v.o)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,f.jsxs)(g.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,m.A)(),{pathname:r}=(0,c.zy)();return e+(0,x.applyTrailingSlash)((0,h.A)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,f.jsxs)(g.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:a}),(0,f.jsx)("link",{rel:"canonical",href:a})]})}function C(){const{i18n:{currentLocale:e}}=(0,m.A)(),{metadata:t,image:n}=(0,y.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(g.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:w.w})]}),n&&(0,f.jsx)(b.be,{image:n}),(0,f.jsx)(_,{}),(0,f.jsx)(E,{}),(0,f.jsx)(S.A,{tag:k.Cy,locale:e}),(0,f.jsx)(g.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const A=new Map;function T(e){if(A.has(e.pathname))return{...e,pathname:A.get(e.pathname)};if((0,d.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return A.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return A.set(e.pathname,t),{...e,pathname:t}}var N=n(6125),O=n(6988),L=n(205);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const j=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(j,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(c.qh,{location:t,render:()=>e})})}}const D=I,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Q=n(6921);const Z=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Z.has(e))(e))return!1;Z.add(e);const t=(0,d.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(Y).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Q.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee),ne=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(i.vd,{children:(0,f.jsx)(o.Kd,{children:(0,f.jsx)(q,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},l=()=>{if(ne)r.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:n})}));else{const o=a.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{o.render(t)}))}};R(window.location.pathname).then(l)}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>f});var r=n(6540),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"intro/overview","docs":[{"id":"compliance/policies","path":"/compliance/policies","sidebar":"tutorialSidebar"},{"id":"compliance/standards","path":"/compliance/standards","sidebar":"tutorialSidebar"},{"id":"connectors/alibaba","path":"/connectors/alibaba","sidebar":"tutorialSidebar"},{"id":"connectors/aws","path":"/connectors/aws","sidebar":"tutorialSidebar"},{"id":"connectors/azure","path":"/connectors/azure","sidebar":"tutorialSidebar"},{"id":"connectors/entra","path":"/connectors/entra","sidebar":"tutorialSidebar"},{"id":"connectors/gcp","path":"/connectors/gcp","sidebar":"tutorialSidebar"},{"id":"connectors/kubernetes","path":"/connectors/kubernetes","sidebar":"tutorialSidebar"},{"id":"connectors/okta","path":"/connectors/okta","sidebar":"tutorialSidebar"},{"id":"general/account-deletion","path":"/general/account-deletion","sidebar":"tutorialSidebar"},{"id":"general/billing","path":"/general/billing","sidebar":"tutorialSidebar"},{"id":"general/notifications","path":"/general/notifications","sidebar":"tutorialSidebar"},{"id":"general/scopes","path":"/general/scopes","sidebar":"tutorialSidebar"},{"id":"general/users","path":"/general/users","sidebar":"tutorialSidebar"},{"id":"getting-started","path":"/getting-started","sidebar":"tutorialSidebar"},{"id":"intro/dictionary","path":"/intro/dictionary","sidebar":"tutorialSidebar"},{"id":"intro/overview","path":"/","sidebar":"tutorialSidebar"},{"id":"intro/prerequisites","path":"/intro/prerequisites","sidebar":"tutorialSidebar"},{"id":"licenses/mitre","path":"/licenses/mitre","sidebar":"tutorialSidebar"},{"id":"security/alerts","path":"/security/alerts","sidebar":"tutorialSidebar"},{"id":"security/exemptions","path":"/security/exemptions","sidebar":"tutorialSidebar"},{"id":"security/security-score","path":"/security/security-score","sidebar":"tutorialSidebar"},{"id":"visibility/inventory","path":"/visibility/inventory","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/","label":"intro/overview"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"3.1.1","siteVersion":"1.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.1.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.1.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.1.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.1.1"}}}');var u=n(4848);const c={siteConfig:a.A,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},d=r.createContext(c);function f(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(6540),a=n(8193),o=n(5260),i=n(440),l=n(781),s=n(4848);function u(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,s.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,s.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,s.jsx)(c,{error:t})]})}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)(p,{fallback:()=>(0,s.jsx)(u,{error:t,tryAgain:n}),children:[(0,s.jsx)(o.A,{children:(0,s.jsx)("title",{children:"Page Error"})}),(0,s.jsx)(l.A,{children:(0,s.jsx)(u,{error:t,tryAgain:n})})]})}const f=e=>(0,s.jsx)(d,{...e});class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??f)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(545),a=n(4848);function o(e){return(0,a.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});var r=n(6540),a=n(4625),o=n(440),i=n(4586),l=n(6654),s=n(8193),u=n(3427),c=n(6025),d=n(4848);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:g,isActive:m,"data-noBrokenLinkCheck":h,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.A)(),{withBaseUrl:k}=(0,c.h)(),x=(0,u.A)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=f||p;const _=(0,l.A)(E),C=E?.replace("pathname://","");let A=void 0!==C?(T=C,y&&(e=>e.startsWith("/"))(T)?k(T):T):void 0;var T;A&&_&&(A=(0,o.applyTrailingSlash)(A,{trailingSlash:v,baseUrl:w}));const N=(0,r.useRef)(!1),O=n?a.k2:a.N_,L=s.A.canUseIntersectionObserver,P=(0,r.useRef)(),j=()=>{N.current||null==A||(window.docusaurus.preload(A),N.current=!0)};(0,r.useEffect)((()=>(!L&&_&&null!=A&&window.docusaurus.prefetch(A),()=>{L&&P.current&&P.current.disconnect()})),[P,A,L,_]);const R=A?.startsWith("#")??!1,I=!b.target||"_self"===b.target,D=!A||!_||!I||R;return h||!R&&D||x.collectLink(A),b.id&&x.collectAnchor(b.id),D?(0,d.jsx)("a",{ref:S,href:A,...E&&!_&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,d.jsx)(O,{...b,onMouseEnter:j,onTouchStart:j,innerRef:e=>{S.current=e,L&&e&&_&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=A&&window.docusaurus.prefetch(A))}))})),P.current.observe(e))},to:A,...n&&{isActive:m,activeClassName:g}})}const p=r.forwardRef(f)},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>u,T:()=>s});var r=n(6540),a=n(4848);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function l(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return o(l({message:n,id:r}),t)}function u(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=l({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{A:()=>l,h:()=>i});var r=n(6540),a=n(4586),o=n(6654);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.A)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.z)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function i(){return o()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6988);function o(){return(0,r.useContext)(a.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6125);function o(){return(0,r.useContext)(a.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540);const a=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>o});var r=n(6540),a=n(4848);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),l=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:l,children:t})}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>m,vT:()=>f,Gy:()=>c,HW:()=>h,ht:()=>d,r7:()=>g,jh:()=>p});var r=n(6347),a=n(4586),o=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function g(e){const t=d(e);return l(t)}function m(e){const t=d(e),{pathname:n}=(0,r.zy)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(5947),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},6134:(e,t,n)=>{"use strict";n.r(t);var r=n(1765),a=n(4784);!function(e){const{themeConfig:{prism:t}}=a.A,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(2439)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(4164),a=n(1312),o=n(6342),i=n(8774),l=n(3427);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(4848);function c(e){let{as:t,id:n,...c}=e;const d=(0,l.A)(),{navbar:{hideOnScroll:f}}=(0,o.p)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const p=(0,a.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,u.jsxs)(t,{...c,className:(0,r.A)("anchor",f?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":p,title:p,children:"\u200b"})]})}},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(4848);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},781:(e,t,n)=>{"use strict";n.d(t,{A:()=>pt});var r=n(6540),a=n(4164),o=n(7489),i=n(1003),l=n(6347),s=n(1312),u=n(5062),c=n(4848);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,l.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const g=(0,s.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??g,{containerRef:n,onClick:r}=p();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(7559),y=n(4090);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(m,{className:b.skipToContent})}var w=n(6342),k=n(5041);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:a,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.A)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,a.A)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.Mj)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,c.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,c.jsx)("div",{className:A.announcementBarPlaceholder}),(0,c.jsx)(C,{className:A.announcementBarContent}),o&&(0,c.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var N=n(9876),O=n(3104);var L=n(9532),P=n(5600);const j=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,N.M)(),t=(0,P.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,L.ZC)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,c.jsx)(j.Provider,{value:n,children:t})}function I(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function D(){const e=(0,r.useContext)(j);if(!e)throw new L.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(o)})),[a,o,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=D();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,a.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(5293),z=n(2303);function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,z.A)(),l=(0,s.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,s.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,a.A)(U.toggle,t),children:(0,c.jsxs)("button",{className:(0,a.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite",children:[(0,c.jsx)(B,{className:(0,a.A)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)($,{className:(0,a.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const V=r.memo(H),W={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function G(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,M.G)();return r?null:(0,c.jsx)(V,{className:t,buttonClassName:"dark"===n?W.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var q=n(3465);function Y(){return(0,c.jsx)(q.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,N.M)();return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,c.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Q(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(Y,{}),(0,c.jsx)(G,{className:"margin-right--md"}),(0,c.jsx)(K,{})]})}var Z=n(8774),X=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:l,prependBaseUrlToHref:s,...u}=e;const d=(0,X.A)(r),f=(0,X.A)(t),p=(0,X.A)(a,{forcePrependBaseUrl:!0}),g=o&&a&&!(0,J.A)(a),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[o,g&&(0,c.jsx)(te.A,{...l&&{width:12,height:12}})]})};return a?(0,c.jsx)(Z.A,{href:s?p:a,...u,...m}):(0,c.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},...u,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,c.jsx)(ne,{className:(0,a.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,a.A)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,c.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),le=n(9169),se=n(4586);const ue={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[s]),(0,c.jsxs)("div",{ref:s,className:(0,a.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.A)("navbar__link",o),...l,onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:l.children??l.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(_e,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function fe(e){let{items:t,className:n,position:o,onClick:i,...s}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.A)(),{pathname:t}=(0,l.zy)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[u,d,g]),(0,c.jsxs)("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,c.jsx)(ne,{role:"button",className:(0,a.A)(ue.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...s,onClick:e=>{e.preventDefault(),p()},children:s.children??s.label}),(0,c.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:t.map(((e,t)=>(0,r.createElement)(_e,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?fe:de;return(0,c.jsx)(r,{...n})}var ge=n(2131);function me(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const he="iconLanguage_nlXk";var ye=n(418);const be={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,a.A)(n,be.navbarSearchContainer),children:t})}var we=n(4070),ke=n(1754);var xe=n(5597);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.A)(),f=(0,ge.o)(),{search:p,hash:g}=(0,l.zy)(),m=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${g}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,s.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(pe,{...o,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(me,{className:he}),h]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(ve,{className:n,children:(0,c.jsx)(ye.A,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,c.jsx)(i,{className:(0,a.A)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.zK)(r),i=(0,ke.QB)(t,r),l=o?.path===i?.path;return null===i||i.unlisted&&!l?null:(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>l||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.zK)(r),i=(0,ke.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,ke.Vd)(r)[0],i=t??o.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,c.jsx)(oe,{...a,label:i,to:l})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:u,hash:d}=(0,l.zy)(),f=(0,we.zK)(n),p=(0,we.jh)(n),{savePreferredVersionName:g}=(0,xe.g1)(n),m=[...a,...p.map((e=>{const t=f.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===f.activeVersion,onClick:()=>g(e.name)}})),...o],h=(0,ke.Vd)(n)[0],y=t&&m.length>1?(0,s.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,b=t&&m.length>1?void 0:Se(h).path;return m.length<=1?(0,c.jsx)(oe,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,c.jsx)(pe,{...i,mobile:t,label:y,to:b,items:m,isActive:r?()=>!1:void 0})}};function _e(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ee[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(a,{...n})}function Ce(){const e=(0,N.M)(),t=(0,w.p)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(_e,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ae(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(s.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,w.p)().navbar.items.length,t=D();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(Ae,{onClick:()=>t.hide()}),t.content]})}function Ne(){const e=(0,N.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,c.jsx)(F,{header:(0,c.jsx)(Q,{}),primaryMenu:(0,c.jsx)(Ce,{}),secondaryMenu:(0,c.jsx)(Te,{})}):null}const Oe={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Le(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,a.A)("navbar-sidebar__backdrop",e.className)})}function Pe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.p)(),i=(0,N.M)(),{navbarRef:l,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,O.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:l,"aria-label":(0,s.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.A)("navbar","navbar--fixed-top",n&&[Oe.navbarHideable,!d&&Oe.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Le,{onClick:i.toggle}),(0,c.jsx)(Ne,{})]})}var je=n(440);const Re={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function Ie(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function De(e){let{error:t}=e;const n=(0,je.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Re.errorBoundaryError,children:n})}class Fe extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Me="right";function ze(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,N.M)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,s.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,c.jsx)(ze,{})})}const $e={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(Fe,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,c.jsx)(_e,{...e})},t)))})}function He(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Ve(){const e=(0,N.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Me)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,c.jsx)(He,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(Be,{}),(0,c.jsx)(Y,{}),(0,c.jsx)(Ue,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Ue,{items:r}),(0,c.jsx)(G,{className:$e.colorModeToggle}),!a&&(0,c.jsx)(ve,{children:(0,c.jsx)(ye.A,{})})]})})}function We(){return(0,c.jsx)(Pe,{children:(0,c.jsx)(Ve,{})})}function Ge(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,l=(0,X.A)(n),s=(0,X.A)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(Z.A,{className:"footer__link-item",...r?{href:o?s:r}:{to:l},...i,children:[a,r&&!(0,J.A)(r)&&(0,c.jsx)(te.A,{})]})}function qe(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(Ge,{item:t})},t.href??t.to)}function Ye(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(qe,{item:e},t)))})]})}function Ke(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(Ye,{column:e},t)))})}function Qe(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ze(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(Ge,{item:t})}function Xe(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Ze,{item:e}),t.length!==n+1&&(0,c.jsx)(Qe,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(Ke,{columns:t}):(0,c.jsx)(Xe,{links:t})}var et=n(1122);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.h)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(et.A,{className:(0,a.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,c.jsx)(Z.A,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,c.jsx)(nt,{logo:t})}):(0,c.jsx)(nt,{logo:t})}function at(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,c.jsx)("footer",{className:(0,a.A)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function it(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,c.jsx)(ot,{style:a,links:n&&n.length>0&&(0,c.jsx)(Je,{links:n}),logo:r&&(0,c.jsx)(rt,{logo:r}),copyright:t&&(0,c.jsx)(at,{copyright:t})})}const lt=r.memo(it),st=(0,L.fM)([M.a,k.oq,O.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,c.jsx)(P.y_,{children:(0,c.jsx)(N.e,{children:(0,c.jsx)(R,{children:t})})})}]);function ut(e){let{children:t}=e;return(0,c.jsx)(st,{children:t})}var ct=n(1107);function dt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(ct.A,{as:"h1",className:"hero__title",children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(Ie,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(De,{error:t})})]})})})}const ft={mainWrapper:"mainWrapper_z2l0"};function pt(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.J)(),(0,c.jsxs)(ut,{children:[(0,c.jsx)(i.be,{title:l,description:s}),(0,c.jsx)(v,{}),(0,c.jsx)(T,{}),(0,c.jsx)(We,{}),(0,c.jsx)("div",{id:d,className:(0,a.A)(h.G.wrapper.main,ft.mainWrapper,r),children:(0,c.jsx)(o.A,{fallback:e=>(0,c.jsx)(dt,{...e}),children:t})}),!n&&(0,c.jsx)(lt,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(8774),a=n(6025),o=n(4586),i=n(6342),l=n(1122),s=n(4848);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.A)(t.src),dark:(0,a.A)(t.srcDark||t.src)},i=(0,s.jsx)(l.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,s.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,o.A)(),{navbar:{title:n,logo:l}}=(0,i.p)(),{imageClassName:c,titleClassName:d,...f}=e,p=(0,a.A)(l?.href||"/"),g=n?"":t,m=l?.alt??g;return(0,s.jsxs)(r.A,{to:p,...f,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:m,imageClassName:c}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(5260),a=n(4848);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.A,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(6540),a=n(4164),o=n(2303),i=n(5293);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(4848);function u(e){let{className:t,children:n}=e;const u=(0,o.A)(),{colorMode:c}=(0,i.G)();return(0,s.jsx)(s.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.A)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,s.jsx)(r.Fragment,{children:o},e)}))})}function c(e){const{sources:t,className:n,alt:r,...a}=e;return(0,s.jsx)(u,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,s.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>y,u:()=>u});var r=n(6540),a=n(8193),o=n(205),i=n(3109),l=n(4848);const s="ease-in-out";function u(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??s}`,height:`${t}px`}}function l(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return f(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function g(e){if(!a.A.canUseDOM)return e?c:d}function m(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:s,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:o}),(0,l.jsx)(t,{ref:c,style:u?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(f(c.current,n),i?.(n))},className:s,children:a})}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[s,u]=(0,r.useState)(t);return(0,o.A)((()=>{t||i(!0)}),[t]),(0,o.A)((()=>{a&&u(t)}),[a,t]),a?(0,l.jsx)(m,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?h:m;return(0,l.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{Mj:()=>m,oq:()=>g});var r=n(6540),a=n(2303),o=n(9466),i=n(9532),l=n(6342),s=n(4848);const u=(0,o.Wf)("docusaurus.announcement.dismiss"),c=(0,o.Wf)("docusaurus.announcement.id"),d=()=>"true"===u.get(),f=e=>u.set(String(e)),p=r.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.p)(),t=(0,a.A)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{f(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&f(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(p.Provider,{value:n,children:t})}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>y,a:()=>h});var r=n(6540),a=n(8193),o=n(9532),i=n(9466),l=n(6342),s=n(4848);const u=r.createContext(void 0),c="theme",d=(0,i.Wf)(c),f={light:"light",dark:"dark"},p=e=>e===f.dark?f.dark:f.light,g=e=>a.A.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{d.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.p)(),[a,o]=(0,r.useState)(g(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===f.dark},setLightTheme(){i(f.light)},setDarkTheme(){i(f.dark)}})),[a,i])}();return(0,s.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5597:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>y,g1:()=>v});var r=n(6540),a=n(4070),o=n(7065),i=n(6342),l=n(1754),s=n(9532),u=n(9466),c=n(4848);const d=e=>`docs-preferred-version-${e}`,f={save:(e,t,n)=>{(0,u.Wf)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.Wf)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.Wf)(d(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const g=r.createContext(null);function m(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){f.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return(0,c.jsx)(g.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return l.C5?(0,c.jsx)(h,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function b(){const e=(0,r.useContext)(g);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.W);const t=(0,a.ht)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},6588:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,t:()=>u});var r=n(6540),a=n(9532),o=n(4848);const i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(l.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(l);if(e===i)throw new a.dV("DocsSidebarProvider");return e}},2252:(e,t,n)=>{"use strict";n.d(t,{n:()=>l,r:()=>s});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function l(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new a.dV("DocsVersionProvider");return e}},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>p,M:()=>g});var r=n(6540),a=n(5600),o=n(4581),i=n(6347),l=n(9532);function s(e){!function(e){const t=(0,i.W6)(),n=(0,l._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6342),c=n(4848);const d=r.createContext(void 0);function f(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,u.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function p(e){let{children:t}=e;const n=f();return(0,c.jsx)(d.Provider,{value:n,children:t})}function g(){const e=r.useContext(d);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>u,YL:()=>s,y_:()=>l});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function l(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,l]=o,s=(0,a.Be)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>a,J:()=>o});var r=n(6540);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(6540),a=n(8193);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,l]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){l(function(e){if(!a.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},1754:(e,t,n)=>{"use strict";n.d(t,{Nr:()=>p,w8:()=>h,C5:()=>f,B5:()=>E,Vd:()=>k,QB:()=>S,fW:()=>x,OF:()=>w,Y:()=>b});var r=n(6540),a=n(6347),o=n(2831),i=n(4070),l=n(5597),s=n(2252),u=n(6588);function c(e){return Array.from(new Set(e))}var d=n(9169);const f=!!i.Gy;function p(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=p(t);if(e)return e}}(e):void 0:e.href}const g=(e,t)=>void 0!==e&&(0,d.ys)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?g(e.href,t):"category"===e.type&&(g(e.href,t)||m(e.items,t))}function y(e,t){switch(e.type){case"category":return h(e,t)||e.items.some((e=>y(e,t)));case"link":return!e.unlisted||h(e,t);default:return!0}}function b(e,t){return(0,r.useMemo)((()=>e.filter((e=>y(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.ys)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.ys)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function w(){const e=(0,u.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,l.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>c([t,n,a].filter(Boolean))),[t,n,a])}function x(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,a.zy)(),r=(0,s.r)(),i=t.routes,l=i.find((e=>(0,a.B6)(n.pathname,e)));if(!l)return null;const u=l.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,o.v)(i),sidebarName:u,sidebarItems:c}}},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>p,be:()=>d,Jx:()=>g});var r=n(6540),a=n(4164),o=n(5260),i=n(3102);function l(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(6025),u=n(4586);var c=n(4848);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const l=function(e){const{siteConfig:t}=(0,u.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.h)(),f=a?d(a,{absolute:!0}):void 0;return(0,c.jsxs)(o.A,{children:[t&&(0,c.jsx)("title",{children:l}),t&&(0,c.jsx)("meta",{property:"og:title",content:l}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,c.jsx)("meta",{property:"og:image",content:f}),f&&(0,c.jsx)("meta",{name:"twitter:image",content:f}),i]})}const f=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(f),l=(0,a.A)(i,t);return(0,c.jsxs)(f.Provider,{value:l,children:[(0,c.jsx)(o.A,{children:(0,c.jsx)("html",{className:l})}),n]})}function g(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(p,{className:(0,a.A)(r,o),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>u,ZC:()=>l,_q:()=>i,dV:()=>s,fM:()=>c});var r=n(6540),a=n(205),o=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,a.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function l(e){const t=(0,r.useRef)();return(0,a.A)((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(6540),a=n(8328),o=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>f,Tv:()=>u,gk:()=>p});var r=n(6540),a=n(8193),o=n(2303),i=(n(205),n(9532)),l=n(4848);const s=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(s.Provider,{value:n,children:t})}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(d()),o=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,o.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2967:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>r,tU:()=>a});n(4586);const r="default";function a(e,t){return`docs-${e}-${t}`}},9466:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>s});n(6540);const r="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),a=n(6347),o=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.A)(),{pathname:s}=(0,a.zy)(),u=(0,o.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),a=n(6347),o=n(9532);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(4586);function a(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},440:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(2983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>p,sC:()=>T,AO:()=>f});var r=n(8168);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var l=n(1561);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function g(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,m(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var a=p(n);a&&a!==g&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),m=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7022:()=>{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i{!function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(Prism)},2514:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),g=f.indexOf(p);if(g>-1){++a;var m=f.substring(0,g),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(g+p.length),b=[];m&&b.push.apply(b,i([m])),b.push(h),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(Prism)},2439:(e,t,n)=>{var r={"./prism-bash":7022,"./prism-diff":7839,"./prism-json":2514};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=2439},2694:(e,t,n)=>{"use strict";var r=n(6925);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),a=n(9982);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n