In the previous section, you saw how to use Monitoring, Alerting, and Logging to
diagnose issues. Sometimes, that's not enough, and you need to connect directly to your servers using:
When you launch an EC2 Instance in AWS, you can specify an EC2 Key Pair that can be used to SSH into the EC2 Instance.
This suffers from an important problem: usually more than one person needs access to the EC2 Instance, which means
you have to share this key with others. Sharing secrets of this sort is a security risk. Moreover, if someone leaves the
company, to ensure they no longer have access, you'd have to change the Key Pair, which requires redeploying all of your
servers.
The better way: ssh-grunt
To solve the "key sharing" problem, Gruntwork implemented ssh-grunt, a tool that enables each member of your
team to log in to every EC2 Instance with their own IAM user name and their own SSH key. Here's how it works:
One-Time Setup
Log in to the AWS Web Console with your IAM User account.
Go to your IAM User profile page, select the Security credentials tab, and click Upload SSH public key.
Now upload your public SSH key (e.g. ~/.ssh/id_rsa.pub). Do NOT upload your private key.
Now make sure your IAM User account is a member of either the ssh-grunt-users or ssh-grunt-sudo-users group.
By being a member of one of these IAM Groups, any EC2 Instance configured to use these IAM Groups will permit
you to login as either a non-sudo user or sudo user, depending on which IAM Group you're in.
Note that your linux username is based on your IAM User name according to the ssh-grunt guidelines. For example:
The IAM User name josh will be the linux username josh.
The IAM User name josh@gruntwork.io will be the linux username josh
The IAM User name _gruntwork.josh.padnick will be the linux username gruntwork_josh_padnick.
You've uploaded your public SSH key to your IAM User profile.
Your private key is located at /Users/josh/.ssh/id_rsa on your local machine.
Your EC2 Instance's IP address is 1.2.3.4.
Then you can SSH to the EC2 Instance as follows:
# Do this once to load your SSH Key into the SSH Agent
ssh-add /Users/josh/.ssh/id_rsa
# Every time you want to login to an EC2 Instance, use this command
ssh josh@1.2.3.4
VPN
For security reasons, just about all of your EC2 Instances run in private subnets, which means they do not have a
public IP address, and cannot be reached directly from the public Internet. This reduces the "surface area" that
attackers can reach. Of course, we still need access into the VPCs, so we expose a single entrypoint into the network:
an OpenVPN server.
The idea is that you use an OpenVPN client to connect to the OpenVPN server, which gets you "in" to the network, and
you can then connect to other resources in the account as if you were making requests from the OpenVPN server itself.
Linux: apt-get install openvpn or yum install openvpn.
Join the OpenVPN IAM group
To get access to an OpenVPN server, your IAM user need access to SQS queues used by that OpenVPN server. Since our
IAM users are defined in one AWS account (security) and the OpenVPN servers are defined in separate AWS accounts
(stage, prod, etc), that means you need to "switch" to the accounts with the OpenVPN servers by assuming an IAM role
that has access to the SQS queues in those accounts.
To be able to assume an IAM role, your IAM user needs to be part of an IAM group with the proper permissions, such as
_account.xxx-full-access or _account.xxx-openvpn-users, where xxx is the name of the account you want to access
(stage, prod, etc).
Use openvpn-admin to generate a configuration file
To connect to an OpenVPN server, you need an OpenVPN configuration file, which includes a certificate that you can use
to authenticate. To generate this configuration file, do the following:
Set up your AWS credentials using any of the options supported by AWS CLI
tools. Typically, environment
variables are the easiest and most secure.
Use aws-auth to assume an IAM role
in the AWS account with the OpenVPN server. This IAM role must have access to the SQS queues used by OpenVPN server.
Typically, the allow-full-access-from-other-accounts or openvpn-server-allow-certificate-requests-for-external-accounts
IAM role is what you want. For example, if your prod account had account ID 1111111111111, you would run:
Run openvpn-admin request --aws-region us-east-1 --username <YOUR_IAM_USERNAME>.
This will create your OpenVPN configuration file in the current folder.
Load this configuration file into your OpenVPN client.
Connect to the OpenVPN server
To connect to the OpenVPN server, simply click the "Connect" button next to your configuration file in the OpenVPN
client! After a few seconds, you should be connected.
Connect to other resources
Now that you're connected to VPN, you can connect to other resources in your AWS account. For example, if you followed
the ssh-grunt setup instructions above, you can SSH to an EC2 Instance with private IP address 1.2.3.4 as follows:
Similarly, non-production resources, such as a load balancer in the staging environment, or Jenkins in the mgmt
environment, should now be accessible to you.
Note: we run OpenVPN in "split tunnel" mode. That means that only the IP addresses we have explicitly opted into
(namely, the private IP addresses in your AWS account) will be routed over VPN. Other IP addresses, such as requests
you make from your computer to YouTube, GMail, Spotify, etc, are NOT routed over VPN. This dramatically reduces the
load on your OpenVPN server and your bandwidth usage in AWS.
{"treedata":{"name":"root","toggled":true,"children":[{"name":".gitignore","path":".gitignore","sha":"1c27fc6013cba46cd301a7c8bf951694670153a3"},{"name":"CODEOWNERS","path":"CODEOWNERS","sha":"6bddb3ff6e1b3dfaba7cf180e56bca12c245be56"},{"name":"README.md","path":"README.md","sha":"45d75f99aefaa9a2d008b223da04bc26453ef651"},{"name":"_docs","children":[{"name":"01-architecture-overview.md","path":"_docs/01-architecture-overview.md","sha":"115a05d08f3a431a19e5aa2596c079619ae66dab"},{"name":"02-whats-deployed.md","path":"_docs/02-whats-deployed.md","sha":"9dc8a401caf24896ce00a8087bfe32c7af99d2d2"},{"name":"03-security-compliance-compatibility.md","path":"_docs/03-security-compliance-compatibility.md","sha":"9342617f42adb28e440cc2161f3fee56205c150e"},{"name":"04-how-code-is-organized.md","path":"_docs/04-how-code-is-organized.md","sha":"3b340de506525633e1f7333a1e9ac9a5565a88e3"},{"name":"05-dev-environment.md","path":"_docs/05-dev-environment.md","sha":"c8b494aed802b623f7891047b6cba633d8ab5fa7"},{"name":"06-ci-cd.md","path":"_docs/06-ci-cd.md","sha":"b6c2a7d7cde7471fb08bff5dcf68c40156db68d5"},{"name":"07-monitoring-alerting-logging.md","path":"_docs/07-monitoring-alerting-logging.md","sha":"619c810c6e60418b3a46fa3d903bc76dc6d48e41"},{"name":"08-ssh-vpn.md","path":"_docs/08-ssh-vpn.md","sha":"9fe83afbd3d6116a4f3faff8923a81cd37ff91c7","toggled":true},{"name":"09-accounts-and-auth.md","path":"_docs/09-accounts-and-auth.md","sha":"6b0472241644ffc79556e60d582ff1edb80f0554"},{"name":"10-gruntwork-tools.md","path":"_docs/10-gruntwork-tools.md","sha":"d08b1fe7cfbb9ad91155bfff9e3a05525c39c127"},{"name":"11-deploying-a-docker-service.md","path":"_docs/11-deploying-a-docker-service.md","sha":"c735be4ee94e76cc55b48a21039dfec44e6a5d51"},{"name":"12-migration.md","path":"_docs/12-migration.md","sha":"464cadf6e05d5ffd44e569c0d866b5c2cf5f42e9"},{"name":"13-deploying-the-reference-architecture-from-scratch.md","path":"_docs/13-deploying-the-reference-architecture-from-scratch.md","sha":"fa362071f460f7df7331645d6e5052e8cd20c30b"},{"name":"14-undeploying-the-reference-architecture.md","path":"_docs/14-undeploying-the-reference-architecture.md","sha":"c6dcaae7266ead56d539b1816a5cfe2988412fe1"},{"name":"15-adding-new-environments-regions-and-accounts.md","path":"_docs/15-adding-new-environments-regions-and-accounts.md","sha":"c01188a1539e93ed2773a1b799b3b0f8e7b2045e"},{"name":"README.md","path":"_docs/README.md","sha":"ddb9fe83eb2fcad91e82771ad276dd0bdba40cb2"},{"name":"_images","children":[{"name":"cw-logs-1.png","path":"_docs/_images/cw-logs-1.png","sha":"84c86f014751844fbd777b5139ed61f749b5ed32"},{"name":"cw-logs-2.png","path":"_docs/_images/cw-logs-2.png","sha":"9a0a80b20490fdc1b9014040cc0bbc87c9cf6f68"},{"name":"cw-logs-3.png","path":"_docs/_images/cw-logs-3.png","sha":"bda49dc4e947658e0ceb9ba592b4e314d9db61e9"},{"name":"cw-logs-4.png","path":"_docs/_images/cw-logs-4.png","sha":"54bcc44c4b0701620b7f20c4e6fc0a9fd8f38049"},{"name":"ecs-console-1.png","path":"_docs/_images/ecs-console-1.png","sha":"afe452278d5f107e6ec225a235c587de7cb53510"},{"name":"ecs-console-2.png","path":"_docs/_images/ecs-console-2.png","sha":"40609b98015d781b9e1de801c131fadc323337ae"},{"name":"ecs-console-3.png","path":"_docs/_images/ecs-console-3.png","sha":"87ad40d291b7e9e6f6caa0389b846392bdb93ee0"},{"name":"ref-arch-full.png","path":"_docs/_images/ref-arch-full.png","sha":"8c17eef52be06757553a1f3ee4e387e6dc820016"},{"name":"ref-arch-icon.png","path":"_docs/_images/ref-arch-icon.png","sha":"05876962e6877df911674237ca1b793d9f4f04b3"},{"name":"terraform-code-provenance.png","path":"_docs/_images/terraform-code-provenance.png","sha":"e2a9d6bfbd8b963b057d4341dd0ec93e3823d834"}]}],"toggled":true},{"name":"dev","children":[{"name":"_global","children":[{"name":"README.md","path":"dev/_global/README.md","sha":"d1b8a96c00211751f079fa13cac1b3417d29bf09"},{"name":"cloudtrail","children":[{"name":"README.md","path":"dev/_global/cloudtrail/README.md","sha":"65aac5742b3dc183d11a7d83a31ae69afe5df2e5"},{"name":"terragrunt.hcl","path":"dev/_global/cloudtrail/terragrunt.hcl","sha":"fb19b4438de2ba919d17f3e4a6ccb3c9f2517f26"}]},{"name":"iam-cross-account","children":[{"name":"README.md","path":"dev/_global/iam-cross-account/README.md","sha":"6bf06985be74cf68085a78728c41cf88fc354141"},{"name":"terragrunt.hcl","path":"dev/_global/iam-cross-account/terragrunt.hcl","sha":"96f6b058d3db5871b45cd9e9c05d2387f7fa8340"}]},{"name":"iam-user-password-policy","children":[{"name":"README.md","path":"dev/_global/iam-user-password-policy/README.md","sha":"d3240490ed6005924706f6dd8a1718747ebcd8d9"},{"name":"terragrunt.hcl","path":"dev/_global/iam-user-password-policy/terragrunt.hcl","sha":"47b669ba52099812a6d52ed4fcdad48c5e32e91e"}]},{"name":"region.yaml","path":"dev/_global/region.yaml","sha":"18b7823ed017b97431d58da7bcb9a4e31299272a"},{"name":"route53-public","children":[{"name":"README.md","path":"dev/_global/route53-public/README.md","sha":"69a24d1bb0eff2a66ca9be44c0dfc864f7086960"},{"name":"terragrunt.hcl","path":"dev/_global/route53-public/terragrunt.hcl","sha":"68ed9958a62546160f9007660857c5baa95ce12b"}]}]},{"name":"empty.yaml","path":"dev/empty.yaml","sha":"5aa66daa40faeaef37eccb7b4b0fcc792233cd7b"},{"name":"terragrunt.hcl","path":"dev/terragrunt.hcl","sha":"a63152bc683cf06815f93c001fc4e96d498db325"},{"name":"us-east-1","children":[{"name":"_global","children":[{"name":"README.md","path":"dev/us-east-1/_global/README.md","sha":"37b828b038945a50e2e571ef1e755c4f9170e7cf"},{"name":"kms-master-key","children":[{"name":"README.md","path":"dev/us-east-1/_global/kms-master-key/README.md","sha":"9f97f59f9d03bc3cef6ecb0e97af8ffdfd7c0334"},{"name":"terragrunt.hcl","path":"dev/us-east-1/_global/kms-master-key/terragrunt.hcl","sha":"d5c556e7eb743da62e0191243a2d4ee9ec2cf828"}]},{"name":"sns-topics","children":[{"name":"README.md","path":"dev/us-east-1/_global/sns-topics/README.md","sha":"7926797c3094f0e708bd761d297589bd94be873e"},{"name":"terragrunt.hcl","path":"dev/us-east-1/_global/sns-topics/terragrunt.hcl","sha":"225cf4b3fe49af57c85a1e25b7942c72cf9e6853"}]}]},{"name":"dev","children":[{"name":"README.md","path":"dev/us-east-1/dev/README.md","sha":"30eef7620895f3ad23174f5f2c8772ab7f8880a8"},{"name":"cloudwatch-dashboard","children":[{"name":"README.md","path":"dev/us-east-1/dev/cloudwatch-dashboard/README.md","sha":"01e60cd5e9f63892e09b1d7edfa7bea8fd7d0a3d"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/cloudwatch-dashboard/terragrunt.hcl","sha":"f3533abbe42145ab1b29f235701892621c9d63d3"}]},{"name":"data-stores","children":[{"name":"elk-single-cluster","children":[{"name":"README.md","path":"dev/us-east-1/dev/data-stores/elk-single-cluster/README.md","sha":"a90283b9240f67c38dd1bd77755a8162fa6f3999"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/data-stores/elk-single-cluster/terragrunt.hcl","sha":"97fc6b6c810137e559da50b3684a5f6383c77c72"}]},{"name":"kafka","children":[{"name":"README.md","path":"dev/us-east-1/dev/data-stores/kafka/README.md","sha":"72582bdb047da4f8820f45716977d5b962c17028"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/data-stores/kafka/terragrunt.hcl","sha":"1c40ceaf50ae178033dda665553598a3f7548cd1"}]},{"name":"mysql","children":[{"name":"README.md","path":"dev/us-east-1/dev/data-stores/mysql/README.md","sha":"625773572c620dcddf722d0d0d206576f57f4af7"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/data-stores/mysql/terragrunt.hcl","sha":"40313bc9ada285fe59d77067728f6cf208b04668"}]},{"name":"redis","children":[{"name":"README.md","path":"dev/us-east-1/dev/data-stores/redis/README.md","sha":"5d82990da39b55e6ac7b3bbb442d4209e62dba1f"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/data-stores/redis/terragrunt.hcl","sha":"bfa22ef95f443e06ccf0624c414d6f9f6bde5b88"}]},{"name":"zookeeper","children":[{"name":"README.md","path":"dev/us-east-1/dev/data-stores/zookeeper/README.md","sha":"87b4dda769ae63cffa851b6ccf2086b617bf989d"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/data-stores/zookeeper/terragrunt.hcl","sha":"76af3451b7a52fd7d59cd8744ff3836da3c1826d"}]}]},{"name":"env.yaml","path":"dev/us-east-1/dev/env.yaml","sha":"c38dd83256fc4206be3afc24972cd7f3b6712b19"},{"name":"lambda","children":[{"name":"long-running-scheduled","children":[{"name":"README.md","path":"dev/us-east-1/dev/lambda/long-running-scheduled/README.md","sha":"274c405a65d60c6a253ca2cf24863e1025402874"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/lambda/long-running-scheduled/terragrunt.hcl","sha":"72518b7089bd107c05c281372f3cccd6d7a6a628"}]},{"name":"s3-image-processing","children":[{"name":"README.md","path":"dev/us-east-1/dev/lambda/s3-image-processing/README.md","sha":"d7e48256e90edb0896769e4bd537c22e34c42f22"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/lambda/s3-image-processing/terragrunt.hcl","sha":"9be5024cab87f495dd8ac275b9807d086b971da5"}]}]},{"name":"networking","children":[{"name":"alb-internal","children":[{"name":"README.md","path":"dev/us-east-1/dev/networking/alb-internal/README.md","sha":"6d7b1a62e65dab5e908d2fd2ba291a98bc639a1d"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/networking/alb-internal/terragrunt.hcl","sha":"3226f2f8cc966d88abe6ffe7b1d912735a638b80"}]},{"name":"alb-public","children":[{"name":"README.md","path":"dev/us-east-1/dev/networking/alb-public/README.md","sha":"6d7b1a62e65dab5e908d2fd2ba291a98bc639a1d"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/networking/alb-public/terragrunt.hcl","sha":"039a02514db5e62d5ec21d3131579c821dcb6283"}]},{"name":"route53-private","children":[{"name":"README.md","path":"dev/us-east-1/dev/networking/route53-private/README.md","sha":"c93f222ed15cae75ec411a4b005ad4da32548c42"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/networking/route53-private/terragrunt.hcl","sha":"f7e7c4b437c11b0340c682314deb9b08aca3a854"}]}]},{"name":"services","children":[{"name":"ecs-cluster","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/ecs-cluster/README.md","sha":"775dc4b2d530ce3ef27d0e9ad22e282a52bcffd3"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/ecs-cluster/terragrunt.hcl","sha":"64c60f67c5ce0a965a2e636015dcb9ff4e22344a"}]},{"name":"eks-cluster","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/eks-cluster/README.md","sha":"8666da2d140182a504efdfedb45554623de0f642"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/eks-cluster/terragrunt.hcl","sha":"791a66ce8376fbec9a019d0cab0ac0ead3aac1ac"}]},{"name":"eks-core-services","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/eks-core-services/README.md","sha":"4c2ea353f337fa34827a56b6a2230f6c8c690deb"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/eks-core-services/terragrunt.hcl","sha":"b9a002b3992e384e57015587693b3e7fe8eddc48"}]},{"name":"k8s-applications-namespace","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/k8s-applications-namespace/README.md","sha":"4475bc76ebcba0b26acff53ccaf827375d74bf7c"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/k8s-applications-namespace/terragrunt.hcl","sha":"dd0fbec59f588fe88fc6c7f59382c0ab6d20ff9c"}]},{"name":"k8s-sample-app-backend-multi-account-acme","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/k8s-sample-app-backend-multi-account-acme/README.md","sha":"62e7efec668cc4effc669c4070dcb968fa0bdc1d"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/k8s-sample-app-backend-multi-account-acme/terragrunt.hcl","sha":"953bef0317447c080e801343e586b0d1b3cbfbfa"}]},{"name":"k8s-sample-app-frontend-multi-account-acme","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/k8s-sample-app-frontend-multi-account-acme/README.md","sha":"63c1026d7c1e936b30a82f90fae754cde0cc6897"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/k8s-sample-app-frontend-multi-account-acme/terragrunt.hcl","sha":"40060b5d96f21608eb30d259cef65289f6169a6f"}]},{"name":"sample-app-backend-multi-account-acme-asg","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/sample-app-backend-multi-account-acme-asg/README.md","sha":"211044e0160f812cc6a5c984ea2dc71d769eece7"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/sample-app-backend-multi-account-acme-asg/terragrunt.hcl","sha":"cf84fcfa70c6d966803b70e29f549f3bd057f206"}]},{"name":"sample-app-backend-multi-account-acme","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/sample-app-backend-multi-account-acme/README.md","sha":"caa8ba67485807d6d463fd7573aa8b9808f7e20b"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/sample-app-backend-multi-account-acme/terragrunt.hcl","sha":"c88b0d61edddbf9337c414cfae2d970735be2b6f"}]},{"name":"sample-app-beanstalk","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/sample-app-beanstalk/README.md","sha":"2cd92b79c23a86d7759b8074de2158ab762ab01d"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/sample-app-beanstalk/terragrunt.hcl","sha":"77ac87dca4c64fbf5108231a6faf807fca3d1fee"}]},{"name":"sample-app-frontend-multi-account-acme-asg","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/sample-app-frontend-multi-account-acme-asg/README.md","sha":"fcd0809e1c9a0a824ed30aca8746a383838b5745"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/sample-app-frontend-multi-account-acme-asg/terragrunt.hcl","sha":"17d10295d106fbde6b0de3bf6c5d3badc97c0ecd"}]},{"name":"sample-app-frontend-multi-account-acme","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/sample-app-frontend-multi-account-acme/README.md","sha":"70cacba00f9ed9f2b11ef2615fd9d27ef24558e6"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/sample-app-frontend-multi-account-acme/terragrunt.hcl","sha":"c423cc7a2fe3630db7c75a72ef212ba186ab3739"}]},{"name":"static-website","children":[{"name":"README.md","path":"dev/us-east-1/dev/services/static-website/README.md","sha":"c39ed7c607eb4d1313ea3892768bad09e7f39fd9"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/services/static-website/terragrunt.hcl","sha":"3329db273624fe437ef031ee4e42583aa13c2312"}]}]},{"name":"vpc","children":[{"name":"README.md","path":"dev/us-east-1/dev/vpc/README.md","sha":"9f2704ce60e42e8f3a603a376abb15135183d887"},{"name":"terragrunt.hcl","path":"dev/us-east-1/dev/vpc/terragrunt.hcl","sha":"aea95690d1f2f5d37e6781f718f4b132c7f509b1"}]}]},{"name":"mgmt","children":[{"name":"README.md","path":"dev/us-east-1/mgmt/README.md","sha":"8a131a11632b97fec18a5e344d5c721fce24b652"},{"name":"env.yaml","path":"dev/us-east-1/mgmt/env.yaml","sha":"b514ab3187ebfb5bf467c632f27a21f5a9611bfc"},{"name":"openvpn-server","children":[{"name":"README.md","path":"dev/us-east-1/mgmt/openvpn-server/README.md","sha":"aa6f4262ab6e2e98c4cc2bb76e0f53953dbefc86"},{"name":"terragrunt.hcl","path":"dev/us-east-1/mgmt/openvpn-server/terragrunt.hcl","sha":"c9373ed801250a4a3f727b77bb7ef026738226ac"}]},{"name":"vpc","children":[{"name":"README.md","path":"dev/us-east-1/mgmt/vpc/README.md","sha":"758f74748caa3cabf6230c214784445e0c1f7c97"},{"name":"terragrunt.hcl","path":"dev/us-east-1/mgmt/vpc/terragrunt.hcl","sha":"20f97f225446751b79f2283837d0d9d225ea3833"}]}]},{"name":"region.yaml","path":"dev/us-east-1/region.yaml","sha":"d56afa3d82e6cea0d792e84748de56dafb0bad70"}]}]},{"name":"master","children":[{"name":"_global","children":[{"name":"README.md","path":"master/_global/README.md","sha":"d1b8a96c00211751f079fa13cac1b3417d29bf09"},{"name":"cloudtrail","children":[{"name":"README.md","path":"master/_global/cloudtrail/README.md","sha":"65aac5742b3dc183d11a7d83a31ae69afe5df2e5"},{"name":"terragrunt.hcl","path":"master/_global/cloudtrail/terragrunt.hcl","sha":"fb19b4438de2ba919d17f3e4a6ccb3c9f2517f26"}]},{"name":"iam-cross-account","children":[{"name":"README.md","path":"master/_global/iam-cross-account/README.md","sha":"6bf06985be74cf68085a78728c41cf88fc354141"},{"name":"terragrunt.hcl","path":"master/_global/iam-cross-account/terragrunt.hcl","sha":"0f540eaa0fa2fddb3c7afdead9cd4d4b71e77b11"}]},{"name":"iam-user-password-policy","children":[{"name":"README.md","path":"master/_global/iam-user-password-policy/README.md","sha":"d3240490ed6005924706f6dd8a1718747ebcd8d9"},{"name":"terragrunt.hcl","path":"master/_global/iam-user-password-policy/terragrunt.hcl","sha":"47b669ba52099812a6d52ed4fcdad48c5e32e91e"}]},{"name":"region.yaml","path":"master/_global/region.yaml","sha":"18b7823ed017b97431d58da7bcb9a4e31299272a"}]},{"name":"empty.yaml","path":"master/empty.yaml","sha":"5aa66daa40faeaef37eccb7b4b0fcc792233cd7b"},{"name":"terragrunt.hcl","path":"master/terragrunt.hcl","sha":"5d9ca2068ff75ac0532e01f3ec52b4051e419053"},{"name":"us-east-1","children":[{"name":"_global","children":[{"name":"README.md","path":"master/us-east-1/_global/README.md","sha":"37b828b038945a50e2e571ef1e755c4f9170e7cf"}]},{"name":"region.yaml","path":"master/us-east-1/region.yaml","sha":"d56afa3d82e6cea0d792e84748de56dafb0bad70"}]}]},{"name":"prod","children":[{"name":"_global","children":[{"name":"README.md","path":"prod/_global/README.md","sha":"d1b8a96c00211751f079fa13cac1b3417d29bf09"},{"name":"cloudtrail","children":[{"name":"README.md","path":"prod/_global/cloudtrail/README.md","sha":"65aac5742b3dc183d11a7d83a31ae69afe5df2e5"},{"name":"terragrunt.hcl","path":"prod/_global/cloudtrail/terragrunt.hcl","sha":"fb19b4438de2ba919d17f3e4a6ccb3c9f2517f26"}]},{"name":"iam-cross-account","children":[{"name":"README.md","path":"prod/_global/iam-cross-account/README.md","sha":"6bf06985be74cf68085a78728c41cf88fc354141"},{"name":"terragrunt.hcl","path":"prod/_global/iam-cross-account/terragrunt.hcl","sha":"96f6b058d3db5871b45cd9e9c05d2387f7fa8340"}]},{"name":"iam-user-password-policy","children":[{"name":"README.md","path":"prod/_global/iam-user-password-policy/README.md","sha":"d3240490ed6005924706f6dd8a1718747ebcd8d9"},{"name":"terragrunt.hcl","path":"prod/_global/iam-user-password-policy/terragrunt.hcl","sha":"47b669ba52099812a6d52ed4fcdad48c5e32e91e"}]},{"name":"region.yaml","path":"prod/_global/region.yaml","sha":"18b7823ed017b97431d58da7bcb9a4e31299272a"},{"name":"route53-public","children":[{"name":"README.md","path":"prod/_global/route53-public/README.md","sha":"69a24d1bb0eff2a66ca9be44c0dfc864f7086960"},{"name":"terragrunt.hcl","path":"prod/_global/route53-public/terragrunt.hcl","sha":"68ed9958a62546160f9007660857c5baa95ce12b"}]}]},{"name":"empty.yaml","path":"prod/empty.yaml","sha":"5aa66daa40faeaef37eccb7b4b0fcc792233cd7b"},{"name":"terragrunt.hcl","path":"prod/terragrunt.hcl","sha":"ba18847c5969b30159af5c87a05655d3e7dc7eb8"},{"name":"us-east-1","children":[{"name":"_global","children":[{"name":"README.md","path":"prod/us-east-1/_global/README.md","sha":"37b828b038945a50e2e571ef1e755c4f9170e7cf"},{"name":"kms-master-key","children":[{"name":"README.md","path":"prod/us-east-1/_global/kms-master-key/README.md","sha":"2de4ac69670b2bf16a3da13f4bff76b5b85891b7"},{"name":"terragrunt.hcl","path":"prod/us-east-1/_global/kms-master-key/terragrunt.hcl","sha":"5e19caaa42e506f2797048979d773f2fac5bce8a"}]},{"name":"sns-topics","children":[{"name":"README.md","path":"prod/us-east-1/_global/sns-topics/README.md","sha":"7926797c3094f0e708bd761d297589bd94be873e"},{"name":"terragrunt.hcl","path":"prod/us-east-1/_global/sns-topics/terragrunt.hcl","sha":"225cf4b3fe49af57c85a1e25b7942c72cf9e6853"}]}]},{"name":"mgmt","children":[{"name":"README.md","path":"prod/us-east-1/mgmt/README.md","sha":"8a131a11632b97fec18a5e344d5c721fce24b652"},{"name":"env.yaml","path":"prod/us-east-1/mgmt/env.yaml","sha":"b514ab3187ebfb5bf467c632f27a21f5a9611bfc"},{"name":"openvpn-server","children":[{"name":"README.md","path":"prod/us-east-1/mgmt/openvpn-server/README.md","sha":"271cbe2b6f59de9ce438ed4516393fd01d64b072"},{"name":"terragrunt.hcl","path":"prod/us-east-1/mgmt/openvpn-server/terragrunt.hcl","sha":"00af46905196d2216ca0e7d7e2767a86900514ea"}]},{"name":"vpc","children":[{"name":"README.md","path":"prod/us-east-1/mgmt/vpc/README.md","sha":"758f74748caa3cabf6230c214784445e0c1f7c97"},{"name":"terragrunt.hcl","path":"prod/us-east-1/mgmt/vpc/terragrunt.hcl","sha":"a3dbfb5bb3b55e6fcf452338c69e2fdab5aa6204"}]}]},{"name":"prod","children":[{"name":"README.md","path":"prod/us-east-1/prod/README.md","sha":"f15da18661ef3624d5f63deb288bad072e93df57"},{"name":"cloudwatch-dashboard","children":[{"name":"README.md","path":"prod/us-east-1/prod/cloudwatch-dashboard/README.md","sha":"01e60cd5e9f63892e09b1d7edfa7bea8fd7d0a3d"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/cloudwatch-dashboard/terragrunt.hcl","sha":"fe0a59a0885dd19898acfd6b65b290e5b6bf279c"}]},{"name":"data-stores","children":[{"name":"elk-multi-cluster","children":[{"name":"README.md","path":"prod/us-east-1/prod/data-stores/elk-multi-cluster/README.md","sha":"b59860709b8ef7bc7746c0bd9e9a1a21d02142c8"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/data-stores/elk-multi-cluster/terragrunt.hcl","sha":"ad3c96134476a81696c73807021c875283c3dfd1"}]},{"name":"kafka","children":[{"name":"README.md","path":"prod/us-east-1/prod/data-stores/kafka/README.md","sha":"72582bdb047da4f8820f45716977d5b962c17028"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/data-stores/kafka/terragrunt.hcl","sha":"c9e85c9678126c48a4cd6fc16cc55d523194b4d8"}]},{"name":"mysql","children":[{"name":"README.md","path":"prod/us-east-1/prod/data-stores/mysql/README.md","sha":"625773572c620dcddf722d0d0d206576f57f4af7"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/data-stores/mysql/terragrunt.hcl","sha":"e88eea81774f2ff43c6ba0f4929593b2adf80e20"}]},{"name":"redis","children":[{"name":"README.md","path":"prod/us-east-1/prod/data-stores/redis/README.md","sha":"5d82990da39b55e6ac7b3bbb442d4209e62dba1f"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/data-stores/redis/terragrunt.hcl","sha":"2ab5abad0edb89d10ffebb7c279a94b5e344bce6"}]},{"name":"zookeeper","children":[{"name":"README.md","path":"prod/us-east-1/prod/data-stores/zookeeper/README.md","sha":"87b4dda769ae63cffa851b6ccf2086b617bf989d"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/data-stores/zookeeper/terragrunt.hcl","sha":"e04f530614ac4913a702c2a18e38b4fa5a1f7848"}]}]},{"name":"env.yaml","path":"prod/us-east-1/prod/env.yaml","sha":"90e2d18e481b6e35ddc57391f752874ffc0058cf"},{"name":"lambda","children":[{"name":"long-running-scheduled","children":[{"name":"README.md","path":"prod/us-east-1/prod/lambda/long-running-scheduled/README.md","sha":"274c405a65d60c6a253ca2cf24863e1025402874"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/lambda/long-running-scheduled/terragrunt.hcl","sha":"72518b7089bd107c05c281372f3cccd6d7a6a628"}]},{"name":"s3-image-processing","children":[{"name":"README.md","path":"prod/us-east-1/prod/lambda/s3-image-processing/README.md","sha":"d7e48256e90edb0896769e4bd537c22e34c42f22"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/lambda/s3-image-processing/terragrunt.hcl","sha":"87d070e374ab2b7a6860167650e26c0fc73b486a"}]}]},{"name":"networking","children":[{"name":"alb-internal","children":[{"name":"README.md","path":"prod/us-east-1/prod/networking/alb-internal/README.md","sha":"21e850d1bbe25ca3b16114b8f58d08086a687916"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/networking/alb-internal/terragrunt.hcl","sha":"cc5feacf99eebd2cd695507d9169037599c763e5"}]},{"name":"alb-public","children":[{"name":"README.md","path":"prod/us-east-1/prod/networking/alb-public/README.md","sha":"21e850d1bbe25ca3b16114b8f58d08086a687916"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/networking/alb-public/terragrunt.hcl","sha":"03af1d8d3f8a860dc443addbf610f5934f7869eb"}]},{"name":"route53-private","children":[{"name":"README.md","path":"prod/us-east-1/prod/networking/route53-private/README.md","sha":"c93f222ed15cae75ec411a4b005ad4da32548c42"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/networking/route53-private/terragrunt.hcl","sha":"f7e7c4b437c11b0340c682314deb9b08aca3a854"}]}]},{"name":"services","children":[{"name":"ecs-cluster","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/ecs-cluster/README.md","sha":"d9e015edbbcd8f9e200fb00a5dde7fc7f466cd3c"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/ecs-cluster/terragrunt.hcl","sha":"b0eef93fabce97dfe098d6e18677fd3b1839d009"}]},{"name":"eks-cluster","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/eks-cluster/README.md","sha":"239bc9a333f256845a90c786c00cd6789000bd9d"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/eks-cluster/terragrunt.hcl","sha":"6cd702f65352efa6710f63842666cd214b9e4109"}]},{"name":"eks-core-services","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/eks-core-services/README.md","sha":"66fbf40d9982d63707eb1e7c60d78bc4aa659a0b"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/eks-core-services/terragrunt.hcl","sha":"3ba3473cbb4c7cd83fb23f3fa18ca624bc9de5aa"}]},{"name":"k8s-applications-namespace","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/k8s-applications-namespace/README.md","sha":"39887806598180d75b0b0b0a46ea4418d75af8f1"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/k8s-applications-namespace/terragrunt.hcl","sha":"c9d638ac7e6367e974db2dbdf2ffc8f17473fb91"}]},{"name":"k8s-sample-app-backend-multi-account-acme","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/k8s-sample-app-backend-multi-account-acme/README.md","sha":"b7524c6453a2e3bf441c953de7236ab6273e2c0f"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/k8s-sample-app-backend-multi-account-acme/terragrunt.hcl","sha":"e8b8df48ed310a08be55d5d3d07af9dc20fe7c12"}]},{"name":"k8s-sample-app-frontend-multi-account-acme","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/k8s-sample-app-frontend-multi-account-acme/README.md","sha":"17ee9c75e9fdea8d4295ad45f2fb8a46d9241e47"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/k8s-sample-app-frontend-multi-account-acme/terragrunt.hcl","sha":"cab54c75aa28d2d0a1df465e3e4272fc7a154adb"}]},{"name":"sample-app-backend-multi-account-acme-asg","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/sample-app-backend-multi-account-acme-asg/README.md","sha":"b848e55fea0f16a9b7ccf9c1366c6b56c9966a7a"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/sample-app-backend-multi-account-acme-asg/terragrunt.hcl","sha":"3bc70a7302b813667b0d9b9a19d888ce7a53e711"}]},{"name":"sample-app-backend-multi-account-acme","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/sample-app-backend-multi-account-acme/README.md","sha":"f0910e01d79209f26d65fdb1e6de428fa26f9eb6"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/sample-app-backend-multi-account-acme/terragrunt.hcl","sha":"f6f9ecf019df9635b4a68f42816d37f1ef4722c3"}]},{"name":"sample-app-beanstalk","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/sample-app-beanstalk/README.md","sha":"a6f2e03ce14753bb39e48fbf350c4aeb3aa3e6c9"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/sample-app-beanstalk/terragrunt.hcl","sha":"aa974300d961214d4a76f729b87e3d6d1dc90107"}]},{"name":"sample-app-frontend-multi-account-acme-asg","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/sample-app-frontend-multi-account-acme-asg/README.md","sha":"a5291ba90a48e7087a2fa7e24f41f1e4f4d43a79"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/sample-app-frontend-multi-account-acme-asg/terragrunt.hcl","sha":"c7cdbcf4cc8effe73a0130cf07a7f5da8cca0f23"}]},{"name":"sample-app-frontend-multi-account-acme","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/sample-app-frontend-multi-account-acme/README.md","sha":"691ef675dbcdb807391b0e2b8547c9f260cc12c6"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/sample-app-frontend-multi-account-acme/terragrunt.hcl","sha":"f0137a766733b3575863a74230dfc92ec0c94cd0"}]},{"name":"static-website","children":[{"name":"README.md","path":"prod/us-east-1/prod/services/static-website/README.md","sha":"c39ed7c607eb4d1313ea3892768bad09e7f39fd9"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/services/static-website/terragrunt.hcl","sha":"d5879453a53db71287dad837ed32e7d9b59d120e"}]}]},{"name":"vpc","children":[{"name":"README.md","path":"prod/us-east-1/prod/vpc/README.md","sha":"934095e18b4fcdb217ba8a0192c2c65e6fafb989"},{"name":"terragrunt.hcl","path":"prod/us-east-1/prod/vpc/terragrunt.hcl","sha":"521968dd6fb563a01f26d8b4662fbf4624cd21a0"}]}]},{"name":"region.yaml","path":"prod/us-east-1/region.yaml","sha":"d56afa3d82e6cea0d792e84748de56dafb0bad70"}]}]},{"name":"security","children":[{"name":"_global","children":[{"name":"README.md","path":"security/_global/README.md","sha":"d1b8a96c00211751f079fa13cac1b3417d29bf09"},{"name":"cloudtrail","children":[{"name":"README.md","path":"security/_global/cloudtrail/README.md","sha":"65aac5742b3dc183d11a7d83a31ae69afe5df2e5"},{"name":"terragrunt.hcl","path":"security/_global/cloudtrail/terragrunt.hcl","sha":"880d875fa813a2ec594b9a8ef15eb431bf540fa4"}]},{"name":"iam-cross-account","children":[{"name":"README.md","path":"security/_global/iam-cross-account/README.md","sha":"6bf06985be74cf68085a78728c41cf88fc354141"},{"name":"terragrunt.hcl","path":"security/_global/iam-cross-account/terragrunt.hcl","sha":"fef1fc1992f71bf1e0707301a038457d70ec918c"}]},{"name":"iam-groups","children":[{"name":"README.md","path":"security/_global/iam-groups/README.md","sha":"93a0e35d82a328def8047539ce7d987ab062d292"},{"name":"terragrunt.hcl","path":"security/_global/iam-groups/terragrunt.hcl","sha":"d1398a63fe6180c591186343e390e4ca1ab45085"}]},{"name":"iam-user-password-policy","children":[{"name":"README.md","path":"security/_global/iam-user-password-policy/README.md","sha":"d3240490ed6005924706f6dd8a1718747ebcd8d9"},{"name":"terragrunt.hcl","path":"security/_global/iam-user-password-policy/terragrunt.hcl","sha":"47b669ba52099812a6d52ed4fcdad48c5e32e91e"}]},{"name":"region.yaml","path":"security/_global/region.yaml","sha":"18b7823ed017b97431d58da7bcb9a4e31299272a"}]},{"name":"empty.yaml","path":"security/empty.yaml","sha":"5aa66daa40faeaef37eccb7b4b0fcc792233cd7b"},{"name":"terragrunt.hcl","path":"security/terragrunt.hcl","sha":"6cb54cf9410ee6cec86c946669e5cbe8348e7e5b"}]},{"name":"shared-services","children":[{"name":"_global","children":[{"name":"README.md","path":"shared-services/_global/README.md","sha":"d1b8a96c00211751f079fa13cac1b3417d29bf09"},{"name":"cloudtrail","children":[{"name":"README.md","path":"shared-services/_global/cloudtrail/README.md","sha":"65aac5742b3dc183d11a7d83a31ae69afe5df2e5"},{"name":"terragrunt.hcl","path":"shared-services/_global/cloudtrail/terragrunt.hcl","sha":"fb19b4438de2ba919d17f3e4a6ccb3c9f2517f26"}]},{"name":"iam-cross-account","children":[{"name":"README.md","path":"shared-services/_global/iam-cross-account/README.md","sha":"6bf06985be74cf68085a78728c41cf88fc354141"},{"name":"terragrunt.hcl","path":"shared-services/_global/iam-cross-account/terragrunt.hcl","sha":"0f540eaa0fa2fddb3c7afdead9cd4d4b71e77b11"}]},{"name":"iam-user-password-policy","children":[{"name":"README.md","path":"shared-services/_global/iam-user-password-policy/README.md","sha":"d3240490ed6005924706f6dd8a1718747ebcd8d9"},{"name":"terragrunt.hcl","path":"shared-services/_global/iam-user-password-policy/terragrunt.hcl","sha":"47b669ba52099812a6d52ed4fcdad48c5e32e91e"}]},{"name":"region.yaml","path":"shared-services/_global/region.yaml","sha":"18b7823ed017b97431d58da7bcb9a4e31299272a"},{"name":"route53-public","children":[{"name":"README.md","path":"shared-services/_global/route53-public/README.md","sha":"69a24d1bb0eff2a66ca9be44c0dfc864f7086960"},{"name":"terragrunt.hcl","path":"shared-services/_global/route53-public/terragrunt.hcl","sha":"68ed9958a62546160f9007660857c5baa95ce12b"}]}]},{"name":"empty.yaml","path":"shared-services/empty.yaml","sha":"5aa66daa40faeaef37eccb7b4b0fcc792233cd7b"},{"name":"terragrunt.hcl","path":"shared-services/terragrunt.hcl","sha":"69470dec0813da115863dbffed34fe6f1ecc3c8e"},{"name":"us-east-1","children":[{"name":"_global","children":[{"name":"README.md","path":"shared-services/us-east-1/_global/README.md","sha":"37b828b038945a50e2e571ef1e755c4f9170e7cf"},{"name":"ecr-repos","children":[{"name":"README.md","path":"shared-services/us-east-1/_global/ecr-repos/README.md","sha":"050f270033456c0a3285056f41a4427ec4ca1db1"},{"name":"terragrunt.hcl","path":"shared-services/us-east-1/_global/ecr-repos/terragrunt.hcl","sha":"0aebd1fe76c536af522f7af783dae529637f5a2b"}]},{"name":"kms-master-key","children":[{"name":"README.md","path":"shared-services/us-east-1/_global/kms-master-key/README.md","sha":"8923e2581297b44e53b3a50b23505b7e0bf85f9e"},{"name":"terragrunt.hcl","path":"shared-services/us-east-1/_global/kms-master-key/terragrunt.hcl","sha":"e3d3456c830e33007018dfa0444e1bb20950e327"}]},{"name":"sns-topics","children":[{"name":"README.md","path":"shared-services/us-east-1/_global/sns-topics/README.md","sha":"7926797c3094f0e708bd761d297589bd94be873e"},{"name":"terragrunt.hcl","path":"shared-services/us-east-1/_global/sns-topics/terragrunt.hcl","sha":"225cf4b3fe49af57c85a1e25b7942c72cf9e6853"}]}]},{"name":"mgmt","children":[{"name":"README.md","path":"shared-services/us-east-1/mgmt/README.md","sha":"8a131a11632b97fec18a5e344d5c721fce24b652"},{"name":"env.yaml","path":"shared-services/us-east-1/mgmt/env.yaml","sha":"b514ab3187ebfb5bf467c632f27a21f5a9611bfc"},{"name":"jenkins","children":[{"name":"README.md","path":"shared-services/us-east-1/mgmt/jenkins/README.md","sha":"c67253232ed9a8a685ca1659c887ae60416f2998"},{"name":"terragrunt.hcl","path":"shared-services/us-east-1/mgmt/jenkins/terragrunt.hcl","sha":"f75d4c6b36c07a20f69863e69e41b2902658fd47"}]},{"name":"openvpn-server","children":[{"name":"README.md","path":"shared-services/us-east-1/mgmt/openvpn-server/README.md","sha":"523ded2b928a312657e689db78730315ad66633b"},{"name":"terragrunt.hcl","path":"shared-services/us-east-1/mgmt/openvpn-server/terragrunt.hcl","sha":"c4f4e0a9021527bf53fe18a62814ca30ce726649"}]},{"name":"vpc","children":[{"name":"README.md","path":"shared-services/us-east-1/mgmt/vpc/README.md","sha":"758f74748caa3cabf6230c214784445e0c1f7c97"},{"name":"terragrunt.hcl","path":"shared-services/us-east-1/mgmt/vpc/terragrunt.hcl","sha":"29ff68537a532e119786f868bb2a709839792e90"}]}]},{"name":"region.yaml","path":"shared-services/us-east-1/region.yaml","sha":"d56afa3d82e6cea0d792e84748de56dafb0bad70"}]}]},{"name":"stage","children":[{"name":"_global","children":[{"name":"README.md","path":"stage/_global/README.md","sha":"d1b8a96c00211751f079fa13cac1b3417d29bf09"},{"name":"cloudtrail","children":[{"name":"README.md","path":"stage/_global/cloudtrail/README.md","sha":"65aac5742b3dc183d11a7d83a31ae69afe5df2e5"},{"name":"terragrunt.hcl","path":"stage/_global/cloudtrail/terragrunt.hcl","sha":"fb19b4438de2ba919d17f3e4a6ccb3c9f2517f26"}]},{"name":"iam-cross-account","children":[{"name":"README.md","path":"stage/_global/iam-cross-account/README.md","sha":"6bf06985be74cf68085a78728c41cf88fc354141"},{"name":"terragrunt.hcl","path":"stage/_global/iam-cross-account/terragrunt.hcl","sha":"96f6b058d3db5871b45cd9e9c05d2387f7fa8340"}]},{"name":"iam-user-password-policy","children":[{"name":"README.md","path":"stage/_global/iam-user-password-policy/README.md","sha":"d3240490ed6005924706f6dd8a1718747ebcd8d9"},{"name":"terragrunt.hcl","path":"stage/_global/iam-user-password-policy/terragrunt.hcl","sha":"47b669ba52099812a6d52ed4fcdad48c5e32e91e"}]},{"name":"region.yaml","path":"stage/_global/region.yaml","sha":"18b7823ed017b97431d58da7bcb9a4e31299272a"},{"name":"route53-public","children":[{"name":"README.md","path":"stage/_global/route53-public/README.md","sha":"69a24d1bb0eff2a66ca9be44c0dfc864f7086960"},{"name":"terragrunt.hcl","path":"stage/_global/route53-public/terragrunt.hcl","sha":"68ed9958a62546160f9007660857c5baa95ce12b"}]}]},{"name":"empty.yaml","path":"stage/empty.yaml","sha":"5aa66daa40faeaef37eccb7b4b0fcc792233cd7b"},{"name":"terragrunt.hcl","path":"stage/terragrunt.hcl","sha":"e2506d916b6362dfc1aa0192b71f388a72e79568"},{"name":"us-east-1","children":[{"name":"_global","children":[{"name":"README.md","path":"stage/us-east-1/_global/README.md","sha":"37b828b038945a50e2e571ef1e755c4f9170e7cf"},{"name":"kms-master-key","children":[{"name":"README.md","path":"stage/us-east-1/_global/kms-master-key/README.md","sha":"2ce8a7cdc4864091ba55cc930ad4e6f8dc29d535"},{"name":"terragrunt.hcl","path":"stage/us-east-1/_global/kms-master-key/terragrunt.hcl","sha":"c0c2f65c3cf60fc59e6646347d4458001a116e6b"}]},{"name":"sns-topics","children":[{"name":"README.md","path":"stage/us-east-1/_global/sns-topics/README.md","sha":"7926797c3094f0e708bd761d297589bd94be873e"},{"name":"terragrunt.hcl","path":"stage/us-east-1/_global/sns-topics/terragrunt.hcl","sha":"225cf4b3fe49af57c85a1e25b7942c72cf9e6853"}]}]},{"name":"mgmt","children":[{"name":"README.md","path":"stage/us-east-1/mgmt/README.md","sha":"8a131a11632b97fec18a5e344d5c721fce24b652"},{"name":"env.yaml","path":"stage/us-east-1/mgmt/env.yaml","sha":"b514ab3187ebfb5bf467c632f27a21f5a9611bfc"},{"name":"openvpn-server","children":[{"name":"README.md","path":"stage/us-east-1/mgmt/openvpn-server/README.md","sha":"5dcede127b26b8cfc2ed78cd1450ec7dd7d66d18"},{"name":"terragrunt.hcl","path":"stage/us-east-1/mgmt/openvpn-server/terragrunt.hcl","sha":"af54f724d3ee040688035af9ae0f41154a7dbc1c"}]},{"name":"vpc","children":[{"name":"README.md","path":"stage/us-east-1/mgmt/vpc/README.md","sha":"758f74748caa3cabf6230c214784445e0c1f7c97"},{"name":"terragrunt.hcl","path":"stage/us-east-1/mgmt/vpc/terragrunt.hcl","sha":"b2016650621679f7b9f99b93806cc0b8efb149ac"}]}]},{"name":"region.yaml","path":"stage/us-east-1/region.yaml","sha":"d56afa3d82e6cea0d792e84748de56dafb0bad70"},{"name":"stage","children":[{"name":"README.md","path":"stage/us-east-1/stage/README.md","sha":"b24ba21bf01baf19ff84a2de457697a757d905c5"},{"name":"cloudwatch-dashboard","children":[{"name":"README.md","path":"stage/us-east-1/stage/cloudwatch-dashboard/README.md","sha":"01e60cd5e9f63892e09b1d7edfa7bea8fd7d0a3d"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/cloudwatch-dashboard/terragrunt.hcl","sha":"01ed95b4b404eda346293dbe5eb78b9a74f2f5bb"}]},{"name":"data-stores","children":[{"name":"elk-single-cluster","children":[{"name":"README.md","path":"stage/us-east-1/stage/data-stores/elk-single-cluster/README.md","sha":"a90283b9240f67c38dd1bd77755a8162fa6f3999"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/data-stores/elk-single-cluster/terragrunt.hcl","sha":"7818782091e335360279369b391a3401703ddedd"}]},{"name":"kafka","children":[{"name":"README.md","path":"stage/us-east-1/stage/data-stores/kafka/README.md","sha":"72582bdb047da4f8820f45716977d5b962c17028"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/data-stores/kafka/terragrunt.hcl","sha":"26d778dddca07ead27d37e481a897659d7cec7d2"}]},{"name":"mysql","children":[{"name":"README.md","path":"stage/us-east-1/stage/data-stores/mysql/README.md","sha":"625773572c620dcddf722d0d0d206576f57f4af7"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/data-stores/mysql/terragrunt.hcl","sha":"35991621a16fb4cc8443fdf2695c23d3e658c5ac"}]},{"name":"redis","children":[{"name":"README.md","path":"stage/us-east-1/stage/data-stores/redis/README.md","sha":"5d82990da39b55e6ac7b3bbb442d4209e62dba1f"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/data-stores/redis/terragrunt.hcl","sha":"79ef1e07fde2d0dcb9673d653089da8fb3fa449a"}]},{"name":"zookeeper","children":[{"name":"README.md","path":"stage/us-east-1/stage/data-stores/zookeeper/README.md","sha":"87b4dda769ae63cffa851b6ccf2086b617bf989d"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/data-stores/zookeeper/terragrunt.hcl","sha":"045e1d8802b8b1dc93070a80d98da5b917dec655"}]}]},{"name":"env.yaml","path":"stage/us-east-1/stage/env.yaml","sha":"5767506e27e978f52524dadbbd8fb9f8ad115599"},{"name":"lambda","children":[{"name":"long-running-scheduled","children":[{"name":"README.md","path":"stage/us-east-1/stage/lambda/long-running-scheduled/README.md","sha":"274c405a65d60c6a253ca2cf24863e1025402874"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/lambda/long-running-scheduled/terragrunt.hcl","sha":"72518b7089bd107c05c281372f3cccd6d7a6a628"}]},{"name":"s3-image-processing","children":[{"name":"README.md","path":"stage/us-east-1/stage/lambda/s3-image-processing/README.md","sha":"d7e48256e90edb0896769e4bd537c22e34c42f22"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/lambda/s3-image-processing/terragrunt.hcl","sha":"02a23cc6f220d8301d40f7616d1e17f9e17448a5"}]}]},{"name":"networking","children":[{"name":"alb-internal","children":[{"name":"README.md","path":"stage/us-east-1/stage/networking/alb-internal/README.md","sha":"9ee564202c79754713107e2c3644c9cb3815922e"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/networking/alb-internal/terragrunt.hcl","sha":"9537dc7cb6dc7c9eb929a0b97a6f89025e042e57"}]},{"name":"alb-public","children":[{"name":"README.md","path":"stage/us-east-1/stage/networking/alb-public/README.md","sha":"9ee564202c79754713107e2c3644c9cb3815922e"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/networking/alb-public/terragrunt.hcl","sha":"8ea93d9b8dafad1fc2044a677dd9d0db8d768a55"}]},{"name":"route53-private","children":[{"name":"README.md","path":"stage/us-east-1/stage/networking/route53-private/README.md","sha":"c93f222ed15cae75ec411a4b005ad4da32548c42"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/networking/route53-private/terragrunt.hcl","sha":"f7e7c4b437c11b0340c682314deb9b08aca3a854"}]}]},{"name":"services","children":[{"name":"ecs-cluster","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/ecs-cluster/README.md","sha":"a4970def6876c873e8f722cbb4ff168d5b95d97d"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/ecs-cluster/terragrunt.hcl","sha":"a42cc57f67f8a9ee2bf5bfce1fb58ea96f5e48f5"}]},{"name":"eks-cluster","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/eks-cluster/README.md","sha":"3c63107a058eeb5b3118b4c569ee867c366c2762"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/eks-cluster/terragrunt.hcl","sha":"ec2a56580f4fbe9d5ea53b4a7bc0768a7ae90029"}]},{"name":"eks-core-services","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/eks-core-services/README.md","sha":"bdfb014e5d96aff7bfcb36d6b07bd20a30ddccf1"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/eks-core-services/terragrunt.hcl","sha":"4c1aecc3ec52837b98978ec6fc1cd8d5564763ae"}]},{"name":"k8s-applications-namespace","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/k8s-applications-namespace/README.md","sha":"41a7a39dea2f5278e9cc05d7c52eb0144fac15d1"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/k8s-applications-namespace/terragrunt.hcl","sha":"3665bac8be17e73ab034e2f32017c69ef209b2af"}]},{"name":"k8s-sample-app-backend-multi-account-acme","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/k8s-sample-app-backend-multi-account-acme/README.md","sha":"184f8a011d291db3558dbdbb0f9d8f0f12d5d888"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/k8s-sample-app-backend-multi-account-acme/terragrunt.hcl","sha":"9ea86835ea625bbc341b4d8cbfbcd9b954c4feb5"}]},{"name":"k8s-sample-app-frontend-multi-account-acme","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/k8s-sample-app-frontend-multi-account-acme/README.md","sha":"bf4f271d1b7d4e933a0919ee373289b03c9380fb"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/k8s-sample-app-frontend-multi-account-acme/terragrunt.hcl","sha":"b53766ca7b1cf18f27c115d086e3aebf697ee5f3"}]},{"name":"sample-app-backend-multi-account-acme-asg","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/sample-app-backend-multi-account-acme-asg/README.md","sha":"3b3779fb30149fb17d27b9d07ff46890645744b1"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/sample-app-backend-multi-account-acme-asg/terragrunt.hcl","sha":"2b1ddfe35699ecff6ee4e8c164ad4c9e00d224da"}]},{"name":"sample-app-backend-multi-account-acme","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/sample-app-backend-multi-account-acme/README.md","sha":"bc6fda688883bd02ec06de1dbf3abd0d7537970b"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/sample-app-backend-multi-account-acme/terragrunt.hcl","sha":"1dd22075941f49b593bc9bfb03f616ac8004a06d"}]},{"name":"sample-app-beanstalk","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/sample-app-beanstalk/README.md","sha":"ca960ca9cf3f71d783b3fd4478503e3bdbdb5690"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/sample-app-beanstalk/terragrunt.hcl","sha":"4360debb24de5f877a88782858260326f9d72dbd"}]},{"name":"sample-app-frontend-multi-account-acme-asg","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/sample-app-frontend-multi-account-acme-asg/README.md","sha":"ebd62ba824756666250d5a5c062c21a01a6a30cb"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/sample-app-frontend-multi-account-acme-asg/terragrunt.hcl","sha":"e0efa40fe276041d8bea4a543144a5591cfcead5"}]},{"name":"sample-app-frontend-multi-account-acme","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/sample-app-frontend-multi-account-acme/README.md","sha":"0ce40b08cc42cacd1d1b5652d7a98c07e3a17172"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/sample-app-frontend-multi-account-acme/terragrunt.hcl","sha":"2507d6e2e44be9e18a120c45b083b901f98a4cf9"}]},{"name":"static-website","children":[{"name":"README.md","path":"stage/us-east-1/stage/services/static-website/README.md","sha":"c39ed7c607eb4d1313ea3892768bad09e7f39fd9"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/services/static-website/terragrunt.hcl","sha":"5dcb8cc0d74456bfa9756c29cbc70118b7c894ed"}]}]},{"name":"vpc","children":[{"name":"README.md","path":"stage/us-east-1/stage/vpc/README.md","sha":"e037370db683520d7d593adddc2125ef3798d801"},{"name":"terragrunt.hcl","path":"stage/us-east-1/stage/vpc/terragrunt.hcl","sha":"96c7ebd950aea8d3e7d6767609e9419ef407db4f"}]}]}]}]}]},"detailsContent":"<h1 class=\"preview__body--title\" id=\"ssh-and-vpn\">SSH and VPN</h1><div class=\"preview__body--border\"></div><p>In the previous section, you saw how to use <a href=\"/repos/v0.0.1-20210527/infrastructure-live-multi-account-acme/_docs/07-monitoring-alerting-logging.md\" class=\"preview__body--description--blue\">Monitoring, Alerting, and Logging</a> to\ndiagnose issues. Sometimes, that's not enough, and you need to connect directly to your servers using:</p>\n<ul>\n<li><a href=\"#ssh\" class=\"preview__body--description--blue\">SSH</a></li>\n<li><a href=\"#vpn\" class=\"preview__body--description--blue\">VPN</a></li>\n</ul>\n<h2 class=\"preview__body--subtitle\" id=\"ssh\">SSH</h2>\n<p>You can use SSH to connect to any of your EC2 Instances as follows:</p>\n<ul>\n<li><a href=\"#the-traditional-way-ec2-key-pairs\" class=\"preview__body--description--blue\">The traditional way: EC2 Key Pairs</a></li>\n<li><a href=\"#the-better-way-ssh-grunt\" class=\"preview__body--description--blue\">The better way: ssh-grunt</a></li>\n</ul>\n<h3 class=\"preview__body--subtitle\" id=\"the-traditional-way-ec-2-key-pairs\">The traditional way: EC2 Key Pairs</h3>\n<p>When you launch an EC2 Instance in AWS, you can specify an <a href=\"http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html\" class=\"preview__body--description--blue\" target=\"_blank\">EC2 Key Pair</a> that can be used to SSH into the EC2 Instance.\nThis suffers from an important problem: usually more than one person needs access to the EC2 Instance, which means\nyou have to share this key with others. Sharing secrets of this sort is a security risk. Moreover, if someone leaves the\ncompany, to ensure they no longer have access, you'd have to change the Key Pair, which requires redeploying all of your\nservers.</p>\n<h3 class=\"preview__body--subtitle\" id=\"the-better-way-ssh-grunt\">The better way: ssh-grunt</h3>\n<p>To solve the "key sharing" problem, Gruntwork implemented <a href=\"/repos/module-security/modules/ssh-grunt\" class=\"preview__body--description--blue\">ssh-grunt</a>, a tool that enables each member of your\nteam to log in to every EC2 Instance with their own IAM user name and their own SSH key. Here's how it works:</p>\n<h4 id=\"one-time-setup\">One-Time Setup</h4>\n<ol>\n<li>\n<p>Log in to the AWS Web Console with your IAM User account.</p>\n</li>\n<li>\n<p>Go to your IAM User profile page, select the <strong>Security credentials</strong> tab, and click <strong>Upload SSH public key</strong>.\nNow upload your <em>public</em> SSH key (e.g. <code>~/.ssh/id_rsa.pub</code>). Do NOT upload your private key.</p>\n</li>\n<li>\n<p>Now make sure your IAM User account is a member of either the <code>ssh-grunt-users</code> or <code>ssh-grunt-sudo-users</code> group.\nBy being a member of one of these IAM Groups, any EC2 Instance configured to use these IAM Groups will permit\nyou to login as either a non-<code>sudo</code> user or <code>sudo</code> user, depending on which IAM Group you're in.</p>\n</li>\n<li>\n<p>Note that your linux username is based on your IAM User name according to the <a href=\"/repos/module-security/modules/ssh-grunt#syncing-users-from-iam\" class=\"preview__body--description--blue\">ssh-grunt guidelines</a>. For example:</p>\n<ul>\n<li>The IAM User name <code>josh</code> will be the linux username <code>josh</code>.</li>\n<li>The IAM User name <code>josh@gruntwork.io</code> will be the linux username <code>josh</code></li>\n<li>The IAM User name <code>_gruntwork.josh.padnick</code> will be the linux username <code>gruntwork_josh_padnick</code>.</li>\n</ul>\n</li>\n</ol>\n<p>For more information, see the <a href=\"/repos/module-security/modules/ssh-grunt#how-it-works\" class=\"preview__body--description--blue\">ssh-grunt documentation</a></p>\n<h4 id=\"ssh-to-an-ec-2-instance\">SSH to an EC2 Instance</h4>\n<p>As an example, suppose that:</p>\n<ul>\n<li>Your IAM User name is <code>josh</code>.</li>\n<li>You've uploaded your public SSH key to your IAM User profile.</li>\n<li>Your private key is located at <code>/Users/josh/.ssh/id_rsa</code> on your local machine.</li>\n<li>Your EC2 Instance's IP address is <code>1.2.3.4</code>.</li>\n</ul>\n<p>Then you can SSH to the EC2 Instance as follows:</p>\n<pre><span class=\"hljs-comment\"># Do this once to load your SSH Key into the SSH Agent</span>\nssh-add /Users/josh/.ssh/id_rsa\n\n<span class=\"hljs-comment\"># Every time you want to login to an EC2 Instance, use this command</span>\nssh josh@<span class=\"hljs-number\">1.2</span>.<span class=\"hljs-number\">3.4</span>\n</pre>\n<h2 class=\"preview__body--subtitle\" id=\"vpn\">VPN</h2>\n<p>For security reasons, just about all of your EC2 Instances run in private subnets, which means they do not have a\npublic IP address, and cannot be reached directly from the public Internet. This reduces the "surface area" that\nattackers can reach. Of course, we still need access into the VPCs, so we expose a single entrypoint into the network:\nan <a href=\"https://openvpn.net/\" class=\"preview__body--description--blue\" target=\"_blank\">OpenVPN server</a>.</p>\n<p>The idea is that you use an OpenVPN client to connect to the OpenVPN server, which gets you "in" to the network, and\nyou can then connect to other resources in the account as if you were making requests from the OpenVPN server itself.</p>\n<p>Here are the steps you'll need to take:</p>\n<ul>\n<li><a href=\"#vpn-one-time-setup\" class=\"preview__body--description--blue\">One-time setup</a></li>\n<li><a href=\"#connect-to-the-openvpn-server\" class=\"preview__body--description--blue\">Connect to the OpenVPN server</a></li>\n<li><a href=\"#connect-to-other-resources\" class=\"preview__body--description--blue\">Connect to other resources</a></li>\n</ul>\n<h3 class=\"preview__body--subtitle\" id=\"vpn-one-time-setup\">VPN one-time setup</h3>\n<p>The very first time you want to use OpenVPN, you need to:</p>\n<ul>\n<li><a href=\"#install-an-openvpn-client\" class=\"preview__body--description--blue\">Install an OpenVPN client</a></li>\n<li><a href=\"#join-the-openvpn-iam-group\" class=\"preview__body--description--blue\">Join the OpenVPN IAM group</a></li>\n<li><a href=\"#use-openvpn-admin-to-generate-a-configuration-file\" class=\"preview__body--description--blue\">Use openvpn-admin to generate a configuration file</a></li>\n</ul>\n<h4 id=\"install-an-open-vpn-client\">Install an OpenVPN client</h4>\n<p>There are free and paid OpenVPN clients available for most major operating systems:</p>\n<ul>\n<li><strong>OS X</strong>: <a href=\"https://tunnelblick.net/\" class=\"preview__body--description--blue\" target=\"_blank\">Tunnelblick</a> or <a href=\"https://www.sparklabs.com/viscosity/\" class=\"preview__body--description--blue\" target=\"_blank\">Viscosity</a>.</li>\n<li><strong>Windows</strong>: <a href=\"https://openvpn.net/index.php/open-source/downloads.html\" class=\"preview__body--description--blue\" target=\"_blank\">official client</a>.</li>\n<li><strong>Linux</strong>: <code>apt-get install openvpn</code> or <code>yum install openvpn</code>.</li>\n</ul>\n<h4 id=\"join-the-open-vpn-iam-group\">Join the OpenVPN IAM group</h4>\n<p>To get access to an OpenVPN server, your IAM user need access to SQS queues used by that OpenVPN server. Since our\nIAM users are defined in one AWS account (security) and the OpenVPN servers are defined in separate AWS accounts\n(stage, prod, etc), that means you need to "switch" to the accounts with the OpenVPN servers by assuming an IAM role\nthat has access to the SQS queues in those accounts.</p>\n<p>To be able to assume an IAM role, your IAM user needs to be part of an IAM group with the proper permissions, such as\n<code>_account.xxx-full-access</code> or <code>_account.xxx-openvpn-users</code>, where <code>xxx</code> is the name of the account you want to access\n(<code>stage</code>, <code>prod</code>, etc).</p>\n<h4 id=\"use-openvpn-admin-to-generate-a-configuration-file\">Use openvpn-admin to generate a configuration file</h4>\n<p>To connect to an OpenVPN server, you need an OpenVPN configuration file, which includes a certificate that you can use\nto authenticate. To generate this configuration file, do the following:</p>\n<ol>\n<li>\n<p>Install the latest <a href=\"#open_modal\" class=\"preview__body--description--blue\">openvpn-admin binary</a> for your OS.</p>\n</li>\n<li>\n<p>Set up your AWS credentials using any of the options supported by <a href=\"http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html\" class=\"preview__body--description--blue\" target=\"_blank\">AWS CLI\ntools</a>. Typically, environment\nvariables are the easiest and most secure.</p>\n</li>\n<li>\n<p>Use <a href=\"/repos/module-security/modules/aws-auth\" class=\"preview__body--description--blue\">aws-auth</a> to assume an IAM role\nin the AWS account with the OpenVPN server. This IAM role must have access to the SQS queues used by OpenVPN server.\nTypically, the <code>allow-full-access-from-other-accounts</code> or <code>openvpn-server-allow-certificate-requests-for-external-accounts</code>\nIAM role is what you want. For example, if your prod account had account ID 1111111111111, you would run:</p>\n<pre>aws-auth --role-arn <span class=\"hljs-symbol\">arn:</span><span class=\"hljs-symbol\">aws:</span>iam::<span class=\"hljs-number\">1111111111111</span><span class=\"hljs-symbol\">:role/allow-full-access-from-other-accounts</span>\n</pre>\n<p>If you have MFA enabled (recommended!), and your IAM users and MFA settings are defined in account 222222222222, you would run:</p>\n<pre>aws-auth --role-arn <span class=\"hljs-symbol\">arn:</span><span class=\"hljs-symbol\">aws:</span>iam::<span class=\"hljs-number\">1111111111111</span><span class=\"hljs-symbol\">:role/allow-full-access-from-other-accounts</span> --serial-number <span class=\"hljs-symbol\">arn:</span><span class=\"hljs-symbol\">aws:</span>iam::<span class=\"hljs-number\">222222222222</span><span class=\"hljs-symbol\">:mfa/jondoe</span> --token-code <span class=\"hljs-number\">123456</span> \n</pre>\n</li>\n<li>\n<p>Run <code>openvpn-admin request --aws-region us-east-1 --username <YOUR_IAM_USERNAME></code>.</p>\n</li>\n<li>\n<p>This will create your OpenVPN configuration file in the current folder.</p>\n</li>\n<li>\n<p>Load this configuration file into your OpenVPN client.</p>\n</li>\n</ol>\n<h3 class=\"preview__body--subtitle\" id=\"connect-to-the-open-vpn-server\">Connect to the OpenVPN server</h3>\n<p>To connect to the OpenVPN server, simply click the "Connect" button next to your configuration file in the OpenVPN\nclient! After a few seconds, you should be connected.</p>\n<h3 class=\"preview__body--subtitle\" id=\"connect-to-other-resources\">Connect to other resources</h3>\n<p>Now that you're connected to VPN, you can connect to other resources in your AWS account. For example, if you followed\nthe ssh-grunt setup instructions above, you can SSH to an EC2 Instance with private IP address <code>1.2.3.4</code> as follows:</p>\n<pre>ssh <your_username>@<span class=\"hljs-number\">1.2</span>.<span class=\"hljs-number\">3.4</span>\n\n<span class=\"hljs-comment\"># Example:</span>\nssh josh@<span class=\"hljs-number\">1.2</span>.<span class=\"hljs-number\">3.4</span>\n</pre>\n<p>Similarly, non-production resources, such as a load balancer in the staging environment, or Jenkins in the mgmt\nenvironment, should now be accessible to you.</p>\n<p>Note: we run OpenVPN in "split tunnel" mode. That means that only the IP addresses we have explicitly opted into\n(namely, the private IP addresses in your AWS account) will be routed over VPN. Other IP addresses, such as requests\nyou make from your computer to YouTube, GMail, Spotify, etc, are NOT routed over VPN. This dramatically reduces the\nload on your OpenVPN server and your bandwidth usage in AWS.</p>\n<h2 class=\"preview__body--subtitle\" id=\"next-steps\">Next steps</h2>\n<p>Now that you know how to connect to your servers, let's talk about <a href=\"/repos/v0.0.1-20210527/infrastructure-live-multi-account-acme/_docs/09-accounts-and-auth.md\" class=\"preview__body--description--blue\">auth for your AWS account(s)</a>.</p>\n","repoName":"infrastructure-live-multi-account-acme","repoRef":"v0.0.1-01172020","serviceDescriptor":{"serviceName":"Multi-account Reference Architecture","serviceRepoName":"infrastructure-live-multi-account-acme","serviceRepoOrg":"gruntwork-io","cloudProviders":["aws"],"description":"End-to-end tech stack designed to deploy into multiple AWS accounts. Includes VPCs, EKS, ALBs, CI / CD, monitoring, alerting, VPN, DNS, and more.","imageUrl":"grunt.png","licenseType":"subscriber","technologies":["Terraform","Go","Bash","Python"],"compliance":[],"tags":[""]},"serviceCategoryName":"Reference Architecture","fileName":"08-ssh-vpn.md","filePath":"/_docs/08-ssh-vpn.md","title":"Repo Browser: Multi-account Reference Architecture","description":"Browse the repos in the Gruntwork Infrastructure as Code Library."}