From 0e8b17b3c4c327f2138c963a656b6be8f5535744 Mon Sep 17 00:00:00 2001
From: deimosfr
Date: Fri, 16 Aug 2024 09:54:14 +0000
Subject: [PATCH] deploy: 0d8b1b9c1e5ec5ac3f9d68d16e776632698ce937
---
04b748dc.cab420f1.js | 2 ++
....js.LICENSE.txt => 04b748dc.cab420f1.js.LICENSE.txt | 0
04b748dc.db0116f1.js | 2 --
404.html | 4 ++--
c8dfbbe7.2e92f2ea.js => c8dfbbe7.664f42e5.js | 4 ++--
....js.LICENSE.txt => c8dfbbe7.664f42e5.js.LICENSE.txt | 0
community/index.html | 4 ++--
components/index.html | 4 ++--
contact/index.html | 4 ++--
docs/getting-started/basic-concepts/index.html | 4 ++--
docs/getting-started/deploy-my-app/index.html | 4 ++--
docs/getting-started/how-qovery-works/index.html | 4 ++--
docs/getting-started/index.html | 4 ++--
.../create-credentials/index.html | 10 +++++-----
.../aws/cluster-managed-by-qovery/faq/index.html | 4 ++--
.../aws/cluster-managed-by-qovery/index.html | 4 ++--
.../infrastructure/index.html | 10 +++++-----
.../cluster-managed-by-qovery/quickstart/index.html | 4 ++--
docs/getting-started/install-qovery/aws/index.html | 4 ++--
.../install-qovery/aws/self-managed-cluster/index.html | 4 ++--
.../azure/cluster-managed-by-qovery/index.html | 4 ++--
.../cluster-managed-by-qovery/quickstart/index.html | 4 ++--
docs/getting-started/install-qovery/azure/index.html | 4 ++--
.../azure/self-managed-cluster/index.html | 4 ++--
.../create-credentials/index.html | 4 ++--
.../gcp/cluster-managed-by-qovery/index.html | 4 ++--
.../cluster-managed-by-qovery/quickstart/index.html | 4 ++--
docs/getting-started/install-qovery/gcp/index.html | 4 ++--
.../install-qovery/gcp/self-managed-cluster/index.html | 4 ++--
docs/getting-started/install-qovery/index.html | 4 ++--
.../install-qovery/kubernetes/byok-config/index.html | 4 ++--
.../install-qovery/kubernetes/faq/index.html | 4 ++--
.../install-qovery/kubernetes/index.html | 4 ++--
.../install-qovery/kubernetes/quickstart/index.html | 4 ++--
.../kubernetes/validate-installation/index.html | 4 ++--
docs/getting-started/install-qovery/local/index.html | 4 ++--
.../create-credentials/index.html | 4 ++--
.../scaleway/cluster-managed-by-qovery/faq/index.html | 4 ++--
.../scaleway/cluster-managed-by-qovery/index.html | 4 ++--
.../cluster-managed-by-qovery/quickstart/index.html | 4 ++--
.../getting-started/install-qovery/scaleway/index.html | 4 ++--
.../scaleway/self-managed-cluster/index.html | 4 ++--
docs/getting-started/what-is-qovery/index.html | 4 ++--
docs/getting-started/whats-next/index.html | 4 ++--
docs/index.html | 4 ++--
.../backup-and-restore/index.html | 4 ++--
docs/security-and-compliance/encryption/index.html | 4 ++--
docs/security-and-compliance/gdpr/index.html | 4 ++--
docs/security-and-compliance/index.html | 4 ++--
docs/security-and-compliance/soc2/index.html | 4 ++--
docs/useful-resources/faq/index.html | 4 ++--
docs/useful-resources/help-and-support/index.html | 4 ++--
docs/using-qovery/audit-logs/index.html | 4 ++--
.../configuration/advanced-settings/index.html | 4 ++--
.../configuration/application-health-checks/index.html | 4 ++--
docs/using-qovery/configuration/application/index.html | 4 ++--
.../configuration/cloud-service-provider/index.html | 4 ++--
.../configuration/cluster-advanced-settings/index.html | 4 ++--
docs/using-qovery/configuration/clusters/index.html | 4 ++--
docs/using-qovery/configuration/cronjob/index.html | 4 ++--
docs/using-qovery/configuration/database/index.html | 4 ++--
.../configuration/database/mongodb/index.html | 4 ++--
.../configuration/database/mysql/index.html | 4 ++--
.../configuration/database/postgresql/index.html | 4 ++--
.../configuration/database/redis/index.html | 4 ++--
.../configuration/deployment-rule/index.html | 4 ++--
.../configuration/environment-variable/index.html | 4 ++--
docs/using-qovery/configuration/environment/index.html | 4 ++--
docs/using-qovery/configuration/helm/index.html | 4 ++--
docs/using-qovery/configuration/index.html | 4 ++--
.../configuration/lifecycle-job/index.html | 4 ++--
.../configuration/object-storage/index.html | 4 ++--
.../configuration/organization/api-token/index.html | 4 ++--
.../organization/container-registry/index.html | 4 ++--
.../organization/git-repository-access/index.html | 4 ++--
.../organization/helm-repository/index.html | 4 ++--
.../using-qovery/configuration/organization/index.html | 4 ++--
.../organization/labels-annotations/index.html | 4 ++--
.../configuration/organization/members-rbac/index.html | 4 ++--
docs/using-qovery/configuration/project/index.html | 4 ++--
docs/using-qovery/configuration/provider/index.html | 4 ++--
.../configuration/service-health-checks/index.html | 4 ++--
.../using-qovery/configuration/user-account/index.html | 4 ++--
.../deployment/deploying-with-auto-deploy/index.html | 4 ++--
.../deployment/deploying-with-ci-cd/index.html | 4 ++--
.../deployment/deployment-actions/index.html | 4 ++--
.../deployment/deployment-history/index.html | 4 ++--
.../deployment/deployment-pipeline/index.html | 4 ++--
.../deployment/deployment-strategies/index.html | 4 ++--
.../using-qovery/deployment/image-mirroring/index.html | 4 ++--
docs/using-qovery/deployment/index.html | 4 ++--
docs/using-qovery/deployment/logs/index.html | 4 ++--
.../running-and-deployment-statuses/index.html | 4 ++--
docs/using-qovery/index.html | 4 ++--
.../integration/api-integration/index.html | 4 ++--
.../integration/container-registry/index.html | 4 ++--
.../continuous-integration/circle-ci/index.html | 4 ++--
.../continuous-integration/github-actions/index.html | 4 ++--
.../continuous-integration/gitlab-ci/index.html | 4 ++--
.../integration/continuous-integration/index.html | 4 ++--
.../continuous-integration/jenkins/index.html | 4 ++--
.../using-qovery/integration/git-repository/index.html | 4 ++--
.../integration/helm-repository/index.html | 4 ++--
.../integration/iac/cloudformation/index.html | 4 ++--
docs/using-qovery/integration/iac/index.html | 4 ++--
docs/using-qovery/integration/iac/other/index.html | 4 ++--
docs/using-qovery/integration/iac/terraform/index.html | 4 ++--
docs/using-qovery/integration/index.html | 4 ++--
.../integration/monitoring/datadog/index.html | 4 ++--
docs/using-qovery/integration/monitoring/index.html | 4 ++--
.../integration/monitoring/new-relic/index.html | 4 ++--
.../secret-manager/aws-secrets-manager/index.html | 4 ++--
.../integration/secret-manager/doppler/index.html | 4 ++--
.../using-qovery/integration/secret-manager/index.html | 4 ++--
docs/using-qovery/integration/slack/index.html | 4 ++--
.../integration/terraform-provider/index.html | 4 ++--
docs/using-qovery/integration/webhook/index.html | 4 ++--
docs/using-qovery/interface/cli/index.html | 4 ++--
docs/using-qovery/interface/index.html | 4 ++--
docs/using-qovery/interface/rest-api/index.html | 4 ++--
.../interface/terraform-interface/index.html | 4 ++--
docs/using-qovery/interface/web-interface/index.html | 4 ++--
docs/using-qovery/maintenance/index.html | 4 ++--
.../troubleshoot/cluster-troubleshoot/index.html | 4 ++--
docs/using-qovery/troubleshoot/index.html | 4 ++--
.../service-deployment-troubleshoot/index.html | 4 ++--
.../troubleshoot/service-run-troubleshoot/index.html | 4 ++--
files/qovery-iam-aws.json | 6 ++----
guides/advanced/continuous-integration/index.html | 4 ++--
guides/advanced/costs-control/index.html | 4 ++--
guides/advanced/deploy-api-gateway/index.html | 4 ++--
guides/advanced/deploy-aws-services/index.html | 4 ++--
.../deploy-daemonset-with-karpenter/index.html | 4 ++--
guides/advanced/deploy-external-services/index.html | 4 ++--
guides/advanced/deploy-frontend/index.html | 4 ++--
guides/advanced/helm-chart/index.html | 4 ++--
guides/advanced/index.html | 4 ++--
guides/advanced/microservices/index.html | 4 ++--
guides/advanced/migration/index.html | 4 ++--
guides/advanced/monitoring/index.html | 4 ++--
guides/advanced/monorepository/index.html | 4 ++--
guides/advanced/production/index.html | 4 ++--
guides/advanced/seed-database/index.html | 4 ++--
guides/advanced/terraform/index.html | 4 ++--
guides/advanced/use-preview-environments/index.html | 4 ++--
guides/getting-started/create-a-database/index.html | 4 ++--
guides/getting-started/debugging/index.html | 4 ++--
.../deploy-your-first-application/index.html | 4 ++--
guides/getting-started/index.html | 4 ++--
.../managing-environment-variables/index.html | 4 ++--
.../getting-started/setting-custom-domain/index.html | 4 ++--
guides/index.html | 4 ++--
.../guide-amazon-web-services/index.html | 4 ++--
.../guide-google-cloud-platform/index.html | 4 ++--
guides/installation-guide/guide-kubernetes/index.html | 4 ++--
.../guide-microsoft-azure/index.html | 4 ++--
guides/installation-guide/guide-scaleway/index.html | 4 ++--
guides/installation-guide/index.html | 4 ++--
guides/tags/database-postgresql/index.html | 4 ++--
guides/tags/framework-rails/index.html | 4 ++--
guides/tags/index.html | 4 ++--
guides/tags/installation-guide-aws/index.html | 4 ++--
guides/tags/installation-guide-azure/index.html | 4 ++--
guides/tags/installation-guide-gcp/index.html | 4 ++--
guides/tags/installation-guide-kubernetes/index.html | 4 ++--
guides/tags/installation-guide-scaleway/index.html | 4 ++--
guides/tags/language-javascript/index.html | 4 ++--
guides/tags/language-kotlin/index.html | 4 ++--
guides/tags/language-ruby/index.html | 4 ++--
guides/tags/language-rust/index.html | 4 ++--
guides/tags/technology-docker/index.html | 4 ++--
guides/tags/technology-github/index.html | 4 ++--
guides/tags/technology-helm/index.html | 4 ++--
guides/tags/technology-qovery/index.html | 4 ++--
guides/tags/technology-terraform/index.html | 4 ++--
guides/tags/type-guide/index.html | 4 ++--
guides/tags/type-tutorial/index.html | 4 ++--
guides/tutorial/aws-sqs-lambda-with-qovery/index.html | 4 ++--
guides/tutorial/aws-vpc-peering-with-qovery/index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
guides/tutorial/cloudwatch-integration/index.html | 4 ++--
.../index.html | 4 ++--
.../create-a-playground-environment-on-aws/index.html | 4 ++--
.../index.html | 4 ++--
.../customizing-preview-url-with-qovery-cli/index.html | 4 ++--
guides/tutorial/data-seeding-in-postgres/index.html | 4 ++--
guides/tutorial/deploy-jupyterhub-qovery/index.html | 4 ++--
.../index.html | 4 ++--
.../tutorial/deploy-temporal-on-kubernetes/index.html | 4 ++--
guides/tutorial/generate-qovery-api-client/index.html | 4 ++--
.../index.html | 4 ++--
.../github-organization-repository-access/index.html | 4 ++--
guides/tutorial/gitops-with-qovery/index.html | 4 ++--
guides/tutorial/grafana-install/index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
guides/tutorial/how-to-write-a-dockerfile/index.html | 4 ++--
.../index.html | 4 ++--
guides/tutorial/index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../index.html | 4 ++--
.../tutorial/url-shortener-api-with-kotlin/index.html | 4 ++--
.../index.html | 4 ++--
.../tutorial/use-aws-iam-roles-with-qovery/index.html | 4 ++--
guides/tutorial/working-with-git-submodules/index.html | 4 ++--
index.html | 4 ++--
mailing_list/index.html | 4 ++--
runtime~main.9d0e26e5.js => runtime~main.0960be4f.js | 2 +-
server.bundle.js | 7 +++----
224 files changed, 448 insertions(+), 451 deletions(-)
create mode 100644 04b748dc.cab420f1.js
rename 04b748dc.db0116f1.js.LICENSE.txt => 04b748dc.cab420f1.js.LICENSE.txt (100%)
delete mode 100644 04b748dc.db0116f1.js
rename c8dfbbe7.2e92f2ea.js => c8dfbbe7.664f42e5.js (64%)
rename c8dfbbe7.2e92f2ea.js.LICENSE.txt => c8dfbbe7.664f42e5.js.LICENSE.txt (100%)
rename runtime~main.9d0e26e5.js => runtime~main.0960be4f.js (99%)
diff --git a/04b748dc.cab420f1.js b/04b748dc.cab420f1.js
new file mode 100644
index 0000000000..f0e1e3ab4b
--- /dev/null
+++ b/04b748dc.cab420f1.js
@@ -0,0 +1,2 @@
+/*! For license information please see 04b748dc.cab420f1.js.LICENSE.txt */
+(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{157:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return l})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return b})),n.d(t,"default",(function(){return d}));var r=n(1),a=n(9),o=(n(0),n(455)),i=n(462),s=n(454),c=n(459),l={last_modified_on:"2024-08-15",title:"Create Credentials",description:"Generate AWS credentials for Qovery"},u={id:"getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials",title:"Create Credentials",description:"Generate AWS credentials for Qovery",source:"@site/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials.md",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials",sidebar:"docs",previous:{title:"Quickstart",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart"},next:{title:"Infrastructure",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure"}},b=[{value:"Generate AWS credentials",id:"generate-aws-credentials",children:[{value:"Install a new cluster on Qovery",id:"install-a-new-cluster-on-qovery",children:[]}]},{value:"Next steps",id:"next-steps",children:[]}],p={rightToc:b};function d(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"This guide will help you to create your Amazon Web Services (AWS) credentials for Qovery. Those credentials will be used to create a Kubernetes cluster, a dedicated VPC and a few services on your AWS account. Refer to our ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/"}),"Infrastructure")," page to learn more about the infrastructure created by Qovery."),Object(o.b)(c.a,{mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have an AWS account"))),Object(o.b)("h2",{id:"generate-aws-credentials"},"Generate AWS credentials"),Object(o.b)(i.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://console.aws.amazon.com"}),"Connect to your AWS console"))),Object(o.b)("li",null,Object(o.b)("p",null,"Go to ",Object(o.b)("inlineCode",{parentName:"p"},"IAM")),Object(o.b)("img",{src:"/img/aws/aws-my-security-credentials.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Create ",Object(o.b)("inlineCode",{parentName:"p"},"Admins")," group ",Object(o.b)("strong",{parentName:"p"},"without any permissions")),Object(o.b)(s.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"The default name required by Qovery is Admins. If you want to use another name, you have to change the cluster advanced settings ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cluster-advanced-settings/#iam"}),"aws.iam.admin_group")," BEFORE launching the cluster installation process")),Object(o.b)("img",{src:"/img/aws/aws-create-group-1.jpg"}),Object(o.b)("img",{src:"/img/aws/aws-create-group-2.png"}),Object(o.b)("img",{src:"/img/aws/aws-create-group-3.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Create one IAM user called ",Object(o.b)("inlineCode",{parentName:"p"},"qovery"),"."),Object(o.b)("img",{src:"/img/aws/aws-create-user-1.jpg"}),Object(o.b)("img",{src:"/img/aws/aws-create-user-2.png"}),Object(o.b)("img",{src:"/img/aws/aws-create-user-3.jpg"}),Object(o.b)("img",{src:"/img/aws/aws-create-user-4.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Setup",Object(o.b)("a",{href:"/files/qovery-iam-aws.json"}," IAM permissions")," to the ",Object(o.b)("inlineCode",{parentName:"p"},"qovery")," user."),Object(o.b)(s.a,{type:"warning",mdxType:"Alert"},Object(o.b)("a",{href:"/files/qovery-iam-aws.json"},"Download IAM permissions JSON"),Object(o.b)("hr",null),Object(o.b)("p",null,"Or copy it from below:"),Object(o.b)("pre",null,Object(o.b)("code",Object(r.a)({parentName:"pre"},{className:"language-json"}),'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": [\n "iam:*",\n "s3:ListAllMyBuckets",\n "cloudwatch:*",\n "autoscaling:*",\n "application-autoscaling:*",\n "elasticloadbalancing:*",\n "organizations:DescribeAccount",\n "organizations:DescribeOrganization",\n "organizations:DescribeOrganizationalUnit",\n "organizations:DescribePolicy",\n "organizations:ListChildren",\n "organizations:ListParents",\n "organizations:ListPoliciesForTarget",\n "organizations:ListRoots",\n "organizations:ListPolicies",\n "organizations:ListTargetsForPolicy",\n "dynamodb:*",\n "ecr:*",\n "ec2:*",\n "elasticache:*",\n "cloudtrail:LookupEvents",\n "dynamodb:*",\n "tag:GetResources",\n "rds:*",\n "ecs:*",\n "eks:*",\n "logs:*",\n "events:DescribeRule",\n "events:DeleteRule",\n "events:ListRuleNamesByTarget",\n "events:ListTargetsByRule",\n "events:PutRule",\n "events:PutTargets",\n "es:AddTags",\n "es:RemoveTags",\n "es:ListTags",\n "es:DeleteElasticsearchDomain",\n "es:DescribeElasticsearchDomain",\n "es:CreateElasticsearchDomain",\n "events:RemoveTargets",\n "kms:*",\n "events:TagResource",\n "events:ListTagsForResource"\n ],\n "Resource": "*"\n },\n {\n "Action": [\n "s3:*",\n "sqs:*"\n ],\n "Effect": "Allow",\n "Resource": [\n "arn:aws:s3:::qovery*",\n "arn:aws:s3:::qovery*/*",\n "arn:aws:sqs:*:*:qovery*",\n "arn:aws:sqs:*:*:qovery*/*"\n ]\n }\n ]\n}\n'))),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Then, follow the arrows in AWS console to create AWS credentials with required IAM permissions:")),Object(o.b)("img",{src:"/img/aws/aws-add-policy-1.jpg"}),Object(o.b)("img",{src:"/img/aws/aws-add-policy-2.png"}),Object(o.b)("img",{src:"/img/aws/aws-add-policy-3.jpg"}),Object(o.b)("img",{src:"/img/aws/aws-add-policy-4.jpg"})),Object(o.b)("li",null,Object(o.b)("p",null,"To create an ",Object(o.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key"),", go to the Security Credentials tab of the ",Object(o.b)("inlineCode",{parentName:"p"},"Qovery")," user and press ",Object(o.b)("inlineCode",{parentName:"p"},"Create access key")),Object(o.b)("img",{src:"/img/aws/aws-create-credentials-1.png"}),Object(o.b)("img",{src:"/img/aws/aws-create-credentials-2.png"}),Object(o.b)("img",{src:"/img/aws/aws-create-credentials-3.png"}),Object(o.b)("p",null,"You can now save the ",Object(o.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key")),Object(o.b)("img",{src:"/img/aws/aws-create-credentials-4.png"})))),Object(o.b)("p",null,"Well done!! You now have your AWS ",Object(o.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key")," and your permissions are setups; It is time to connect Qovery to your AWS account."),Object(o.b)("h3",{id:"install-a-new-cluster-on-qovery"},"Install a new cluster on Qovery"),Object(o.b)("p",null,"You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization.\nFollow ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"this documentation")," to create a new cluster on your organization."),Object(o.b)("h2",{id:"next-steps"},"Next steps"),Object(o.b)("p",null,"Now you can use your AWS account to deploy your applications on Qovery. You can also link other Cloud providers to your organization."))}d.isMDXComponent=!0},453:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=a.a.createContext({}),u=function(e){var t=a.a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s({},t,{},e)),n},b=function(e){var t=u(e.components);return a.a.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),b=u(n),d=r,m=b["".concat(i,".").concat(d)]||b[d]||p[d]||o;return n?a.a.createElement(m,s({ref:t},l,{components:n})):a.a.createElement(m,s({ref:t},l))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var l=2;l1?arguments[1]:void 0,n),c=i>2?arguments[2]:void 0,l=void 0===c?n:a(c,n);l>s;)t[s++]=e;return t}},458:function(e,t,n){var r=n(28).f,a=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in a||n(10)&&r(a,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},459:function(e,t,n){"use strict";n(458);var r=n(0),a=n.n(r),o=n(454);t.a=function(e){var t=e.children,n=e.name;return a.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},461:function(e,t,n){"use strict";var r=n(465),a=n(51);function o(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,r){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return function(e,n,r){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=a({arrayFormat:"none"},t)),r=Object.create(null);return"string"!=typeof e?r:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(a),o,r)})),Object.keys(r).sort().reduce((function(e,t){var n=r[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):r},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,r){return null===n?[o(t,e),"[",r,"]"].join(""):[o(t,e),"[",o(r,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var a=e[r];if(void 0===a)return"";if(null===a)return o(r,t);if(Array.isArray(a)){var i=[];return a.slice().forEach((function(e){void 0!==e&&i.push(n(r,e,i.length))})),i.join("&")}return o(r,t)+"="+o(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},462:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=(n(453),n(461)),i=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,s="undefined"!=typeof window?window.location:null,c={title:"Tutorial on "+s+" failed",body:"The tutorial on:\n\n"+s+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},l="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(c),u=Object(r.useState)(null),b=u[0],p=u[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!b&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:l,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},465:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]);
\ No newline at end of file
diff --git a/04b748dc.db0116f1.js.LICENSE.txt b/04b748dc.cab420f1.js.LICENSE.txt
similarity index 100%
rename from 04b748dc.db0116f1.js.LICENSE.txt
rename to 04b748dc.cab420f1.js.LICENSE.txt
diff --git a/04b748dc.db0116f1.js b/04b748dc.db0116f1.js
deleted file mode 100644
index 87647487df..0000000000
--- a/04b748dc.db0116f1.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see 04b748dc.db0116f1.js.LICENSE.txt */
-(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{157:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return l})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return b})),n.d(t,"default",(function(){return d}));var r=n(1),a=n(9),o=(n(0),n(455)),i=n(462),s=n(454),c=n(459),l={last_modified_on:"2024-03-21",title:"Create Credentials",description:"Generate AWS credentials for Qovery"},u={id:"getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials",title:"Create Credentials",description:"Generate AWS credentials for Qovery",source:"@site/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials.md",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials",sidebar:"docs",previous:{title:"Quickstart",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart"},next:{title:"Infrastructure",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure"}},b=[{value:"Generate AWS credentials",id:"generate-aws-credentials",children:[{value:"Install a new cluster on Qovery",id:"install-a-new-cluster-on-qovery",children:[]}]},{value:"Next steps",id:"next-steps",children:[]}],p={rightToc:b};function d(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"This guide will help you to create your Amazon Web Services (AWS) credentials for Qovery. Those credentials will be used to create a Kubernetes cluster, a dedicated VPC and a few services on your AWS account. Refer to our ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/"}),"Infrastructure")," page to learn more about the infrastructure created by Qovery."),Object(o.b)(c.a,{mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have an AWS account"))),Object(o.b)("h2",{id:"generate-aws-credentials"},"Generate AWS credentials"),Object(o.b)(i.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://console.aws.amazon.com"}),"Connect to your AWS console"))),Object(o.b)("li",null,Object(o.b)("p",null,"Go to ",Object(o.b)("inlineCode",{parentName:"p"},"IAM")),Object(o.b)("img",{src:"/img/aws/aws-my-security-credentials.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Create ",Object(o.b)("inlineCode",{parentName:"p"},"Admins")," group ",Object(o.b)("strong",{parentName:"p"},"without any permissions")),Object(o.b)(s.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"The default name required by Qovery is Admins. If you want to use another name, you have to change the cluster advanced settings ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cluster-advanced-settings/#iam"}),"aws.iam.admin_group")," BEFORE launching the cluster installation process")),Object(o.b)("img",{src:"/img/aws/aws-create-group-1.jpg"}),Object(o.b)("img",{src:"/img/aws/aws-create-group-2.png"}),Object(o.b)("img",{src:"/img/aws/aws-create-group-3.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Create one IAM user called ",Object(o.b)("inlineCode",{parentName:"p"},"qovery"),"."),Object(o.b)("img",{src:"/img/aws/aws-create-user-1.jpg"}),Object(o.b)("img",{src:"/img/aws/aws-create-user-2.png"}),Object(o.b)("img",{src:"/img/aws/aws-create-user-3.jpg"}),Object(o.b)("img",{src:"/img/aws/aws-create-user-4.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Setup",Object(o.b)("a",{href:"/files/qovery-iam-aws.json"}," IAM permissions")," to the ",Object(o.b)("inlineCode",{parentName:"p"},"qovery")," user."),Object(o.b)(s.a,{type:"warning",mdxType:"Alert"},Object(o.b)("a",{href:"/files/qovery-iam-aws.json"},"Download IAM permissions JSON"),Object(o.b)("hr",null),Object(o.b)("p",null,"Or copy it from below:"),Object(o.b)("pre",null,Object(o.b)("code",Object(r.a)({parentName:"pre"},{className:"language-json"}),'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": [\n "iam:*",\n "s3:ListAllMyBuckets",\n "cloudwatch:*",\n "autoscaling:*",\n "application-autoscaling:*",\n "elasticloadbalancing:*",\n "organizations:DescribeAccount",\n "organizations:DescribeOrganization",\n "organizations:DescribeOrganizationalUnit",\n "organizations:DescribePolicy",\n "organizations:ListChildren",\n "organizations:ListParents",\n "organizations:ListPoliciesForTarget",\n "organizations:ListRoots",\n "organizations:ListPolicies",\n "organizations:ListTargetsForPolicy",\n "dynamodb:*",\n "ecr:*",\n "ec2:*",\n "elasticache:*",\n "cloudtrail:LookupEvents",\n "kms:DescribeKey",\n "kms:ListAliases",\n "dynamodb:*",\n "tag:GetResources",\n "rds:*",\n "ecs:*",\n "eks:*",\n "logs:*",\n "events:DescribeRule",\n "events:DeleteRule",\n "events:ListRuleNamesByTarget",\n "events:ListTargetsByRule",\n "events:PutRule",\n "events:PutTargets",\n "es:AddTags",\n "es:RemoveTags",\n "es:ListTags",\n "es:DeleteElasticsearchDomain",\n "es:DescribeElasticsearchDomain",\n "es:CreateElasticsearchDomain",\n "events:RemoveTargets",\n "kms:*",\n "events:TagResource",\n "events:ListTagsForResource"\n ],\n "Resource": "*"\n },\n {\n "Action": [\n "s3:*",\n "sqs:*"\n ],\n "Effect": "Allow",\n "Resource": [\n "arn:aws:s3:::qovery*",\n "arn:aws:s3:::qovery*/*",\n "arn:aws:sqs:*:*:qovery*",\n "arn:aws:sqs:*:*:qovery*/*"\n ]\n }\n ]\n}\n'))),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Then, follow the arrows in AWS console to create AWS credentials with required IAM permissions:")),Object(o.b)("img",{src:"/img/aws/aws-add-policy-1.jpg"}),Object(o.b)("img",{src:"/img/aws/aws-add-policy-2.png"}),Object(o.b)("img",{src:"/img/aws/aws-add-policy-3.jpg"}),Object(o.b)("img",{src:"/img/aws/aws-add-policy-4.jpg"})),Object(o.b)("li",null,Object(o.b)("p",null,"To create an ",Object(o.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key"),", go to the Security Credentials tab of the ",Object(o.b)("inlineCode",{parentName:"p"},"Qovery")," user and press ",Object(o.b)("inlineCode",{parentName:"p"},"Create access key")),Object(o.b)("img",{src:"/img/aws/aws-create-credentials-1.png"}),Object(o.b)("img",{src:"/img/aws/aws-create-credentials-2.png"}),Object(o.b)("img",{src:"/img/aws/aws-create-credentials-3.png"}),Object(o.b)("p",null,"You can now save the ",Object(o.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key")),Object(o.b)("img",{src:"/img/aws/aws-create-credentials-4.png"})))),Object(o.b)("p",null,"Well done!! You now have your AWS ",Object(o.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key")," and your permissions are setups; It is time to connect Qovery to your AWS account."),Object(o.b)("h3",{id:"install-a-new-cluster-on-qovery"},"Install a new cluster on Qovery"),Object(o.b)("p",null,"You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization.\nFollow ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"this documentation")," to create a new cluster on your organization."),Object(o.b)("h2",{id:"next-steps"},"Next steps"),Object(o.b)("p",null,"Now you can use your AWS account to deploy your applications on Qovery. You can also link other Cloud providers to your organization."))}d.isMDXComponent=!0},453:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=a.a.createContext({}),u=function(e){var t=a.a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s({},t,{},e)),n},b=function(e){var t=u(e.components);return a.a.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),b=u(n),d=r,m=b["".concat(i,".").concat(d)]||b[d]||p[d]||o;return n?a.a.createElement(m,s({ref:t},l,{components:n})):a.a.createElement(m,s({ref:t},l))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var l=2;l1?arguments[1]:void 0,n),c=i>2?arguments[2]:void 0,l=void 0===c?n:a(c,n);l>s;)t[s++]=e;return t}},458:function(e,t,n){var r=n(28).f,a=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in a||n(10)&&r(a,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},459:function(e,t,n){"use strict";n(458);var r=n(0),a=n.n(r),o=n(454);t.a=function(e){var t=e.children,n=e.name;return a.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},461:function(e,t,n){"use strict";var r=n(465),a=n(51);function o(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,r){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return function(e,n,r){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=a({arrayFormat:"none"},t)),r=Object.create(null);return"string"!=typeof e?r:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(a),o,r)})),Object.keys(r).sort().reduce((function(e,t){var n=r[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):r},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,r){return null===n?[o(t,e),"[",r,"]"].join(""):[o(t,e),"[",o(r,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var a=e[r];if(void 0===a)return"";if(null===a)return o(r,t);if(Array.isArray(a)){var i=[];return a.slice().forEach((function(e){void 0!==e&&i.push(n(r,e,i.length))})),i.join("&")}return o(r,t)+"="+o(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},462:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=(n(453),n(461)),i=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,s="undefined"!=typeof window?window.location:null,c={title:"Tutorial on "+s+" failed",body:"The tutorial on:\n\n"+s+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},l="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(c),u=Object(r.useState)(null),b=u[0],p=u[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!b&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:l,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},465:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]);
\ No newline at end of file
diff --git a/404.html b/404.html
index 1a54a9e621..c0ac92ca7f 100644
--- a/404.html
+++ b/404.html
@@ -26,7 +26,7 @@
-
+
@@ -39,7 +39,7 @@
-
+
diff --git a/c8dfbbe7.2e92f2ea.js b/c8dfbbe7.664f42e5.js
similarity index 64%
rename from c8dfbbe7.2e92f2ea.js
rename to c8dfbbe7.664f42e5.js
index bccca8ca7a..28ac8a658c 100644
--- a/c8dfbbe7.2e92f2ea.js
+++ b/c8dfbbe7.664f42e5.js
@@ -1,2 +1,2 @@
-/*! For license information please see c8dfbbe7.2e92f2ea.js.LICENSE.txt */
-(window.webpackJsonp=window.webpackJsonp||[]).push([[238],{390:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return l})),n.d(t,"default",(function(){return b}));var r=n(1),a=n(9),c=(n(0),n(455)),o=(n(462),n(454)),i=(n(459),{last_modified_on:"2023-12-30",title:"Infrastructure",description:"Understand how Qovery deploys your infrastructure on AWS"}),s={id:"getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure",title:"Infrastructure",description:"Understand how Qovery deploys your infrastructure on AWS",source:"@site/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure.md",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure",sidebar:"docs",previous:{title:"Create Credentials",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials"},next:{title:"FAQ",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq"}},l=[{value:"Deployed AWS components",id:"deployed-aws-components",children:[]},{value:"Remove Qovery from your AWS account",id:"remove-qovery-from-your-aws-account",children:[]},{value:"IAM permissions",id:"iam-permissions",children:[]}],u={rightToc:l};function b(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(c.b)("wrapper",Object(r.a)({},u,n,{components:t,mdxType:"MDXLayout"}),Object(c.b)("h3",{id:"deployed-aws-components"},"Deployed AWS components"),Object(c.b)("img",{src:"/img/aws-deployed-infra.png"}),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Network Services"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"A dedicated multi AZ VPC"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Everything Qovery will deploy, will be deployed inside this VPC")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for RDS (multi AZ)"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for RDS")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for DocumentDB (multi AZ)"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for DocumentDB")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for Elasticache (multi AZ)"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for Elasticache")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"An internet gateway for the VPC"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to let containers having access to Internet")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated NLB to redirect 443 traffic to Nginx Ingress"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"High Availability network load balancer, pointing to Nginx Ingress inside EKS")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"NAT gateways (multi AZ) + EIP addresses (multi AZ) + subnet groups + routing table"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"yes"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Useful to get outgoing static IP")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated VPC routes for VPC peering"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"yes"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Useful to perform VPC peering with others VPC on the same or different account")))),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Kubernetes Services"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"A dedicated EKS cluster (multi AZ) for this VPC"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated Kubernetes cluster managed by AWS with nodes (instances type) defined by the customer")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"IAM dedicated user for AWS EBS CSI to access EC2 volumes + a dedicated policy"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to allow EKS cluster having access to volume and mount them to containers")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"IAM dedicated user for AWS IAM User Sync + a dedicated policy"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to sync desired IAM account to EKS to let them connect directly ot Kubernetes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"IAM dedicated user for a Cluster Autoscaler+ a dedicated policy"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to let autoscaler having access to EC2 autoscaling groups")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"IAM dedicated policies for AWS EKS CNI, EC2 container registry + EKS worker nodes"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to let EKS having access to container registry and configure the Kubernetes network")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Security group for EKS remote access (dual authentication: TLS + IAM authenticator)"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to have a secure remote access on the Kubernetes cluster")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Security group for 443 port pointing to Nginx ingress inside EKS"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"External access to web services inside the Kubernetes cluster")))),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Other Services"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Cloudwatch log groups for the EKS cluster"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Kubernetes logs, useful for the AWS and EKS support to diagnose an issue")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated S3 bucket for application's logs + a dedicated IAM account"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Application's logs are stored in an KMS encrypted S3 private bucket")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated S3 bucket to store the kubeconfig"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Kubernetes Kubeconfig is stored in an KMS encrypted, private and versioned bucket, used by Qovery for application's deployment")))),Object(c.b)("h3",{id:"remove-qovery-from-your-aws-account"},"Remove Qovery from your AWS account"),Object(c.b)(o.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,"Your applications and your data will be deleted.")),Object(c.b)("p",null,"To delete Qovery from your AWS account you must be the owner of the Qovery Organization and you have to delete everything in this order:"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"Environments"),Object(c.b)("li",{parentName:"ul"},"Clusters")),Object(c.b)(o.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,'If you remove the access to your AWS account before deleting all the resources on the Qovery platform, you will have to manually delete them\nby yourself by following the guide "I don\'t have Qovery access anymore, how could I delete Qovery deployed resources on my AWS account?"\nin ',Object(c.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/troubleshoot/"}),"this section"),".")),Object(c.b)("h3",{id:"iam-permissions"},"IAM permissions"),Object(c.b)("p",null,"Qovery required IAM permissions to create, update and managed the infrastructure."),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"IAM is used to create IAM roles"),Object(c.b)("li",{parentName:"ul"},"S3 is used to store our generated configuration files"),Object(c.b)("li",{parentName:"ul"},"Cloudwatch, for creating a group stream for each Kubernetes clusters"),Object(c.b)("li",{parentName:"ul"},"Autoscaling for RDS and autoscaling rules for the Kubernetes cluster"),Object(c.b)("li",{parentName:"ul"},"Elastic load-balancing for ELB / ALB / NLB."),Object(c.b)("li",{parentName:"ul"},"DynamoDB to have a distributed lock on infrastructure deployment."),Object(c.b)("li",{parentName:"ul"},"ECR for managing the container registry, create/update/delete repository."),Object(c.b)("li",{parentName:"ul"},"KMS to load and store keys (RDS, SSH, \u2026)"),Object(c.b)("li",{parentName:"ul"},"EKS to create and update the Kubernetes cluster.")),Object(c.b)("details",null,Object(c.b)("summary",null,"Minimum IAM permission set"),Object(c.b)("blockquote",null,"Last update: 2023-06-08"),Object(c.b)(o.a,{type:"alert",mdxType:"Alert"},Object(c.b)("p",null,"This is purely informative and we strongly recommend you to NOT use this configuration within your IAM permissions since it might not\nreflect the latest product update. Please use the one provided in the section above.")),Object(c.b)("p",null,"Below you can find the minimum permission set required by Qovery to run and deploy your applications."),Object(c.b)("p",null,"Policies lengths are limited regarding which object they\u2019re attached to but the one Qovery needs represent more than the maximum (~6000\ncharacters)."),Object(c.b)("p",null,"In order to setup it up, you need to create two IAM groups, each one with one of the following policies."),Object(c.b)("p",null,"Then we must create a user added to each of the previously created groups."),Object(c.b)("p",null,"Once it\u2019s done, the user\u2019s access key and secret key can be used in Qovery."),Object(c.b)("pre",null,Object(c.b)("code",Object(r.a)({parentName:"pre"},{className:"language-json"}),'\n{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": [\n "autoscaling:SuspendProcesses",\n "ec2:AllocateAddress",\n "ec2:AssociateAddress",\n "ec2:AssociateRouteTable",\n "ec2:AttachVolume",\n "ec2:AttachInternetGateway",\n "ec2:AuthorizeSecurityGroupEgress",\n "ec2:AuthorizeSecurityGroupIngress",\n "ec2:CreateInternetGateway",\n "ec2:CreateKeyPair",\n "ec2:CreateLaunchTemplate",\n "ec2:CreateLaunchTemplateVersion",\n "ec2:CreateNatGateway",\n "ec2:CreateRoute",\n "ec2:CreateRouteTable",\n "ec2:CreateSecurityGroup",\n "ec2:CreateSubnet",\n "ec2:CreateTags",\n "ec2:CreateVolume",\n "ec2:CreateVpc",\n "ec2:DeleteInternetGateway",\n "ec2:DeleteKeyPair",\n "ec2:DeleteLaunchTemplate",\n "ec2:DeleteNatGateway",\n "ec2:DeleteRouteTable",\n "ec2:DeleteSecurityGroup",\n "ec2:DeleteSubnet",\n "ec2:DeleteVolume",\n "ec2:DeleteVpc",\n "ec2:DescribeAddresses",\n "ec2:DescribeAvailabilityZones",\n "ec2:DescribeImages",\n "ec2:DescribeInstanceAttribute",\n "ec2:DescribeInstanceCreditSpecifications",\n "ec2:DescribeInstances",\n "ec2:DescribeInstanceTypes",\n "ec2:DescribeInternetGateways",\n "ec2:DescribeKeyPairs",\n "ec2:DescribeLaunchTemplateVersions",\n "ec2:DescribeLaunchTemplates",\n "ec2:DescribeNatGateways",\n "ec2:DescribeNetworkAcls",\n "ec2:DescribeNetworkInterfaces",\n "ec2:DescribeRouteTables",\n "ec2:DescribeSecurityGroupRules",\n "ec2:DescribeSecurityGroups",\n "ec2:DescribeSubnets",\n "ec2:DescribeTags",\n "ec2:DescribeVolumes",\n "ec2:DescribeVpcAttribute",\n "ec2:DescribeVpcClassicLink",\n "ec2:DescribeVpcClassicLinkDnsSupport",\n "ec2:DescribeVpcs",\n "ec2:DetachInternetGateway",\n "ec2:DetachVolume",\n "ec2:DisassociateAddress",\n "ec2:DisassociateRouteTable",\n "ec2:ImportKeyPair",\n "ec2:ModifySubnetAttribute",\n "ec2:ModifyVpcAttribute",\n "ec2:ReleaseAddress",\n "ec2:RevokeSecurityGroupEgress",\n "ec2:RevokeSecurityGroupIngress",\n "ec2:RunInstances",\n "ec2:StopInstances",\n "ec2:TerminateInstances",\n "ecr:BatchCheckLayerAvailability",\n "ecr:BatchGetImage",\n "ecr:CompleteLayerUpload",\n "ecr:CreateRepository",\n "ecr:DeleteRepository",\n "ecr:DescribeImages",\n "ecr:DescribeRepositories",\n "ecr:GetAuthorizationToken",\n "ecr:GetDownloadUrlForLayer",\n "ecr:InitiateLayerUpload",\n "ecr:PutImage",\n "ecr:PutLifecyclePolicy",\n "ecr:TagResource",\n "ecr:UploadLayerPart",\n "eks:CreateAddon",\n "eks:CreateCluster",\n "eks:CreateNodegroup",\n "eks:DeleteAddon",\n "eks:DeleteCluster",\n "eks:DeleteNodegroup",\n "eks:DescribeAddon",\n "eks:DescribeCluster",\n "eks:DescribeNodegroup",\n "eks:DescribeUpdate",\n "eks:ListClusters",\n "eks:ListNodegroups",\n "eks:TagResource",\n "eks:UpdateAddon",\n "eks:UpdateClusterConfig",\n "eks:UpdateClusterVersion",\n "eks:UpdateNodegroupConfig",\n "eks:UpdateNodegroupVersion",\n "elasticache:AddTagsToResource",\n "elasticache:CreateCacheSubnetGroup",\n "elasticache:CreateReplicationGroup",\n "elasticache:DeleteCacheSubnetGroup",\n "elasticache:DeleteReplicationGroup",\n "elasticache:DescribeCacheClusters",\n "elasticache:DescribeCacheSubnetGroups",\n "elasticache:DescribeReplicationGroups",\n "elasticache:ListTagsForResource",\n "elasticloadbalancing:DescribeLoadBalancers",\n "elasticloadbalancing:DescribeTags"\n ],\n "Resource": "*"\n }\n ]\n}\n\n')),Object(c.b)("pre",null,Object(c.b)("code",Object(r.a)({parentName:"pre"},{className:"language-json"}),'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": [\n "iam:AddRoleToInstanceProfile",\n "iam:AttachRolePolicy",\n "iam:AttachUserPolicy",\n "iam:CreateAccessKey",\n "iam:CreateInstanceProfile",\n "iam:CreateOpenIDConnectProvider",\n "iam:CreatePolicy",\n "iam:CreateRole",\n "iam:CreateServiceLinkedRole",\n "iam:CreateUser",\n "iam:DeleteAccessKey",\n "iam:DeleteInstanceProfile",\n "iam:DeleteOpenIDConnectProvider",\n "iam:DeletePolicy",\n "iam:DeleteRole",\n "iam:DeleteRolePolicy",\n "iam:DeleteUser",\n "iam:DeleteUserPolicy",\n "iam:DetachRolePolicy",\n "iam:DetachUserPolicy",\n "iam:GetInstanceProfile",\n "iam:GetOpenIDConnectProvider",\n "iam:GetPolicy",\n "iam:GetPolicyVersion",\n "iam:GetRole",\n "iam:GetRolePolicy",\n "iam:GetUser",\n "iam:GetUserPolicy",\n "iam:ListAccessKeys",\n "iam:ListAttachedRolePolicies",\n "iam:ListAttachedUserPolicies",\n "iam:ListGroupsForUser",\n "iam:ListInstanceProfilesForRole",\n "iam:ListPolicyVersions",\n "iam:ListRolePolicies",\n "iam:PassRole",\n "iam:PutRolePolicy",\n "iam:PutUserPolicy",\n "iam:RemoveRoleFromInstanceProfile",\n "iam:TagInstanceProfile",\n "iam:TagOpenIDConnectProvider",\n "iam:TagRole",\n "iam:TagUser",\n "kms:CreateGrant",\n "kms:CreateKey",\n "kms:Decrypt",\n "kms:DescribeKey",\n "kms:GenerateDataKey",\n "kms:GetKeyPolicy",\n "kms:GetKeyRotationStatus",\n "kms:ListResourceTags",\n "kms:PutKeyPolicy",\n "kms:ScheduleKeyDeletion",\n "kms:TagResource",\n "logs:CreateLogGroup",\n "logs:DeleteLogGroup",\n "logs:DescribeLogGroups",\n "logs:ListTagsLogGroup",\n "logs:PutRetentionPolicy",\n "logs:TagLogGroup",\n "rds:AddTagsToResource",\n "rds:CreateDBCluster",\n "rds:CreateDBInstance",\n "rds:CreateDBParameterGroup",\n "rds:CreateDBSubnetGroup",\n "rds:DeleteDBCluster",\n "rds:DeleteDBInstance",\n "rds:DeleteDBParameterGroup",\n "rds:DeleteDBSubnetGroup",\n "rds:DescribeDBClusters",\n "rds:DescribeDBInstances",\n "rds:DescribeDBParameterGroups",\n "rds:DescribeDBParameters",\n "rds:DescribeDBSubnetGroups",\n "rds:DescribeGlobalClusters",\n "rds:ListTagsForResource",\n "rds:ModifyDBInstance",\n "rds:ModifyDBParameterGroup",\n "rds:StartDBCluster",\n "rds:StartDBInstance",\n "rds:StopDBCluster",\n "rds:StopDBInstance",\n "s3:CreateBucket",\n "s3:DeleteBucket",\n "s3:DeleteObject",\n "s3:DeleteObjectVersion",\n "s3:DeleteBucketPolicy",\n "s3:GetAccelerateConfiguration",\n "s3:GetBucketAcl",\n "s3:GetBucketCORS",\n "s3:GetBucketLogging",\n "s3:GetBucketObjectLockConfiguration",\n "s3:GetBucketOwnershipControls",\n "s3:GetBucketPolicy",\n "s3:GetBucketPublicAccessBlock",\n "s3:GetBucketRequestPayment",\n "s3:GetBucketTagging",\n "s3:GetBucketVersioning",\n "s3:GetBucketWebsite",\n "s3:GetEncryptionConfiguration",\n "s3:GetLifecycleConfiguration",\n "s3:GetObject",\n "s3:GetReplicationConfiguration",\n "s3:ListAccessPoints",\n "s3:ListAllMyBuckets",\n "s3:ListBucket",\n "s3:ListBucketMultipartUploads",\n "s3:ListBucketVersions",\n "s3:ListMultiRegionAccessPoints",\n "s3:ListMultipartUploadParts",\n "s3:ListStorageLensConfigurations",\n "s3:PutBucketAcl",\n "s3:PutBucketOwnershipControls",\n "s3:PutBucketPolicy",\n "s3:PutBucketPublicAccessBlock",\n "s3:PutBucketTagging",\n "s3:PutBucketVersioning",\n "s3:PutEncryptionConfiguration",\n "s3:PutLifecycleConfiguration",\n "s3:PutObject",\n "s3:PutObjectRetention",\n "secretsmanager:CreateSecret",\n "secretsmanager:TagResource",\n "sts:GetCallerIdentity"\n ],\n "Resource": "*"\n }\n ]\n}\n'))))}b.isMDXComponent=!0},453:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=a.a.createContext({}),u=function(e){var t=a.a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i({},t,{},e)),n},b=function(e){var t=u(e.components);return a.a.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},p=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,c=e.originalType,o=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),b=u(n),p=r,m=b["".concat(o,".").concat(p)]||b[p]||d[p]||c;return n?a.a.createElement(m,i({ref:t},l,{components:n})):a.a.createElement(m,i({ref:t},l))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var c=n.length,o=new Array(c);o[0]=p;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var l=2;l1?arguments[1]:void 0,n),s=o>2?arguments[2]:void 0,l=void 0===s?n:a(s,n);l>i;)t[i++]=e;return t}},458:function(e,t,n){var r=n(28).f,a=Function.prototype,c=/^\s*function ([^ (]*)/;"name"in a||n(10)&&r(a,"name",{configurable:!0,get:function(){try{return(""+this).match(c)[1]}catch(e){return""}}})},459:function(e,t,n){"use strict";n(458);var r=n(0),a=n.n(r),c=n(454);t.a=function(e){var t=e.children,n=e.name;return a.a.createElement(c.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},461:function(e,t,n){"use strict";var r=n(465),a=n(51);function c(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,r){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return function(e,n,r){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=a({arrayFormat:"none"},t)),r=Object.create(null);return"string"!=typeof e?r:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),c=t.length>0?t.join("="):void 0;c=void 0===c?null:decodeURIComponent(c),n(decodeURIComponent(a),c,r)})),Object.keys(r).sort().reduce((function(e,t){var n=r[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):r},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,r){return null===n?[c(t,e),"[",r,"]"].join(""):[c(t,e),"[",c(r,e),"]=",c(n,e)].join("")};case"bracket":return function(t,n){return null===n?c(t,e):[c(t,e),"[]=",c(n,e)].join("")};default:return function(t,n){return null===n?c(t,e):[c(t,e),"=",c(n,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var a=e[r];if(void 0===a)return"";if(null===a)return c(r,t);if(Array.isArray(a)){var o=[];return a.slice().forEach((function(e){void 0!==e&&o.push(n(r,e,o.length))})),o.join("&")}return c(r,t)+"="+c(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},462:function(e,t,n){"use strict";var r=n(0),a=n.n(r),c=(n(453),n(461)),o=n.n(c);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,c=e.hideFeedbackQuestion,i="undefined"!=typeof window?window.location:null,s={title:"Tutorial on "+i+" failed",body:"The tutorial on:\n\n"+i+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},l="https://github.com/qovery/documentation/issues/new?"+o.a.stringify(s),u=Object(r.useState)(null),b=u[0],d=u[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!c&&!b&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return d("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:l,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},465:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]);
\ No newline at end of file
+/*! For license information please see c8dfbbe7.664f42e5.js.LICENSE.txt */
+(window.webpackJsonp=window.webpackJsonp||[]).push([[238],{390:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return l})),n.d(t,"default",(function(){return b}));var r=n(1),a=n(9),c=(n(0),n(455)),o=(n(462),n(454)),i=(n(459),{last_modified_on:"2024-08-15",title:"Infrastructure",description:"Understand how Qovery deploys your infrastructure on AWS"}),s={id:"getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure",title:"Infrastructure",description:"Understand how Qovery deploys your infrastructure on AWS",source:"@site/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure.md",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure",sidebar:"docs",previous:{title:"Create Credentials",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials"},next:{title:"FAQ",permalink:"/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq"}},l=[{value:"Deployed AWS components",id:"deployed-aws-components",children:[]},{value:"Remove Qovery from your AWS account",id:"remove-qovery-from-your-aws-account",children:[]},{value:"IAM permissions",id:"iam-permissions",children:[]}],u={rightToc:l};function b(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(c.b)("wrapper",Object(r.a)({},u,n,{components:t,mdxType:"MDXLayout"}),Object(c.b)("h3",{id:"deployed-aws-components"},"Deployed AWS components"),Object(c.b)("img",{src:"/img/aws-deployed-infra.png"}),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Network Services"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"A dedicated multi AZ VPC"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Everything Qovery will deploy, will be deployed inside this VPC")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for RDS (multi AZ)"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for RDS")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for DocumentDB (multi AZ)"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for DocumentDB")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for Elasticache (multi AZ)"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for Elasticache")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"An internet gateway for the VPC"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to let containers having access to Internet")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated NLB to redirect 443 traffic to Nginx Ingress"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"High Availability network load balancer, pointing to Nginx Ingress inside EKS")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"NAT gateways (multi AZ) + EIP addresses (multi AZ) + subnet groups + routing table"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"yes"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Useful to get outgoing static IP")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated VPC routes for VPC peering"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"yes"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Useful to perform VPC peering with others VPC on the same or different account")))),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Kubernetes Services"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"A dedicated EKS cluster (multi AZ) for this VPC"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated Kubernetes cluster managed by AWS with nodes (instances type) defined by the customer")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"IAM dedicated user for AWS EBS CSI to access EC2 volumes + a dedicated policy"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to allow EKS cluster having access to volume and mount them to containers")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"IAM dedicated user for AWS IAM User Sync + a dedicated policy"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to sync desired IAM account to EKS to let them connect directly ot Kubernetes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"IAM dedicated user for a Cluster Autoscaler+ a dedicated policy"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to let autoscaler having access to EC2 autoscaling groups")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"IAM dedicated policies for AWS EKS CNI, EC2 container registry + EKS worker nodes"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to let EKS having access to container registry and configure the Kubernetes network")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Security group for EKS remote access (dual authentication: TLS + IAM authenticator)"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Required to have a secure remote access on the Kubernetes cluster")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Security group for 443 port pointing to Nginx ingress inside EKS"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"External access to web services inside the Kubernetes cluster")))),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Other Services"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(r.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Cloudwatch log groups for the EKS cluster"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Kubernetes logs, useful for the AWS and EKS support to diagnose an issue")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated S3 bucket for application's logs + a dedicated IAM account"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Application's logs are stored in an KMS encrypted S3 private bucket")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Dedicated S3 bucket to store the kubeconfig"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(r.a)({parentName:"tr"},{align:null}),"Kubernetes Kubeconfig is stored in an KMS encrypted, private and versioned bucket, used by Qovery for application's deployment")))),Object(c.b)("h3",{id:"remove-qovery-from-your-aws-account"},"Remove Qovery from your AWS account"),Object(c.b)(o.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,"Your applications and your data will be deleted.")),Object(c.b)("p",null,"To delete Qovery from your AWS account you must be the owner of the Qovery Organization and you have to delete everything in this order:"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"Environments"),Object(c.b)("li",{parentName:"ul"},"Clusters")),Object(c.b)(o.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,'If you remove the access to your AWS account before deleting all the resources on the Qovery platform, you will have to manually delete them\nby yourself by following the guide "I don\'t have Qovery access anymore, how could I delete Qovery deployed resources on my AWS account?"\nin ',Object(c.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/troubleshoot/"}),"this section"),".")),Object(c.b)("h3",{id:"iam-permissions"},"IAM permissions"),Object(c.b)("p",null,"Qovery required IAM permissions to create, update and managed the infrastructure."),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"IAM is used to create IAM roles"),Object(c.b)("li",{parentName:"ul"},"S3 is used to store our generated configuration files"),Object(c.b)("li",{parentName:"ul"},"Cloudwatch, for creating a group stream for each Kubernetes clusters"),Object(c.b)("li",{parentName:"ul"},"Autoscaling for RDS and autoscaling rules for the Kubernetes cluster"),Object(c.b)("li",{parentName:"ul"},"Elastic load-balancing for ELB / ALB / NLB."),Object(c.b)("li",{parentName:"ul"},"DynamoDB to have a distributed lock on infrastructure deployment."),Object(c.b)("li",{parentName:"ul"},"ECR for managing the container registry, create/update/delete repository."),Object(c.b)("li",{parentName:"ul"},"KMS to load and store keys (RDS, SSH, \u2026)"),Object(c.b)("li",{parentName:"ul"},"EKS to create and update the Kubernetes cluster.")),Object(c.b)("details",null,Object(c.b)("summary",null,"Minimum IAM permission set"),Object(c.b)("blockquote",null,"Last update: 2023-06-08"),Object(c.b)(o.a,{type:"alert",mdxType:"Alert"},Object(c.b)("p",null,"This is purely informative and we strongly recommend you to NOT use this configuration within your IAM permissions since it might not\nreflect the latest product update. Please use the one provided in the section above.")),Object(c.b)("p",null,"Below you can find the minimum permission set required by Qovery to run and deploy your applications."),Object(c.b)("p",null,"Policies lengths are limited regarding which object they\u2019re attached to but the one Qovery needs represent more than the maximum (~6000\ncharacters)."),Object(c.b)("p",null,"In order to setup it up, you need to create two IAM groups, each one with one of the following policies."),Object(c.b)("p",null,"Then we must create a user added to each of the previously created groups."),Object(c.b)("p",null,"Once it\u2019s done, the user\u2019s access key and secret key can be used in Qovery."),Object(c.b)("pre",null,Object(c.b)("code",Object(r.a)({parentName:"pre"},{className:"language-json"}),'\n{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": [\n "autoscaling:SuspendProcesses",\n "ec2:AllocateAddress",\n "ec2:AssociateAddress",\n "ec2:AssociateRouteTable",\n "ec2:AttachVolume",\n "ec2:AttachInternetGateway",\n "ec2:AuthorizeSecurityGroupEgress",\n "ec2:AuthorizeSecurityGroupIngress",\n "ec2:CreateInternetGateway",\n "ec2:CreateKeyPair",\n "ec2:CreateLaunchTemplate",\n "ec2:CreateLaunchTemplateVersion",\n "ec2:CreateNatGateway",\n "ec2:CreateRoute",\n "ec2:CreateRouteTable",\n "ec2:CreateSecurityGroup",\n "ec2:CreateSubnet",\n "ec2:CreateTags",\n "ec2:CreateVolume",\n "ec2:CreateVpc",\n "ec2:DeleteInternetGateway",\n "ec2:DeleteKeyPair",\n "ec2:DeleteLaunchTemplate",\n "ec2:DeleteNatGateway",\n "ec2:DeleteRouteTable",\n "ec2:DeleteSecurityGroup",\n "ec2:DeleteSubnet",\n "ec2:DeleteVolume",\n "ec2:DeleteVpc",\n "ec2:DescribeAddresses",\n "ec2:DescribeAvailabilityZones",\n "ec2:DescribeImages",\n "ec2:DescribeInstanceAttribute",\n "ec2:DescribeInstanceCreditSpecifications",\n "ec2:DescribeInstances",\n "ec2:DescribeInstanceTypes",\n "ec2:DescribeInternetGateways",\n "ec2:DescribeKeyPairs",\n "ec2:DescribeLaunchTemplateVersions",\n "ec2:DescribeLaunchTemplates",\n "ec2:DescribeNatGateways",\n "ec2:DescribeNetworkAcls",\n "ec2:DescribeNetworkInterfaces",\n "ec2:DescribeRouteTables",\n "ec2:DescribeSecurityGroupRules",\n "ec2:DescribeSecurityGroups",\n "ec2:DescribeSubnets",\n "ec2:DescribeTags",\n "ec2:DescribeVolumes",\n "ec2:DescribeVpcAttribute",\n "ec2:DescribeVpcClassicLink",\n "ec2:DescribeVpcClassicLinkDnsSupport",\n "ec2:DescribeVpcs",\n "ec2:DetachInternetGateway",\n "ec2:DetachVolume",\n "ec2:DisassociateAddress",\n "ec2:DisassociateRouteTable",\n "ec2:ImportKeyPair",\n "ec2:ModifySubnetAttribute",\n "ec2:ModifyVpcAttribute",\n "ec2:ReleaseAddress",\n "ec2:RevokeSecurityGroupEgress",\n "ec2:RevokeSecurityGroupIngress",\n "ec2:RunInstances",\n "ec2:StopInstances",\n "ec2:TerminateInstances",\n "ecr:BatchCheckLayerAvailability",\n "ecr:BatchGetImage",\n "ecr:CompleteLayerUpload",\n "ecr:CreateRepository",\n "ecr:DeleteRepository",\n "ecr:DescribeImages",\n "ecr:DescribeRepositories",\n "ecr:GetAuthorizationToken",\n "ecr:GetDownloadUrlForLayer",\n "ecr:InitiateLayerUpload",\n "ecr:PutImage",\n "ecr:PutLifecyclePolicy",\n "ecr:TagResource",\n "ecr:UploadLayerPart",\n "eks:CreateAddon",\n "eks:CreateCluster",\n "eks:CreateNodegroup",\n "eks:DeleteAddon",\n "eks:DeleteCluster",\n "eks:DeleteNodegroup",\n "eks:DescribeAddon",\n "eks:DescribeCluster",\n "eks:DescribeNodegroup",\n "eks:DescribeUpdate",\n "eks:ListClusters",\n "eks:ListNodegroups",\n "eks:TagResource",\n "eks:UpdateAddon",\n "eks:UpdateClusterConfig",\n "eks:UpdateClusterVersion",\n "eks:UpdateNodegroupConfig",\n "eks:UpdateNodegroupVersion",\n "elasticache:AddTagsToResource",\n "elasticache:CreateCacheSubnetGroup",\n "elasticache:CreateReplicationGroup",\n "elasticache:DeleteCacheSubnetGroup",\n "elasticache:DeleteReplicationGroup",\n "elasticache:DescribeCacheClusters",\n "elasticache:DescribeCacheSubnetGroups",\n "elasticache:DescribeReplicationGroups",\n "elasticache:ListTagsForResource",\n "elasticloadbalancing:DescribeLoadBalancers",\n "elasticloadbalancing:DescribeTags"\n ],\n "Resource": "*"\n }\n ]\n}\n\n')),Object(c.b)("pre",null,Object(c.b)("code",Object(r.a)({parentName:"pre"},{className:"language-json"}),'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": [\n "iam:AddRoleToInstanceProfile",\n "iam:AttachRolePolicy",\n "iam:AttachUserPolicy",\n "iam:CreateAccessKey",\n "iam:CreateInstanceProfile",\n "iam:CreateOpenIDConnectProvider",\n "iam:CreatePolicy",\n "iam:CreateRole",\n "iam:CreateServiceLinkedRole",\n "iam:CreateUser",\n "iam:DeleteAccessKey",\n "iam:DeleteInstanceProfile",\n "iam:DeleteOpenIDConnectProvider",\n "iam:DeletePolicy",\n "iam:DeleteRole",\n "iam:DeleteRolePolicy",\n "iam:DeleteUser",\n "iam:DeleteUserPolicy",\n "iam:DetachRolePolicy",\n "iam:DetachUserPolicy",\n "iam:GetInstanceProfile",\n "iam:GetOpenIDConnectProvider",\n "iam:GetPolicy",\n "iam:GetPolicyVersion",\n "iam:GetRole",\n "iam:GetRolePolicy",\n "iam:GetUser",\n "iam:GetUserPolicy",\n "iam:ListAccessKeys",\n "iam:ListAttachedRolePolicies",\n "iam:ListAttachedUserPolicies",\n "iam:ListGroupsForUser",\n "iam:ListInstanceProfilesForRole",\n "iam:ListPolicyVersions",\n "iam:ListRolePolicies",\n "iam:PassRole",\n "iam:PutRolePolicy",\n "iam:PutUserPolicy",\n "iam:RemoveRoleFromInstanceProfile",\n "iam:TagInstanceProfile",\n "iam:TagOpenIDConnectProvider",\n "iam:TagRole",\n "iam:TagUser",\n "kms:CreateGrant",\n "kms:CreateKey",\n "kms:Decrypt",\n "kms:DescribeKey",\n "kms:GenerateDataKey",\n "kms:GetKeyPolicy",\n "kms:GetKeyRotationStatus",\n "kms:ListResourceTags",\n "kms:PutKeyPolicy",\n "kms:ScheduleKeyDeletion",\n "kms:TagResource",\n "kms:EnableKeyRotation",\n "logs:CreateLogGroup",\n "logs:DeleteLogGroup",\n "logs:DescribeLogGroups",\n "logs:ListTagsLogGroup",\n "logs:PutRetentionPolicy",\n "logs:TagLogGroup",\n "rds:AddTagsToResource",\n "rds:CreateDBCluster",\n "rds:CreateDBInstance",\n "rds:CreateDBParameterGroup",\n "rds:CreateDBSubnetGroup",\n "rds:DeleteDBCluster",\n "rds:DeleteDBInstance",\n "rds:DeleteDBParameterGroup",\n "rds:DeleteDBSubnetGroup",\n "rds:DescribeDBClusters",\n "rds:DescribeDBInstances",\n "rds:DescribeDBParameterGroups",\n "rds:DescribeDBParameters",\n "rds:DescribeDBSubnetGroups",\n "rds:DescribeGlobalClusters",\n "rds:ListTagsForResource",\n "rds:ModifyDBInstance",\n "rds:ModifyDBParameterGroup",\n "rds:StartDBCluster",\n "rds:StartDBInstance",\n "rds:StopDBCluster",\n "rds:StopDBInstance",\n "s3:CreateBucket",\n "s3:DeleteBucket",\n "s3:DeleteObject",\n "s3:DeleteObjectVersion",\n "s3:DeleteBucketPolicy",\n "s3:GetAccelerateConfiguration",\n "s3:GetBucketAcl",\n "s3:GetBucketCORS",\n "s3:GetBucketLogging",\n "s3:GetBucketObjectLockConfiguration",\n "s3:GetBucketOwnershipControls",\n "s3:GetBucketPolicy",\n "s3:GetBucketPublicAccessBlock",\n "s3:GetBucketRequestPayment",\n "s3:GetBucketTagging",\n "s3:GetBucketVersioning",\n "s3:GetBucketWebsite",\n "s3:GetEncryptionConfiguration",\n "s3:GetLifecycleConfiguration",\n "s3:GetObject",\n "s3:GetReplicationConfiguration",\n "s3:ListAccessPoints",\n "s3:ListAllMyBuckets",\n "s3:ListBucket",\n "s3:ListBucketMultipartUploads",\n "s3:ListBucketVersions",\n "s3:ListMultiRegionAccessPoints",\n "s3:ListMultipartUploadParts",\n "s3:ListStorageLensConfigurations",\n "s3:PutBucketAcl",\n "s3:PutBucketOwnershipControls",\n "s3:PutBucketPolicy",\n "s3:PutBucketPublicAccessBlock",\n "s3:PutBucketTagging",\n "s3:PutBucketVersioning",\n "s3:PutEncryptionConfiguration",\n "s3:PutLifecycleConfiguration",\n "s3:PutObject",\n "s3:PutObjectRetention",\n "secretsmanager:CreateSecret",\n "secretsmanager:TagResource",\n "sts:GetCallerIdentity"\n ],\n "Resource": "*"\n }\n ]\n}\n'))))}b.isMDXComponent=!0},453:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=a.a.createContext({}),u=function(e){var t=a.a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i({},t,{},e)),n},b=function(e){var t=u(e.components);return a.a.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},p=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,c=e.originalType,o=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),b=u(n),p=r,m=b["".concat(o,".").concat(p)]||b[p]||d[p]||c;return n?a.a.createElement(m,i({ref:t},l,{components:n})):a.a.createElement(m,i({ref:t},l))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var c=n.length,o=new Array(c);o[0]=p;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var l=2;l1?arguments[1]:void 0,n),s=o>2?arguments[2]:void 0,l=void 0===s?n:a(s,n);l>i;)t[i++]=e;return t}},458:function(e,t,n){var r=n(28).f,a=Function.prototype,c=/^\s*function ([^ (]*)/;"name"in a||n(10)&&r(a,"name",{configurable:!0,get:function(){try{return(""+this).match(c)[1]}catch(e){return""}}})},459:function(e,t,n){"use strict";n(458);var r=n(0),a=n.n(r),c=n(454);t.a=function(e){var t=e.children,n=e.name;return a.a.createElement(c.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},461:function(e,t,n){"use strict";var r=n(465),a=n(51);function c(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,r){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return function(e,n,r){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=a({arrayFormat:"none"},t)),r=Object.create(null);return"string"!=typeof e?r:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),c=t.length>0?t.join("="):void 0;c=void 0===c?null:decodeURIComponent(c),n(decodeURIComponent(a),c,r)})),Object.keys(r).sort().reduce((function(e,t){var n=r[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):r},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,r){return null===n?[c(t,e),"[",r,"]"].join(""):[c(t,e),"[",c(r,e),"]=",c(n,e)].join("")};case"bracket":return function(t,n){return null===n?c(t,e):[c(t,e),"[]=",c(n,e)].join("")};default:return function(t,n){return null===n?c(t,e):[c(t,e),"=",c(n,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var a=e[r];if(void 0===a)return"";if(null===a)return c(r,t);if(Array.isArray(a)){var o=[];return a.slice().forEach((function(e){void 0!==e&&o.push(n(r,e,o.length))})),o.join("&")}return c(r,t)+"="+c(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},462:function(e,t,n){"use strict";var r=n(0),a=n.n(r),c=(n(453),n(461)),o=n.n(c);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,c=e.hideFeedbackQuestion,i="undefined"!=typeof window?window.location:null,s={title:"Tutorial on "+i+" failed",body:"The tutorial on:\n\n"+i+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},l="https://github.com/qovery/documentation/issues/new?"+o.a.stringify(s),u=Object(r.useState)(null),b=u[0],d=u[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!c&&!b&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return d("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:l,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},465:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]);
\ No newline at end of file
diff --git a/c8dfbbe7.2e92f2ea.js.LICENSE.txt b/c8dfbbe7.664f42e5.js.LICENSE.txt
similarity index 100%
rename from c8dfbbe7.2e92f2ea.js.LICENSE.txt
rename to c8dfbbe7.664f42e5.js.LICENSE.txt
diff --git a/community/index.html b/community/index.html
index a2c35947e2..0e96e92f02 100644
--- a/community/index.html
+++ b/community/index.html
@@ -26,7 +26,7 @@
-
+
@@ -47,7 +47,7 @@
-
+
diff --git a/components/index.html b/components/index.html
index 3e368a3a3a..971d32f137 100644
--- a/components/index.html
+++ b/components/index.html
@@ -26,7 +26,7 @@
-
+
@@ -47,7 +47,7 @@
-
+
diff --git a/contact/index.html b/contact/index.html
index e86f74d550..dd26d70fa8 100644
--- a/contact/index.html
+++ b/contact/index.html
@@ -26,7 +26,7 @@
-
+
@@ -47,7 +47,7 @@
-
+
diff --git a/docs/getting-started/basic-concepts/index.html b/docs/getting-started/basic-concepts/index.html
index 4133e61329..9f3fc941e9 100644
--- a/docs/getting-started/basic-concepts/index.html
+++ b/docs/getting-started/basic-concepts/index.html
@@ -26,7 +26,7 @@
-
+
@@ -55,7 +55,7 @@
-
+
diff --git a/docs/getting-started/deploy-my-app/index.html b/docs/getting-started/deploy-my-app/index.html
index 936ca1f6f7..acfbc9b8f1 100644
--- a/docs/getting-started/deploy-my-app/index.html
+++ b/docs/getting-started/deploy-my-app/index.html
@@ -26,7 +26,7 @@
-
+
@@ -55,7 +55,7 @@
-
+
diff --git a/docs/getting-started/how-qovery-works/index.html b/docs/getting-started/how-qovery-works/index.html
index be8fcfedf2..a3c1ab2845 100644
--- a/docs/getting-started/how-qovery-works/index.html
+++ b/docs/getting-started/how-qovery-works/index.html
@@ -26,7 +26,7 @@
-
+
@@ -55,7 +55,7 @@
-
+
diff --git a/docs/getting-started/index.html b/docs/getting-started/index.html
index 1c10c33e02..8f17acb079 100644
--- a/docs/getting-started/index.html
+++ b/docs/getting-started/index.html
@@ -26,7 +26,7 @@
-
+
@@ -55,7 +55,7 @@
-
+
diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html
index f895e89609..ac89fda8c0 100644
--- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html
+++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html
@@ -26,7 +26,7 @@
-
+
@@ -44,19 +44,19 @@
-
+
This guide will help you to create your Amazon Web Services (AWS) credentials for Qovery. Those credentials will be used to create a Kubernetes cluster, a dedicated VPC and a few services on your AWS account. Refer to our Infrastructure page to learn more about the infrastructure created by Qovery.
Before you begin, this page assumes the following:
The default name required by Qovery is Admins. If you want to use another name, you have to change the cluster advanced settings aws.iam.admin_group BEFORE launching the cluster installation process
Well done!! You now have your AWS access key id and secret access key and your permissions are setups; It is time to connect Qovery to your AWS account.
You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization.
+
This guide will help you to create your Amazon Web Services (AWS) credentials for Qovery. Those credentials will be used to create a Kubernetes cluster, a dedicated VPC and a few services on your AWS account. Refer to our Infrastructure page to learn more about the infrastructure created by Qovery.
Before you begin, this page assumes the following:
The default name required by Qovery is Admins. If you want to use another name, you have to change the cluster advanced settings aws.iam.admin_group BEFORE launching the cluster installation process
Well done!! You now have your AWS access key id and secret access key and your permissions are setups; It is time to connect Qovery to your AWS account.
You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization.
Follow this documentation to create a new cluster on your organization.
Qovery required IAM permissions to create, update and managed the infrastructure.
IAM is used to create IAM roles
S3 is used to store our generated configuration files
Cloudwatch, for creating a group stream for each Kubernetes clusters
Autoscaling for RDS and autoscaling rules for the Kubernetes cluster
Elastic load-balancing for ELB / ALB / NLB.
DynamoDB to have a distributed lock on infrastructure deployment.
ECR for managing the container registry, create/update/delete repository.
KMS to load and store keys (RDS, SSH, …)
EKS to create and update the Kubernetes cluster.
Minimum IAM permission set
Last update: 2023-06-08
This is purely informative and we strongly recommend you to NOT use this configuration within your IAM permissions since it might not
reflect the latest product update. Please use the one provided in the section above.
Below you can find the minimum permission set required by Qovery to run and deploy your applications.
Policies lengths are limited regarding which object they’re attached to but the one Qovery needs represent more than the maximum (~6000
-characters).
In order to setup it up, you need to create two IAM groups, each one with one of the following policies.
Then we must create a user added to each of the previously created groups.
Once it’s done, the user’s access key and secret key can be used in Qovery.