1. 什么是AWS VPC,它的优点是什么?
AWS VPC是一种虚拟网络服务,允许用户在AWS云环境中创建和控制虚拟网络。VPC使用户能够在AWS云中启动AWS资源(如EC2实例)时指定虚拟网络环境,包括IP地址范围、子网、路由表和网关等,从而实现用户对虚拟网络的完全控制。它包括了以下组件:
- VPC (Virtual Private Cloud): 代表整个虚拟私有云,是AWS云中的一个逻辑隔离网络。
- Subnets (子网): VPC内部划分的子网,每个子网位于特定的可用区(AZ),可以配置不同的IP地址范围。
- Internet Gateway (IGW): 允许VPC中的资源与公网通信的网关设备。
- NAT Gateway (Network Address Translation): 允许私有子网中的实例通过公共IP地址访问互联网,同时阻止来自互联网的入站连接。
- Route Tables (路由表): 控制VPC中流量的路由,指定子网中流量的目标,可以包括本地路由(在VPC内部流量的路由)和Internet路由(指向Internet Gateway或NAT Gateway)。
- Network ACLs (网络访问控制列表): 在子网级别控制入站和出站流量的安全策略。
- Security Groups (安全组): 在实例级别控制入站和出站流量的安全策略。
- VPN连接或AWS Direct Connect: 用于连接VPC和本地数据中心的安全通信通道。
- VPC Endpoint (终端节点): 允许实例在VPC内部安全地访问AWS服务,如S3和DynamoDB,而无需通过Internet Gateway。
- VPC Peering (VPC互连): 允许连接两个VPC,使它们之间可以直接通信。
它有哪些优点:
- 定制化控制: 用户可以完全控制其VPC的网络配置,包括选择IP地址范围、创建子网、配置路由表和网关等,以满足特定需求。
- 安全性: 可以使用安全组和网络访问控制列表(ACL)来控制入站和出站流量,从而提高网络安全性。
- 互联云中和本地网络: 可以通过VPN连接或AWS Direct Connect将VPC安全地扩展到本地数据中心或其他云提供商的网络。
- 高可用性和容错性: 可以跨多个可用区(AZ)分布子网,从而提高应用程序的可用性和容错能力。
缺点呢?就是有些复杂,比较难学。
2. 如何配置AWS VPC
有两种方式,一种是通过console来配置,步骤如下:
-
创建VPC:
点击“创建VPC”,填写名称、CIDR块(IP地址范围)等信息。 -
配置子网:
- 在创建VPC后,创建公共子网和私有子网。
- 公共子网通常与Internet Gateway关联,允许公网访问。
- 私有子网不直接暴露在Internet上,通常与NAT网关关联以访问Internet。
-
配置路由表:
- 创建和配置路由表,关联子网并指定流量流向,例如将公共子网的流量路由至Internet Gateway。
-
配置Internet Gateway:
- 创建Internet Gateway并附加到VPC,允许VPC内实例与Internet通信。
-
配置安全组:
- 定义安全组规则以控制进出VPC的流量,可以基于协议、端口和IP地址等定义规则。
-
配置网络ACL:
- 配置网络访问控制列表(Network ACLs),用于过滤进出子网的流量。
-
配置VPN连接或直接连接(可选):
- 如果需要与企业数据中心或其他云服务提供商建立安全连接,可以配置VPN连接或AWS Direct Connect。
-
配置其他服务:
- 根据需要配置其他AWS服务,如Elastic Load Balancing(ELB)、Amazon RDS、Amazon EC2等,以构建完整的应用架构。
另一种是通过terraform来配置,我们尝试创建一个简单的VPC,包括一个公共子网和一个私有子网,并配置相应的路由表、Internet Gateway以及安全组。 步骤如下:
# 定义provider
provider "aws" {
region = "us-east-1" # 根据实际需求更改区域
}
# 创建VPC
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "my-vpc"
}
}
# 创建Internet Gateway并附加到VPC
resource "aws_internet_gateway" "gw" {
vpc_id = aws_vpc.main.id
tags = {
Name = "my-vpc-igw"
}
}
# 创建公共子网
resource "aws_subnet" "public" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
availability_zone = "us-east-1a"
tags = {
Name = "public-subnet"
}
}
# 创建私有子网
resource "aws_subnet" "private" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.2.0/24"
availability_zone = "us-east-1b"
tags = {
Name = "private-subnet"
}
}
# 创建公共路由表,并关联到VPC
resource "aws_route_table" "public" {
vpc_id = aws_vpc.main.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.gw.id
}
tags = {
Name = "public-route-table"
}
}
# 关联公共子网和路由表
resource "aws_route_table_association" "public" {
subnet_id = aws_subnet.public.id
route_table_id = aws_route_table.public.id
}
# 创建安全组
resource "aws_security_group" "example" {
vpc_id = aws_vpc.main.id
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "example-security-group"
}
}
- 创建VPC(
aws_vpc
资源):定义了一个CIDR块为10.0.0.0/16
的VPC。- 创建Internet Gateway并附加到VPC(
aws_internet_gateway
资源)。- 创建公共子网(
aws_subnet
资源)和私有子网(在示例中未显示,但可以按照相似方式创建)。- 创建路由表并将其关联到VPC(
aws_route_table
资源)。- 关联公共子网和路由表(
aws_route_table_association
资源)。- 创建安全组(
aws_security_group
资源)并定义了允许HTTP流量(端口80)的入站规则和允许所有流量的出站规则。
3. AWS VPC的traffic flow
图片来自互联网。
几个概念的说明:
-
Internet Gateway(IGW):
- 功能:Internet Gateway允许VPC内的公共子网中的实例直接访问Internet,实现双向通信。
- 用途:主要用于连接位于公共子网中的实例,这些实例需要能够直接从Internet访问或被Internet访问。
-
NAT Gateway(NAT网关):
- 功能:NAT Gateway允许私有子网中的实例访问Internet,但不允许Internet直接访问这些实例。它在私有子网和Internet之间提供了网络地址转换(NAT)服务。
- 用途:主要用于私有子网中的实例需要访问Internet,例如应用服务器更新软件包或从外部服务获取数据。增强了VPC的安全性,因为私有子网中的实例不直接暴露在Internet上。
-
公共子网(Public Subnet):
- Internet连接:公共子网通过关联到Internet Gateway(IGW),允许直接访问Internet。这意味着位于公共子网中的实例可以具有公共IP地址,并且可以直接从Internet访问。
- 用途:适合需要公共访问的资源,如Web服务器、负载均衡器等。
-
私有子网(Private Subnet):
- Internet连接:私有子网通常不直接关联到Internet Gateway,因此实例没有公共IP地址,无法直接从Internet访问。
- 访问方式:私有子网中的实例可以通过NAT网关、代理服务器或通过VPN连接等间接方式访问Internet或其他公共资源。
- 用途:适合存储数据库、应用服务器等敏感数据或不需要公网访问的应用程序。
-
主路由表(Main Route Table):
- 默认关联:每个VPC都会自动关联一个主路由表,这个路由表是VPC级别的默认路由表。
- 默认路由规则:主路由表包含一个默认路由规则,该规则指向本地网关。本地网关通常指向VPC本身,即VPC内部的流量可以通过本地路由访问其他子网和实例。
- 关联方式:主路由表自动关联到VPC中的所有子网,除非为特定子网指定了其他自定义路由表。
-
自定义路由表(Customer Route Table):
- 创建和关联:您可以创建多个自定义路由表,并将其关联到特定的子网。
- 路由规则管理:自定义路由表允许您定义特定于子网的路由规则。这些规则可以覆盖主路由表中的默认路由规则。
- 应用场景:通常用于实现特定的网络流量控制策略,如将某些子网的流量路由到特定的网关(如NAT网关或VPN连接)
Network ACLs(NACLs)和Security Groups(SGs)是AWS中用于网络安全的两种不同的控制机制,NACL 是属于子网基本的,SGs是属于实例级别的。