在AWS中创建定制的虚拟私有云(VPC)

2023-11-04 05:08
文章标签 定制 创建 私有 虚拟 aws vpc

本文主要是介绍在AWS中创建定制的虚拟私有云(VPC),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 创建定制VPC
  • 在VPC里创建两个Subnet
  • 创建Internet Gateway
  • 创建额外的Route table访问外部
    • 创建额外的Route table
    • 添加路由到Internet Gateway
    • 关联公有Subnet到额外的公有的Route table
  • 在定制VPC里创建一个新的Security Group (安全组)
  • 在定制VPC里创建两个EC2 (公有和私有)
    • 创建公有EC2
    • 创建私有EC2
  • 私有EC2通过NAT访问外网
    • NAT Gateway和NAT Instance的比较
    • 使用NAT Instance
    • 使用NAT Gateway
  • 添加定制ACL并设置ACL
  • Endpoints测试
  • 术语
  • Reference

创建定制VPC

AWS里一般默认有一个VPC,如果直接使用的话,可以省去很多麻烦。如果创建定制VPC,所有的组件需要各个创建,可以了解各个组件的细节。如果创建定制的VPC,会新创建一个默认的Route Table,Network ACL,和Security Group。不会创建Subnet和Internet Gateway。

创建一个定制的VPC并取名为XiongTestVPC, IPv4 CIDR block为10.0.0.0/16,如下图所示:
create VPC

这里默认创建了Network ACL是允许所有的流量进出, 也就是所有的Source和Destination都是0.0.0.0/0允许。

以下未知,是否要设置DNS resolution和DNS hostnames为Enabled?

DNS resolution       Enabled
DNS hostnames     Enabled

在VPC里创建两个Subnet

首先创建公用Subnet,名字为XiongPublicSubnet,VPC选择新定制的VPC–>XiongTestVPC,IPv4 CIDR block为10.0.1.0/24,这里Availability Zone选择ap-southeast-1a

注意: 这里选择了ap-southeast-1a,如果在另一个帐户里也选择了ap-southeast-1a,这两个Availability Zone并不一定是同一个,因为AWS会随机分配,这样可以保证不会有大多数用户选择同一个Availability Zone。创建公用Subnet如下图所示:

Create public Subnet

对于公有的Subnet,改变设置公有的Subnet的自动分配公有地址,在Action --> Modify auto-assign IP settings里,如下图所示:

Auto assign public IP

同理,创建另一个私有的Subnet,名字为XiongPrivateSubnet,VPC选择新定制的VPC–>XiongTestVPC,IPv4 CIDR block为10.0.2.0/24,这里Availability Zone选择ap-southeast-1b

这里创建的两个Subnet, 默认Route Table里只能访问本地,需要在后面关联能够访问外网的Route Table,Network ACL默认为前面新创建的VPC所默认生成的Network ACL。

创建Internet Gateway

创建一个名为XiongTestInternetGateway的Internet Gateway,并把它附加到新创建的定制VPC上。如下图所示:

Attach Internet GW

注意:一个VPC只能附加一个Internet gateway。

创建额外的Route table访问外部

创建额外的Route table

在创建定制VPC的时候,会默认创建一个Route table为主Route Table,这个默认创建的Route Table只能访问本地,是私有的(private),不能访问外部,这个Route Table专门用于内部私有的Subnet。那么这里我们创建一个额外的Route table可以访问外部,取名为XiongRouteTablePublic,用于外部的公有的Subnet。如下图所示:

Create public route table

添加路由到Internet Gateway

XiongRouteTablePublic这个公有的Route Table里添加两个(分别是IPV4和IPV6)指向前面新创建的可以访问外部的Internet Gateway, 也就是XiongTestInternetGateway0.0.0.0/0为IPV4, ::/0为IPV6,如下图所示:

Edit public route table

关联公有Subnet到额外的公有的Route table

关联公有Subnet也就是XiongPublicSubnet到额外的Route table也就是XiongRouteTablePublic,在Subnets > Edit route table association界面中,这样公有Subnet就可以访问外部公网我了。添加的地方如下图所示:

associate public subnet to public route table

在定制VPC里创建一个新的Security Group (安全组)

在定制VPC XiongTestVPC 里创建一个新的Security Group (安全组),取名为XiongInternalSecurityGroup,用途为内部的EC2使用,默认的Inbound Rules为空,Outbound Rules为所有。
所以在Inbound Rules中添加内网的Subnet地址可以访问以下端口。

  • ICMP --> 0~65536
  • HTTP --> 80
  • HTTPS --> 443
  • MYSQL/Aurora --> 3306
  • SSH --> 22

如下图所示:

create Internal SG

注意:Security Groups不能跨VPC。一个VPC里只能有一个Internet Gateway。
注意:Security Groups是stateful,也就是说添加到Inbound的规则,也自动添加到Outbound上去。

在定制VPC里创建两个EC2 (公有和私有)

在定制VPC里创建两个EC2 (公有和私有),公有EC2可以访问外网,也可以被外网访问,例如Web Server,私有EC2只能内部才能访问,例如数据库服务器。

创建公有EC2

使用以下启动脚本:

#!/bin/bash
yum install httpd -y
yum update -y
service httpd start
chkconfig httpd on
echo "<html><h1>Hello Xiong, this is public EC2 Instance!</h1></html>" > /var/www/html/index.html

这里要选择, XiongTestVPCXiongPublicSubnet,前面已经设置过XiongPublicSubnet会自动分配公网地址, 如下图所示:

Create public EC2

创建私有EC2

再创建一个私有EC2,假如用作内部数据服务器,这里要选择, XiongTestVPCXiongPrivateSubnet,前面已经设置过XiongPrivateSubnet 不会自动分配公网地址, 如下图所示:

Create private EC2
这里在创建私有EC2,在选择Security Group的时候,选择新创建的XiongInternalSecurityGroup,如下所示,这样就限制了只能从XiongPublicSubnet进行访问:

Select internal SG
测试能从外网访问公用EC2.

Test EC2

使用SSH进行访问:

[c:\~]$Connecting to 54.255.238.161:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.WARNING! The remote SSH server rejected X11 forwarding request.__|  __|_  )_|  (     /   Amazon Linux AMI___|\___|___|https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
[ec2-user@ip-10-0-1-130 ~]$ sudo su
[root@ip-10-0-1-130 ec2-user]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=0.895 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=47 time=1.02 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=47 time=1.02 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=47 time=0.968 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=47 time=0.980 ms
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4014ms
rtt min/avg/max/mdev = 0.895/0.977/1.022/0.046 ms
[root@ip-10-0-1-130 ec2-user]#

在这里的私有地址是10.0.1.130

那么通过公有的EC2访问私有的EC2,上传所创建的私钥,名为XiongEC2KeyPair.pem,私有EC2的地址为:10.0.2.43,使用Bastion进行访问,通过SSH进行访问如下:

[root@ip-10-0-1-130 ec2-user]#
[root@ip-10-0-1-130 ec2-user]# ls
XiongEC2KeyPair.pem
[root@ip-10-0-1-130 ec2-user]# pwd
/home/ec2-user
[root@ip-10-0-1-130 ec2-user]# ssh ec2-user@10.0.2.43 -i XiongEC2KeyPair.pem
The authenticity of host '10.0.2.43 (10.0.2.43)' can't be established.
ECDSA key fingerprint is SHA256:vJAvER9E5hehP6KOEqDErZxWaDjlRnjLypdHSrQ4Fmk.
ECDSA key fingerprint is MD5:df:48:7d:eb:d6:11:10:9c:cc:d4:2f:1b:19:d4:59:6e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.2.43' (ECDSA) to the list of known hosts.__|  __|_  )_|  (     /   Amazon Linux AMI___|\___|___|https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
[ec2-user@ip-10-0-2-43 ~]$ ifconfig
eth0      Link encap:Ethernet  HWaddr 06:26:BB:0C:73:8Ainet addr:10.0.2.43  Bcast:10.0.2.255  Mask:255.255.255.0inet6 addr: fe80::426:bbff:fe0c:738a/64 Scope:LinkUP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1RX packets:582 errors:0 dropped:0 overruns:0 frame:0TX packets:637 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:63293 (61.8 KiB)  TX bytes:62320 (60.8 KiB)lo        Link encap:Local Loopbackinet addr:127.0.0.1  Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:2 errors:0 dropped:0 overruns:0 frame:0TX packets:2 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:140 (140.0 b)  TX bytes:140 (140.0 b)[ec2-user@ip-10-0-2-43 ~]$

私有EC2通过NAT访问外网

前面创建的私有的EC2是不能访问外网的,这样是安全的,但是如果需要进行软件更新怎么办呢?

[ec2-user@ip-10-0-2-43 ~]$ sudo su
[root@ip-10-0-2-43 ec2-user]# yum update -y
Loaded plugins: priorities, update-motd, upgrade-helper
Could not retrieve mirrorlist http://repo.ap-southeast-1.amazonaws.com/latest/main/mirror.list error was
...
...
[root@ip-10-0-2-43 ec2-user]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
time out...

这里需要用到NAT才能访问到外网。

NAT Gateway和NAT Instance的比较

NAT Instance是在Security Group后面的,本质上是一个虚拟机Instance,会有性能限制,可能成为瓶颈。 NAT Gateway是在Security Group前面的,但是是在ACL后面的,是可扩展的,性能优于NAT Instance,除了性能高以外,还不需要维护,不需要与安全组Security Group关联,不需要做Disabling Source/Destination Checks操作。

使用NAT Instance

创建一个NAT Instance,在EC2创建界面中的Community AMI中,搜索NAT,找到以下NAT AMI,

amzn-ami-vpc-nat-2018.03.0.20190826-x86_64-ebs - ami-0012a981fe3b8891f
Amazon Linux AMI 2018.03.0.20190826 x86_64 VPC HVM ebs

这里要选择, XiongTestVPCXiongPublicSubnet

参考这个链接 , 需要关闭Source/Destination检查。
Disabling Source/Destination Checks
Each EC2 instance performs source/destination checks by default. This means that the instance must be the source or destination of any traffic it sends or receives. However, a NAT instance must be able to send and receive traffic when the source or destination is not itself. Therefore, you must disable source/destination checks on the NAT instance.

如下图所示,进行更改,
Source Dest check
更改后如下:
Source Dest check disabled
下面从私有的EC2中创建一个路由到这个NAT Instance,在私有的Subnet中的路由表中添加。
route to NAT instance
以上再测试yum update -y可以成功了!

[root@ip-10-0-2-43 ec2-user]# yum update -y
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main                                                                                                                                                             | 2.1 kB  00:00:00
amzn-updates                                                                                                                                                          | 2.5 kB  00:00:00
(1/5): amzn-main/latest/group_gz                                                                                                                                      | 4.4 kB  00:00:00
(2/5): amzn-updates/latest/group_gz                                                                                                                                   | 4.4 kB  00:00:00
(3/5): amzn-updates/latest/updateinfo                                                                                                                                 | 611 kB  00:00:01
(4/5): amzn-updates/latest/primary_db                                                                                                                                 | 2.4 MB  00:00:01
(5/5): amzn-main/latest/primary_db                                                                                                                                    | 4.0 MB  00:00:02
Resolving Dependencies
--> Running transaction check
...
...

只要在Default VPC Security Group里放行ICMP,也是可以Ping通外网的。

[root@ip-10-0-2-43 ec2-user]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=46 time=2.08 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=46 time=2.12 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=46 time=2.02 ms
...
...

那么现在删除这个NAT Instance,下面来创建NAT Gateway可以达到同样的效果。
以上删除NAT Instance后,在路由表中会显示一个黑洞‘Blackhole’,如下图所示:

Blackhole
结果是ping 8.8.8.8yum update -y都无法使用。

使用NAT Gateway

在VPC中直接创建一个NAT Gateway,在public Subnet中,如下图所示,这里要创建一个EIP,Elastic IP
Create NAT Gateway

直接从私有的EC2中创建一个路由到这个新创建的NAT GATEWAY,在私有的Subnet中的路由表中添加。如下图所示:

Route to NAT Gateway

测试的结果是ping 8.8.8.8yum update -y都又可以正常使用了。

添加定制ACL并设置ACL

前面创建VPC XiongTestVPC的时候,会默认创建一个ACL, 这个ACL是默认允许所有的流量通过的。然而如果添加定制的ACL的时候,默认是禁止所有的流量通过的,需要手动添加规则。

创建一个定制的ACL, 在Network ACL里,点Create Network ACL,取名XiongCustomizedACL,选择在VPC XiongTestVPC里创建。可以看到新创建的XiongCustomizedACL Network ACL禁止所有进入和出去的流量。

如果把新创建的XiongCustomizedACL Network ACL与公有的Subnet XiongPublicSubnet进行关联,那么由于新创建的XiongCustomizedACL Network ACL禁止所有进入和出去的流量,立马的效果就是公用的EC2的HTTP服务器无法访问。SSH也断开了。

添加Inbound和outbound的规则,如下图所示,立马公用的EC2的HTTP服务器马上可以访问了:

下图关联ACL到公用的Subnet,并设置inbound和outbound的规则 。
Edit ACL

注意
我在Inbound的规则中添加了以下规则,SSH才可以使用,难道使用了Ephemeral port?
600 Custom TCP Rule TCP (6) 1024 - 65535 0.0.0.0/0 ALLOW

使用Bastion进行访问。

[root@ip-10-0-1-130 ec2-user]# ssh ec2-user@10.0.2.43 -i XiongEC2KeyPair.pem
^C
[root@ip-10-0-1-130 ec2-user]# ssh ec2-user@10.0.2.43 -i XiongEC2KeyPair.pem
Last login: Sun Nov 17 07:19:47 2019 from ip-10-0-1-130.ap-southeast-1.compute.internal__|  __|_  )_|  (     /   Amazon Linux AMI___|\___|___|https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
[ec2-user@ip-10-0-2-43 ~]$ exit
logout

注意
一个Subnet只能在一个ACL里面,然而,一个Network ACL可以与多个Subnets相关联。
至少需要两个Subnets才能创建Loader Balancer

Endpoints测试

将私有的EC2移回到默认的VPC XiongTestVPC默认的ACL,这样测试会更容易些。

添加一个有S3访问权限的角色,

Add s3 access role

检查下权限:

[root@ip-10-0-1-130 ec2-user]# aws s3 ls
Unable to locate credentials. You can configure credentials by running "aws configure".
[root@ip-10-0-1-130 ec2-user]# ssh ec2-user@10.0.2.43 -i XiongEC2KeyPair.pem
Last login: Sun Nov 17 07:20:51 2019 from ip-10-0-1-130.ap-southeast-1.compute.internal__|  __|_  )_|  (     /   Amazon Linux AMI___|\___|___|https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
[ec2-user@ip-10-0-2-43 ~]$ aws s3 ls
2019-01-06 13:16:41 xiong-polly
2019-01-06 13:17:07 xiong-polly-mp3
2019-01-01 01:55:31 xiong2019
[ec2-user@ip-10-0-2-43 ~]$

为了测试需要,删除NAT Gateway以测试私有的EC2不能访问S3。记得删除NAT Gateway的时候删除EIP。

再测试,已经不能访问S3了,因为NAT Gateway删除后,私有的EC2已经不能访问外网了。

[ec2-user@ip-10-0-2-43 ~]$ aws s3 ls
...

创建一个S3 Gateway的Endpoint,com.amazonaws.ap-southeast-1.s3 amazon Gateway

S3 Gateway

可以查看到在私有的Subnet的Route Table里添加了一条路由到这个新创建的可以访问S3 的 Endpoint,测试结果如下,这里需要加上Region,否则不成功。

[ec2-user@ip-10-0-2-43 ~]$ aws s3 ls
^C
[ec2-user@ip-10-0-2-43 ~]$ aws s3 ls --region ap-southeast-1
2019-01-06 13:16:41 xiong-polly
2019-01-07 03:44:18 xiong-polly-mp3
2019-01-06 13:18:34 xiong2019
[ec2-user@ip-10-0-2-43 ~]$

术语

NAT: Network Address Translation (NAT)
Bastions: Jumbox,
Endpoints 通过VPC可以直接访问AWS的一些服务,不需要通过外网。
EIPElastic IP

本次实验的拓扑图。
拓扑图

Reference

AWS Network ACLs
AWS NAT Instances
Securely Connect to Linux Instances Running in a Private Amazon VPC
Ephemeral port Wkipedia

这篇关于在AWS中创建定制的虚拟私有云(VPC)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/343443

相关文章

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

PDFQFZ高效定制:印章位置、大小随心所欲

前言 在科技编织的快节奏时代,我们不仅追求速度,更追求质量,让每一分努力都转化为生活的甜蜜果实——正是在这样的背景下,一款名为PDFQFZ-PDF的实用软件应运而生,它以其独特的功能和高效的处理能力,在PDF文档处理领域脱颖而出。 它的开发,源自于对现代办公效率提升的迫切需求。在数字化办公日益普及的今天,PDF作为一种跨平台、不易被篡改的文档格式,被广泛应用于合同签署、报告提交、证书打印等各个

PHP7扩展开发之类的创建

本篇文章主要将如何在扩展中创建一个对象。创建的对象的过程,其实和一个小孩出生,成长的过程有些类似。 第一步,办准生证 生孩子第一步,先办准生证。声明我要生孩子了。对象创建的时候,如何办准生证呢?只要定义一个zend_class_entry变量即可。代码如下: zend_class_entry ce; zend_class_entry 是啥?可以认为它使一个原型,定义了一些对象应该有哪些东西