VPC settings for AWS Cloud9 Development Environments - AWS Cloud9

VPC settings for AWS Cloud9 Development Environments

Every AWS Cloud9 development environment associated with an Amazon Virtual Private Cloud (Amazon VPC) must meet specific VPC requirements. These environments include EC2 environments, as well as SSH environments associated with AWS Cloud compute instances (for example, Amazon EC2 and Amazon Lightsail instances) that run within a VPC.

Amazon VPC requirements for AWS Cloud9

The Amazon VPC that AWS Cloud9 uses requires the following settings. If you're already familiar with these requirements and just want to create a compatible VPC, skip ahead to Create an Amazon VPC for AWS Cloud9.

Use the following checklist to confirm that the VPC meets all of the following requirements.

Criteria How to confirm Additional resources

The VPC can be in the same AWS account and AWS Region as the AWS Cloud9 development environment.

—OR—

The VPC can be a shared VPC in a different AWS account than the environment. (However, the VPC must be in the same AWS Region as the environment).

View a list of VPCs for an AWS Region

The VPC must have a public subnet. (A subnet is public if its traffic is routed to an internet gateway.)

If your environment is accessing its EC2 instance directly though SSH, the instance can be launched into a public subnet only.

If you're accessing a no-ingress Amazon EC2 instance using Systems Manager, the instance can be launched into either a public or a private subnet.

If you're using a public subnet, attach an internet gateway to the VPC so the SSM Agent for the instance can connect to Systems Manager.

If you're using a private subnet, allow the instance for the subnet to communicate with the internet by hosting a NAT gateway in a public subnet.

The public subnet must have a route table with a minimum set of routes.

The associated security groups for the VPC (or for the AWS Cloud compute instance, depending on your architecture) must allow a minimum set of inbound and outbound traffic.

For an additional layer of security, if the VPC has a network ACL, the network ACL must allow a minimum set of inbound and outbound traffic.

Create a network ACL

Note

For the following procedures, if you use the Amazon VPC or Amazon EC2 consoles, we recommend that you sign in to the AWS Management Console and open the Amazon VPC console (https://console.aws.amazon.com/vpc) or Amazon EC2 console (https://console.aws.amazon.com/ec2) using credentials for an IAM administrator in your AWS account.

If you use the AWS CLI or the aws-shell, we recommend you configure the AWS CLI or the aws-shell with the credentials for an IAM administrator in your AWS account. If you can't do this, check with your AWS account administrator.

View a list of VPCs for an AWS Region

To use the Amazon VPC console, in the AWS navigation bar, choose the AWS Region that AWS Cloud9 creates the environment in. Then, choose Your VPCs in the navigation pane.

To use the AWS CLI or the aws-shell, run the Amazon EC2 describe-vpcs command, for example, as follows.

aws ec2 describe-vpcs --output table --query 'Vpcs[*].VpcId' --region us-east-2

In the preceding command, replace us-east-2 with the AWS Region that AWS Cloud9 creates the environment in. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

The output contains the list of VPC IDs.

View a list of subnets for a VPC

To use the Amazon VPC console, choose Your VPCs in the navigation pane. Note the ID of the VPC in the VPC ID column. Then choose Subnets in the navigation pane, and look for subnets that contain that ID in the VPC column.

To use the AWS CLI or the aws-shell, run the Amazon EC2 describe-subnets command, for example, as follows.

aws ec2 describe-subnets --output table --query 'Subnets[*].[SubnetId,VpcId]' --region us-east-2

In the preceding command, replace us-east-2 with the AWS Region that contains the subnets. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

In the output, look for subnets that match the VPC ID.

Confirm whether a subnet is public

Important

If you're launching your environment's EC2 instance into a private subnet, make sure that outbound traffic is allowed for that instance so that it can connect to the SSM service. For private subnets, outbound traffic is usually configured through a network address translation (NAT) gateway or VPC endpoints. (A NAT gateway requires a public subnet).

If you choose VPC endpoints instead of a NAT gateway for accessing SSM, automatic updates and security patches for your instance may not work.

To use the Amazon VPC console, choose Subnets in the navigation pane. Select the box next to the subnet you want AWS Cloud9 to use. On the Route Table tab, if there's an entry in the Target column that starts with igw-, the subnet is public.

To use the AWS CLI or the aws-shell, run the Amazon EC2 describe-route-tables command.

aws ec2 describe-route-tables --output table --query 'RouteTables[*].Routes[*].{GatewayIds:GatewayId}' --region us-east-2 --filters Name=association.subnet-id,Values=subnet-12a3456b

In the preceding command, replace us-east-2 with the AWS Region that contains the subnet, and replace subnet-12a3456b with the subnet ID. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

In the output, if there's at least one result that starts with igw-, the subnet is public.

In the output, if there are no results, the route table might be associated with the VPC instead of the subnet. To confirm this, run the Amazon EC2 describe-route-tables command for the VPC related to the subnet instead of the subnet itself, for example, as follows.

aws ec2 describe-route-tables --output table --query 'RouteTables[*].Routes[*].{GatewayIds:GatewayId}' --region us-east-1 --filters Name=vpc-id,Values=vpc-1234ab56

In the preceding command, replace us-east-2 with the AWS Region that contains the VPC, and replace vpc-1234ab56 with the VPC ID. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

In the output, if there's at least one result that starts with igw-, the VPC contains an internet gateway.

View or change settings for an internet gateway

To use the Amazon VPC console, choose Internet Gateways in the navigation pane. Select the box next to the internet gateway. To see the settings, look at each of the tabs. To change a setting on a tab, choose Edit if applicable, and then follow the on-screen directions.

To use the AWS CLI or the aws-shell to see the settings, run the Amazon EC2 describe-internet-gateways command.

aws ec2 describe-internet-gateways --output table --region us-east-2 --internet-gateway-id igw-1234ab5c

In the preceding command, replace us-east-2 with the AWS Region that contains the internet gateway, and replace igw-1234ab5c with the internet gateway ID. To run the preceding command with the aws-shell, omit aws.

Create an internet gateway

To use the Amazon VPC console, choose Internet Gateways in the navigation pane. Choose Create internet gateway, and then follow the on-screen directions.

To use the AWS CLI or the aws-shell, run the Amazon EC2 create-internet-gateway command.

aws ec2 create-internet-gateway --output text --query 'InternetGateway.InternetGatewayId' --region us-east-2

In the preceding command, replace us-east-2 with the AWS Region that contains the new internet gateway. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

The output contains the ID of the new internet gateway.

Attach an internet gateway to a VPC

To use the Amazon VPC console, choose Internet Gateways in the navigation pane. Select the box next to the internet gateway. Choose Actions, Attach to VPC if available, and then follow the on-screen directions.

To use the AWS CLI or the aws-shell, run the Amazon EC2 attach-internet-gateway command, for example, as follows.

aws ec2 attach-internet-gateway --region us-east-2 --internet-gateway-id igw-a1b2cdef --vpc-id vpc-1234ab56

In the preceding command, replace us-east-2 with the AWS Region that contains the internet gateway, replace igw-a1b2cdef with the internet gateway ID, and replace vpc-1234ab56 with the VPC ID. To run the preceding command with the aws-shell, omit aws.

Confirm whether a subnet has a route table

To use the Amazon VPC console, choose Subnets in the navigation pane. Select the box next to the public subnet for the VPC that you want AWS Cloud9 to use. On the Route table tab, if there's a value for Route Table, the public subnet has a route table.

To use the AWS CLI or the aws-shell, run the Amazon EC2 describe-route-tables command.

aws ec2 describe-route-tables --output table --query 'RouteTables[*].Associations[*].{RouteTableIds:RouteTableId}' --region us-east-2 --filters Name=association.subnet-id,Values=subnet-12a3456b

In the preceding command, replace us-east-2 with the AWS Region that contains the public subnet, and replace subnet-12a3456b with the public subnet ID. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

If there are values in the output, the public subnet has at least one route table.

In the output, if there are no results, the route table might be associated with the VPC instead of the subnet. To confirm this, run the Amazon EC2 describe-route-tables command for the subnet's related VPC instead of the subnet itself, for example, as follows.

aws ec2 describe-route-tables --output table --query 'RouteTables[*].Associations[*].{RouteTableIds:RouteTableId}' --region us-east-2 --filters Name=vpc-id,Values=vpc-1234ab56

In the preceding command, replace us-east-2 with the AWS Region that contains the VPC, and replace vpc-1234ab56 with the VPC ID. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

In the output, if there's at least one result, the VPC has at least one route table.

Attach a route table to a subnet

To use the Amazon VPC console, choose Route Tables in the navigation pane. Select the box next to the route table that you want to attach. On the Subnet Associations tab, choose Edit, select the box next to the subnet you want to attach it to, and then choose Save.

To use the AWS CLI or the aws-shell, run the Amazon EC2 associate-route-table command, for example, as follows.

aws ec2 associate-route-table --region us-east-2 --subnet-id subnet-12a3456b --route-table-id rtb-ab12cde3

In the preceding command, replace us-east-2 with the AWS Region that contains the route table, replace subnet-12a3456b with the subnet ID, and replace rtb-ab12cde3 with the route table ID. To run the preceding command with the aws-shell, omit aws.

Create a route table

To use the Amazon VPC console, choose Route Tables in the navigation pane. Choose Create Route Table, and then follow the on-screen directions.

To use the AWS CLI or the aws-shell, run the Amazon EC2 create-route-table command, for example, as follows.

aws ec2 create-route-table --output text --query 'RouteTable.RouteTableId' --region us-east-2 --vpc-id vpc-1234ab56

In the preceding command, replace us-east-2 with the AWS Region that contains the new route table, and replace vpc-1234ab56 with the VPC ID. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

The output contains the ID of the new route table.

View or change settings for a route table

To use the Amazon VPC console, choose Route Tables in the navigation pane. Select the box next to the route table. To see the settings, look at each of the tabs. To change a setting on a tab, choose Edit, and then follow the on-screen directions.

To use the AWS CLI or the aws-shell to see the settings, run the Amazon EC2 describe-route-tables command, for example, as follows.

aws ec2 describe-route-tables --output table --region us-east-2 --route-table-ids rtb-ab12cde3

In the preceding command, replace us-east-2 with the AWS Region that contains the route table, and replace rtb-ab12cde3 with the route table ID. To run the preceding command with the aws-shell, omit aws.

Minimum suggested route table settings for AWS Cloud9

Destination Target Status Propagated

CIDR-BLOCK

local

Active

No

0.0.0.0/0

igw-INTERNET-GATEWAY-ID

Active

No

In these settings, CIDR-BLOCK is the CIDR block for the subnet, and igw-INTERNET-GATEWAY-ID is the ID of a compatible internet gateway.

View a list of security groups for a VPC

To use the Amazon VPC console, choose Security Groups in the navigation pane. In the Search Security Groups box, enter the VPC ID or name, and then press Enter. Security groups for that VPC appear in the list of search results.

To use the AWS CLI or the aws-shell, run the Amazon EC2 describe-security-groups command.

aws ec2 describe-security-groups --output table --query 'SecurityGroups[*].GroupId' --region us-east-2 --filters Name=vpc-id,Values=vpc-1234ab56

In the preceding command, replace us-east-2 with the AWS Region that contains the VPC, and replace vpc-1234ab56 with the VPC ID. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

The output contains the list of security group IDs for that VPC.

View a list of security groups for an AWS Cloud compute instance

To use the Amazon EC2 console, expand Instances in the navigation pane, and then choose Instances. In the list of instances, choose the box next to the instance. Security groups for that instance appear in the Description tab next to Security groups.

To use the AWS CLI or the aws-shell, run the Amazon EC2 describe-security-groups command, for example, as follows.

aws ec2 describe-instances --output table --query 'Reservations[*].Instances[*].NetworkInterfaces[*].Groups[*].GroupId' --region us-east-2 --instance-ids i-12a3c456d789e0123

In the preceding command, replace us-east-2 with the AWS Region that contains the instance, and replace i-12a3c456d789e0123 with the instance ID. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

The output contains the list of security group IDs for that instance.

View or change settings for a security group in a VPC

To use the Amazon VPC console, choose Security Groups in the navigation pane. Select the box next to the security group. To see the settings, look at each of the tabs. To change a setting on a tab, choose Edit if applicable, and then follow the on-screen directions.

To use the AWS CLI or the aws-shell to see the settings, run the Amazon EC2 describe-security-groups command, for example, as follows.

aws ec2 describe-security-groups --output table --region us-east-2 --group-ids sg-12a3b456

In the preceding command, replace us-east-2 with the AWS Region that contains the instance, and replace sg-12a3b456 with the security group ID. To run the preceding command with the aws-shell, omit aws.

View or change settings for a AWS Cloud compute instance security group

To use the Amazon EC2 console, expand Instances in the navigation pane, and then choose Instances. In the list of instances, select the box next to the instance. In the Description tab, for Security groups, choose the security group. Look at each of the tabs. To change a setting on a tab, choose Edit if applicable, and then follow the on-screen directions.

To use the AWS CLI or the aws-shell to see the settings, run the Amazon EC2 describe-security-groups command, for example, as follows.

aws ec2 describe-security-groups --output table --region us-east-2 --group-ids sg-12a3b456

In the preceding command, replace us-east-2 with the AWS Region that contains the instance, and replace sg-12a3b456 with the security group ID. To run the preceding command with the aws-shell, omit aws.

Minimum inbound and outbound traffic settings for AWS Cloud9

Important

If a security group for an instance doesn't have an inbound rule, this means no incoming traffic originating from another host to the instance is allowed. For information about using no-ingress EC2 instances, see Accessing no-ingress EC2 instances with AWS Systems Manager.

  • Inbound: All IP addresses using SSH over port 22. However, you can restrict these IP addresses to only those that AWS Cloud9 uses. For more information, see Inbound SSH IP address ranges for AWS Cloud9.

    Note

    For EC2 environments created on or after July 31 2018, AWS Cloud9 uses security groups to restrict inbound IP addresses using SSH over port 22 to only those addresses that AWS Cloud9 uses. For more information, see Inbound SSH IP address ranges for AWS Cloud9.

  • Inbound (network ACLs only): For EC2 environments, and for SSH environments associated with Amazon EC2 instances running Amazon Linux or Ubuntu Server, all IP addresses using TCP over ports 32768-61000. For more information, and for port ranges for other Amazon EC2 instance types, see Ephemeral ports in the Amazon VPC User Guide.

  • Outbound: All traffic sources using any protocol and port.

You can set this behavior at the security group level. For an additional level of security, you can also use a network ACL. For more information, see Comparison of security groups and network ACLs in the Amazon VPC User Guide.

For example, to add inbound and outbound rules to a security group, you could set up those rules as follows.

Inbound rules
Type Protocol Port range Source

SSH (22)

TCP (6)

22

0.0.0.0 (But see the following note and Inbound SSH IP address ranges for AWS Cloud9.)

Note

For EC2 environments created on or after July 31 2018, AWS Cloud9 adds an inbound rule to restrict inbound IP addresses using SSH over port 22 to only those addresses that AWS Cloud9 uses. For more information, see Inbound SSH IP address ranges for AWS Cloud9.

Outbound rules
Type Protocol Port range Source

All traffic

ALL

ALL

0.0.0.0/0

If you also choose to add inbound and outbound rules to a network ACL, you could set up those rules as follows.

Inbound rules
Rule # Type Protocol Port range Source Allow / Deny

100

SSH (22)

TCP (6)

22

0.0.0.0 (But see Inbound SSH IP address ranges for AWS Cloud9.)

ALLOW

200

Custom TCP rule

TCP (6)

32768-61000 (For Amazon Linux and Ubuntu Server instances. For other instance types, see Ephemeral Ports.)

0.0.0.0/0

ALLOW

*

All traffic

ALL

ALL

0.0.0.0/0

DENY

Outbound rules
Rule # Type Protocol Port range Source Allow / Deny

100

All traffic

ALL

ALL

0.0.0.0/0

ALLOW

*

All traffic

ALL

ALL

0.0.0.0/0

DENY

For more information about security groups and network ACLs, see the following in the Amazon VPC User Guide.

Create a security group in a VPC

To use the Amazon VPC or Amazon EC2 consoles, do one of the following actions:

  • In the Amazon VPC console, choose Security Groups in the navigation pane. Choose Create Security Group, and then follow the on-screen directions.

  • In the Amazon EC2 console, expand Network & Security in the navigation pane, and then choose Security Groups. Choose Create Security Group, and then follow the on-screen directions.

To use the AWS CLI or the aws-shell, run the Amazon EC2 create-security-group command, for example, as follows.

aws ec2 create-security-group --region us-east-2 --vpc-id vpc-1234ab56

In the preceding command, replace us-east-2 with the AWS Region that contains the VPC, and replace vpc-1234ab56 with the VPC ID. To run the preceding command with the aws-shell, omit aws.

Confirm whether a VPC has at least one network ACL

To use the Amazon VPC console, choose Your VPCs in the navigation pane. Choose the box next to the VPC you want AWS Cloud9 to use. On the Summary tab, if there's a value for Network ACL, the VPC has at least one network ACL.

To use the AWS CLI or the aws-shell, run the Amazon EC2 describe-network-acls command.

aws ec2 describe-network-acls --output table --query 'NetworkAcls[*].Associations[*].NetworkAclId' --region us-east-2 --filters Name=vpc-id,Values=vpc-1234ab56

In the preceding command, replace us-east-2 with the AWS Region that contains the VPC, and replace vpc-1234ab56 with the VPC ID. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

If the output contains at least one entry in the list, the VPC has at least one network ACL.

View a list of network ACLs for a VPC

To use the Amazon VPC console, choose Network ACLs in the navigation pane. In the Search Network ACLs box, enter the VPC ID or name, and then press Enter. Network ACLs for that VPC appear in the list of search results.

To use the AWS CLI or the aws-shell, run the Amazon EC2 describe-network-acls command.

aws ec2 describe-network-acls --output table --query 'NetworkAcls[*].Associations[*].NetworkAclId' --region us-east-2 --filters Name=vpc-id,Values=vpc-1234ab56

In the preceding command, replace us-east-2 with the AWS Region that contains the VPC, and replace vpc-1234ab56 with the VPC ID. To run the preceding command in Windows, replace the single quotation marks with double quotation marks. To run the preceding command with the aws-shell, omit aws.

The output contains a list of network ACLs for that VPC.

View or change settings for a network ACL

To use the Amazon VPC console, choose Network ACLs in the navigation pane. Choose the box next to the network ACL. To see the settings, look at each of the tabs. To change a setting on a tab, choose Edit, if applicable, and then follow the on-screen directions.

To use the AWS CLI or the aws-shell to see the settings, run the Amazon EC2 describe-network-acls command.

aws ec2 describe-network-acls --output table --region us-east-2 --network-acl-ids acl-1234ab56

In the preceding command, replace us-east-2 with the AWS Region that contains the network ACL, and replace acl-1234ab56 with the network ACL ID. To run the preceding command with the aws-shell, omit aws.

Create a network ACL

To use the Amazon VPC console, choose Network ACLs in the navigation pane. Choose Create Network ACL, and then follow the on-screen directions.

To use the AWS CLI or the aws-shell, run the Amazon EC2 create-network-acl command.

aws ec2 create-network-acl --region us-east-2 --vpc-id vpc-1234ab56

In the preceding command, replace us-east-2 with the AWS Region that contains the VPC that you want to attach the new network ACL to, and replace vpc-1234ab56 with the VPC ID. To run the preceding command with the aws-shell, omit aws.

Create an Amazon VPC for AWS Cloud9

You can use the Amazon VPC console to create an Amazon VPC that is compatible with AWS Cloud9.

Note

For this procedure, we recommend that you sign in to the AWS Management Console and open the Amazon VPC console using credentials for an IAM administrator in your AWS account. If you can't do this, check with your AWS account administrator.

Some organizations may not allow you to create VPCs on your own. If you can't create a VPC, check with your AWS account administrator or network administrator.

  1. If the Amazon VPC console isn't already open, sign in to the AWS Management Console and open the Amazon VPC console at https://console.aws.amazon.com/vpc.

  2. In the navigation bar, if the AWS Region isn't the same as the environment, choose the correct AWS Region.

  3. Choose VPC Dashboard in the navigation pane, if the VPC Dashboard page isn't already displayed.

  4. Choose Launch VPC Wizard.

  5. For Step 1: Select a VPC Configuration, with VPC with a Single Public Subnet already selected, choose Select.

  6. For Step 2: VPC with a Single Public Subnet, we recommend that you don't change the following default settings. (However, you can change the CIDR settings if you have custom CIDRs you want to use. For more information, see VPC and subnet sizing in the Amazon VPC User Guide.)

    • IPv4 CIDR block: 10.0.0.0/16

    • IPv6 CIDR block: No IPv6 CIDR Block

    • Public subnet's IPv4 CIDR: 10.0.0.0/24

    • Availability Zone: No Preference

    • Enable DNS hostnames: Yes

    • Hardware tenancy: Default

  7. For VPC name, provide a name for the VPC.

  8. For Subnet name, provide a name for the subnet in the VPC.

  9. Choose Create new VPC.

    Amazon VPC creates the following resources that are compatible with AWS Cloud9:

    • A VPC

    • A public subnet for the VPC

    • A route table for the public subnet with the minimum required settings

    • An internet gateway for the public subnet

    • A network ACL for the public subnet with the minimum required settings

  10. By default, the VPC allows incoming traffic from all types, protocols, ports, and IP addresses. You can restrict this behavior to allow only IP addresses coming from AWS Cloud9 using SSH over port 22. One approach is to set incoming rules on the default network ACL for the VPC, as follows.

    1. In the navigation pane of the Amazon VPC console, choose Your VPCs.

    2. Select the box for the VPC that you just created.

    3. On the Description tab, choose the link next to Network ACL.

    4. Select the box next to the network ACL that's displayed.

    5. On the Inbound Rules tab, choose Edit inbound rules.

    6. For Rule # 100, for Type, choose SSH (22).

    7. For Source, enter one of the CIDR blocks in the Inbound SSH IP address ranges for AWS Cloud9 list that matches the AWS Region for this VPC.

    8. Choose Add another rule.

    9. For Rule #, enter 200.

    10. For Type, choose SSH (22).

    11. For Source, enter the other CIDR block in the Inbound SSH IP address ranges for AWS Cloud9 list that matches the AWS Region for this VPC.

    12. At minimum, you must also allow incoming traffic from all IP addresses using TCP over ports 32768-61000 for Amazon Linux and Ubuntu Server instance types. (For background, and for port ranges for other Amazon EC2 instance types, see Ephemeral ports in the Amazon VPC User Guide). To do this, choose Add another rule.

    13. For Rule #, enter 300.

    14. For Type, choose Custom TCP Rule.

    15. For Port Range, enter 32768-61000 (for Amazon Linux and Ubuntu Server instance types).

    16. For Source, enter 0.0.0.0/0.

    17. Choose Save.

    18. You might need to add more inbound or outbound rules to the network ACL, depending on how you plan to use AWS Cloud9. See the documentation for the specific web services or APIs that you want to allow inbound and outbound communications for the VPC. More specifically, check the Type, Protocol, Port Range, and Source settings for the network ACL rules to allow traffic to flow in an out of the subnets.

Create a subnet for AWS Cloud9

You can use the Amazon VPC console to create a subnet for a VPC that's compatible with AWS Cloud9. Whether you can create a private or public subnet for your EC2 instance depends on how your environment connects to it:

  • Direct access through SSH: public subnet only

  • Access through Systems Manager: public or private subnet

The option to launch your environment's EC2 into a private subnet is available only if you create a "no-ingress" EC2 environment using the console, command line, or AWS CloudFormation.

You follow the same steps to create a subnet that can be made public or private. If the subnet is then associated with a route table that has a route to an internet gateway, it becomes a public subnet. But if the subnet is associated with a route table that does not have a route to an internet gateway, it becomes a private subnet. For more information, see Configuring a subnet as public or private

If you followed the previous procedure to create a VPC for AWS Cloud9, you don't also need to follow this procedure. This is because the Create new VPC wizard creates a subnet for you automatically.

Important
  • The AWS account must already have a compatible VPC in the same AWS Region for the environment. For more information, see the VPC requirements in Amazon VPC requirements for AWS Cloud9.

  • For this procedure, we recommend that you sign in to the AWS Management Console, and then open the Amazon VPC console using credentials for an IAM administrator in your AWS account. If you can't do this, check with your AWS account administrator.

  • Some organizations might not allow you to create subnets on your own. If you cannot create a subnet, check with your AWS account administrator or network administrator.

To create a subnet

  1. If the Amazon VPC console isn't already open, sign in to the AWS Management Console and open the Amazon VPC console at https://console.aws.amazon.com/vpc.

  2. In the navigation bar, if the AWS Region isn't the same as the AWS Region for the environment, choose the correct AWS Region.

  3. Choose Subnets in the navigation pane, if the Subnets page isn't already displayed.

  4. Choose Create Subnet.

  5. In the Create Subnet dialog box, for Name tag, enter a name for the subnet.

  6. For VPC, choose the VPC to associate the subnet with.

  7. For Availability Zone, choose the Availability Zone within the AWS Region for the subnet to use, or choose No Preference to let AWS choose an Availability Zone for you.

  8. For IPv4 CIDR block, enter the range of IP addresses for the subnet to use, in CIDR format. This range of IP addresses must be a subset of IP addresses in the VPC.

    For information about CIDR blocks, see VPC and subnet sizing in the Amazon VPC User Guide. See also 3.1. Basic Concept and Prefix Notation in RFC 4632 or IPv4 CIDR blocks in Wikipedia.

After you create the subnet, configure it as either a public or private subnet.

Configuring a subnet as public or private

After you create a subnet, you can make it public or private by specifying how it communicates with the internet.

A public subnet has a public IP address and an internet gateway (IGW) is attached to it that allows communication between the instance for the subnet and the internet and other AWS services.

An instance in a private subnet has a private IP address and a network address translation (NAT) gateway is used to send traffic back and forth between the instance for the subnet and the internet and other AWS services. The NAT gateway must be hosted in a public subnet.

Public subnets
Note

Even if the instance for your environment is launched in a private subnet, your VPC must feature at least one public subnet. This is because the NAT gateway that forwards traffic to and from the instance must be hosted in a public subnet.

Configuring a subnet as public involves attaching an internet gateway (IGW) to it, configuring a route table to specify a route to that IGW, and defining settings in a security group to control inbound and outbound traffic.

Guidance on carrying out these tasks is provided in Create an Amazon VPC for AWS Cloud9.

Important

If your development environment is using SSM to access an EC2 instance, ensure that the instance is assigned a public IP address by the public subnet it's launched into. To do so, you can specify your own IP address or enable the automatic assignment of a public IP address. For the steps involved in modifying auto-assign IP settings, see IP Addressing in your VPC in the Amazon VPC User Guide.

Private subnets

If you're creating a no-ingress instance that's accessed through Systems Manager, you can launch it into a private subnet. Because a private subnet doesn't have a public IP address, a NAT gateway is required to map the private IP address to a public address for requests, and then map the public IP address back to the private address for the response.

Warning

You're charged for creating and using a NAT gateway in your account. NAT gateway hourly usage and data processing rates apply. Amazon EC2 charges for data transfer also apply. For more information, see Amazon VPC Pricing.

Before creating and configuring the NAT gateway, you must do the following:

  • Create a public VPC subnet to host the NAT gateway.

  • Provision an Elastic IP address that can be assigned to the NAT gateway.

  • For the private subnet, clear the Enable auto-assign public IPv4 address check box so that the instance launched into it is assigned a private IP address. For more information, see IP Addressing in your VPC in the Amazon VPC User Guide.

For the steps in this task, see Working with NAT gateways in the Amazon VPC User Guide.

Important

Currently, if your environment’s EC2 instance is launched into a private subnet, you can't use AWS managed temporary credentials to allow the EC2 environment to access an AWS service on behalf of an AWS entity (an IAM user, for example).