Ensure AppStream is utilizing its own virtual private cloud (VPC) (Manual)
Profile Applicability
Description
AppStream 2.0 should be configured using a VPC with Private subnets and a NAT Gateway.
Rationale
For AppStream 2.0 the public subnet will have direct access to the internet through the NAT gateway. This setup allows the streaming instances in your private subnets to connect to the internet or other AWS services.
Impact
None - this is a security best practice.
Audit Procedure
Perform the following to determine if a VPC is setup for AppStream 2.0 correctly.
Using AWS Console
Login to the VPC console at https://console.aws.amazon.com/vpc/
In the left pane, click Your VPCs
Select the VPC for AppStream 2.0 and take note of the name and the VPC ID
In the left pane, click Subnets
Confirm you have 3 subnets labeled and associated with the VPC:
- 1 AppStream Public Subnet and 2 AppStream Private Subnets
Confirm the AppStream Public Subnet is configured correctly:
- Select AppStream Public subnet
- Description tab - VPC matches
AppStream ID and name
- Route Table tab - verify contains rules:
Example - Destination - 10.0.0.0/20, Target - local
Example - Destination - 0.0.0.0/0, Target - internet_gateway_ID
Confirm the 2 AppStream Private Subnets are configured correctly:
- Select AppStream Private subnet 1
- Description Tab - VPC matches
AppStream ID and name and note Availability zone
- Route Table tab - verify contains routes:
Example - Destination - 10.0.0.0/20, Target - local
Example - Destination - 0.0.0.0/0, Target - nat_gateway_ID
Example- optional - Destination - S3bucket_enpoint_ID, Target - storage_vpce_ID
- Select AppStream Private subnet 2
- Description Tab - VPC matches
AppStream ID and name and Availability zone is set to something different than Private subnet 1
- Route Table tab - verify contains routes:
Example - Destination - 10.0.0.0/20, Target - local
Example - Destination - 0.0.0.0/0, Target - nat_gateway_ID
Example- optional - Destination - S3bucket_enpoint_ID, Target - storage_vpce_ID
If The AppStream VPC, subnets and route tables are not configured correctly refer to the remediation procedure below.
Using AWS CLI
Not applicable - must be audited via Console.
Expected Result
AppStream has a dedicated VPC with 1 public subnet and 2 private subnets with proper route tables configured.
Remediation
Using AWS Console
Perform the steps below to create a VPC, subnets and routing table for AppStream 2.0.
Allocate an Elastic IP address:
- Login in to the Amazon VPC console at
https://console.aws.amazon.com/vpc/
- In the left pane, click Elastic IPs
- Click Allocate new address
- Then click on Allocate
- Make a note of the Elastic IP address
- Click Close
Create a New VPC with one public subnet and two private subnets:
Login to the VPC console at https://console.aws.amazon.com/vpc/
Click Launch VPC Wizard
Choose VPC with Public and Private Subnet's and then click Select
Configure the VPC as follows:
IPv4 CIDR block - enter a CIDR block from the private (non-publicly routable) IP address range i.e. 10.0.0.0/16
IPv6 CIDR block - Accept the default value - No IPv6 CIDR Block
VPC name enter a name for the VPC (example, AppStream VPC)
Public subnet's IPv4 CIDR - enter a CIDR block from the private (non-publicly routable) IP address range i.e. 10.0.0.0/24
Availability Zone - Accept the default value - No Preference
Public subnet name - enter a name for the subnet (example, AppStream Public Subnet)
Private subnet's IPv4 CIDR - enter the CIDR block for the subnet
Availability Zone - Accept the default value - No Preference
Private subnet name - enter a name for the subnet (example, AppStream Private Subnet 1)
Elastic IP Allocation ID - enter the Elastic IP address that you created
Service Endpoints - Accept the default value - Blank
Enable DNS hostnames - Accept the default value - Yes
Hardware tenancy - Accept the default value - Default
Click on Create VPC
Note: It takes several minutes to set up your VPC. After the VPC is created, choose OK.
Create the Second Private subnet to the VPC:
In the left pane, choose Subnets
Click Create subnet
Name tag - enter a name for the private subnet (example, AppStream Private subnet 2)
VPC - select the VPC that you created for AppStream 2.0
Availability Zone - select a different one than you are using for AppStream2 Private subnet 1
IPv4 CIDR block - enter the CIDR block for the subnet
Click Create
Verify and Name the Route Tables:
- In the left pane, choose Subnets
- Select the public subnet that you created (example, AppStream Public subnet)
- On the Route Table tab, click the ID of the route table (example, rtb-12345678)
- Select the route table. Under Name, choose the edit icon (the pencil), enter a name (for example, appstream-public-routetable), then click the check mark to save
- On the Routes tab, confirm one destination and target for local traffic and another destination and target that sends all other traffic to the internet gateway (example, igw-0518a307898725db2)
- In the left pane, choose Subnets
- Select the first private subnet that you created (example, AppStream Private subnet 1)
- On the Route Table tab, click the ID of the route table (example, rtb-12345678)
- Select the route table. Under Name, choose the edit icon (the pencil), enter a name (for example, appstream-private-routetable1), then click the check mark to save
- On the Routes tab, confirm one destination and target for local traffic and another destination and target that sends all other traffic to the NAT gateway (example, nat-06ea352539b2fddfc)
- In the left pane, choose Subnets
- Select the second private subnet that you created (example, AppStream Private subnet 2)
- On the Route Table tab, click the ID of the route table (example, rtb-12345678)
- Select the route table. Under Name, choose the edit icon (the pencil), enter a name (for example, appstream-private-routetable2), then click the check mark to save
- On the Routes tab, confirm one destination and target for local traffic and another destination and target that sends all other traffic to the NAT gateway (example, nat-06ea352539b2fddfc)
Using AWS CLI
Not applicable - must be configured via Console.
Default Value
By default, there is no VPC tied to the Appstream 2.0 service.
References
- https://docs.aws.amazon.com/appstream2/latest/developerguide/vpc-setup-recommendations.html
- https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#vpc-sizing-ipv4
CIS Controls
v8:
- 3.12 Segment Data Processing and Storage Based on Sensitivity
- Segment data processing and storage based on the sensitivity of the data. Do not process sensitive data on enterprise assets intended for lower sensitivity data.
v7:
- 14.1 Segment the Network Based on Sensitivity
- Segment the network based on the label or classification level of the information stored on the servers, locate all sensitive information on separated Virtual Local Area Networks (VLANs).
Profile
Level 1
1---2name: cis-aws-euc-5-13description: Ensure AppStream is utilizing its own virtual private cloud (VPC)4---56# Ensure AppStream is utilizing its own virtual private cloud (VPC) (Manual)78## Profile Applicability910- Level 11112## Description1314AppStream 2.0 should be configured using a VPC with Private subnets and a NAT Gateway.1516## Rationale1718For AppStream 2.0 the public subnet will have direct access to the internet through the NAT gateway. This setup allows the streaming instances in your private subnets to connect to the internet or other AWS services.1920## Impact2122None - this is a security best practice.2324## Audit Procedure2526Perform the following to determine if a VPC is setup for AppStream 2.0 correctly.2728### Using AWS Console29301. Login to the VPC console at `https://console.aws.amazon.com/vpc/`312. In the left pane, click **Your VPCs**323. Select the VPC for AppStream 2.0 and take note of the name and the VPC ID334. In the left pane, click **Subnets**345. Confirm you have 3 subnets labeled and associated with the VPC:35 - 1 AppStream Public Subnet and 2 AppStream Private Subnets366. Confirm the **AppStream Public Subnet** is configured correctly:37 - Select AppStream Public subnet38 - Description tab - VPC matches `AppStream ID and name`39 - Route Table tab - verify contains rules:40 - `Example` - Destination - 10.0.0.0/20, Target - local41 - `Example` - Destination - 0.0.0.0/0, Target - internet_gateway_ID42437. Confirm the **2 AppStream Private Subnets** are configured correctly:44 - Select AppStream Private subnet 145 - Description Tab - VPC matches `AppStream ID and name` and note Availability zone46 - Route Table tab - verify contains routes:47 - `Example` - Destination - 10.0.0.0/20, Target - local48 - `Example` - Destination - 0.0.0.0/0, Target - nat_gateway_ID49 - `Example- optional` - Destination - S3bucket_enpoint_ID, Target - storage_vpce_ID50 - Select AppStream Private subnet 251 - Description Tab - VPC matches `AppStream ID and name` and Availability zone is set to something different than Private subnet 152 - Route Table tab - verify contains routes:53 - `Example` - Destination - 10.0.0.0/20, Target - local54 - `Example` - Destination - 0.0.0.0/0, Target - nat_gateway_ID55 - `Example- optional` - Destination - S3bucket_enpoint_ID, Target - storage_vpce_ID5657If The AppStream VPC, subnets and route tables are not configured correctly refer to the remediation procedure below.5859### Using AWS CLI6061Not applicable - must be audited via Console.6263## Expected Result6465AppStream has a dedicated VPC with 1 public subnet and 2 private subnets with proper route tables configured.6667## Remediation6869### Using AWS Console7071Perform the steps below to create a VPC, subnets and routing table for AppStream 2.0.7273**Allocate an Elastic IP address:**74751. Login in to the Amazon VPC console at `https://console.aws.amazon.com/vpc/`762. In the left pane, click **Elastic IPs**773. Click **Allocate new address**784. Then click on **Allocate**795. Make a note of the Elastic IP address806. Click **Close**8182**Create a New VPC with one public subnet and two private subnets:**83841. Login to the VPC console at `https://console.aws.amazon.com/vpc/`852. Click **Launch VPC Wizard**863. Choose VPC with Public and Private Subnet's **and then click Select**874. Configure the VPC as follows:88 - `IPv4 CIDR block` - enter a CIDR block from the private (non-publicly routable) IP address range i.e. 10.0.0.0/1689 - `IPv6 CIDR block` - Accept the default value - No IPv6 CIDR Block90 - `VPC name` enter a name for the VPC (example, AppStream VPC)91 - `Public subnet's IPv4 CIDR` - enter a CIDR block from the private (non-publicly routable) IP address range i.e. 10.0.0.0/2492 - `Availability Zone` - Accept the default value - No Preference93 - `Public subnet name` - enter a name for the subnet (example, AppStream Public Subnet)94 - `Private subnet's IPv4 CIDR` - enter the CIDR block for the subnet95 - `Availability Zone` - Accept the default value - No Preference96 - `Private subnet name` - enter a name for the subnet (example, AppStream Private Subnet 1)97 - `Elastic IP Allocation ID` - enter the Elastic IP address that you created98 - `Service Endpoints` - Accept the default value - Blank99 - `Enable DNS hostnames` - Accept the default value - Yes100 - `Hardware tenancy` - Accept the default value - Default1011025. Click on **Create VPC**103104**Note:** It takes several minutes to set up your VPC. After the VPC is created, choose OK.105106**Create the Second Private subnet to the VPC:**1071081. In the left pane, choose **Subnets**1092. Click Create subnet110111 **Name tag** - enter a name for the private subnet (example, AppStream Private subnet 2)112 - `VPC` - select the VPC that you created for AppStream 2.0113 - `Availability Zone` - select a different one than you are using for AppStream2 Private subnet 1114 - `IPv4 CIDR block` - enter the CIDR block for the subnet1151163. Click Create117118**Verify and Name the Route Tables:**1191201. In the left pane, choose **Subnets**1212. Select the public subnet that you created (example, AppStream Public subnet)1223. On the Route Table tab, click the ID of the route table (example, rtb-12345678)1234. Select the route table. Under Name, choose the edit icon (the pencil), enter a name (for example, appstream-public-routetable), then click the check mark to save1245. On the Routes tab, confirm one destination and target for local traffic and another destination and target that sends all other traffic to the internet gateway (example, igw-0518a307898725db2)1256. In the left pane, choose **Subnets**1267. Select the first private subnet that you created (example, AppStream Private subnet 1)1278. On the Route Table tab, click the ID of the route table (example, rtb-12345678)1289. Select the route table. Under Name, choose the edit icon (the pencil), enter a name (for example, appstream-private-routetable1), then click the check mark to save12910. On the Routes tab, confirm one destination and target for local traffic and another destination and target that sends all other traffic to the NAT gateway (example, nat-06ea352539b2fddfc)13011. In the left pane, choose **Subnets**13112. Select the second private subnet that you created (example, AppStream Private subnet 2)13213. On the Route Table tab, click the ID of the route table (example, rtb-12345678)13314. Select the route table. Under Name, choose the edit icon (the pencil), enter a name (for example, appstream-private-routetable2), then click the check mark to save13415. On the Routes tab, confirm one destination and target for local traffic and another destination and target that sends all other traffic to the NAT gateway (example, nat-06ea352539b2fddfc)135136### Using AWS CLI137138Not applicable - must be configured via Console.139140## Default Value141142By default, there is no VPC tied to the Appstream 2.0 service.143144## References1451461. https://docs.aws.amazon.com/appstream2/latest/developerguide/vpc-setup-recommendations.html1472. https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#vpc-sizing-ipv4148149## CIS Controls150151**v8:**152153- 3.12 Segment Data Processing and Storage Based on Sensitivity154 - Segment data processing and storage based on the sensitivity of the data. Do not process sensitive data on enterprise assets intended for lower sensitivity data.155156**v7:**157158- 14.1 Segment the Network Based on Sensitivity159 - Segment the network based on the label or classification level of the information stored on the servers, locate all sensitive information on separated Virtual Local Area Networks (VLANs).160161## Profile162163Level 1