AWS VPC (Virtual Private Cloud) – виртуальная сеть, напоминающая традиционные сети, с которыми вы могли сталкиваться в дата-центрах или офисах, но с преимуществами, которые предлагает масштабируемая инфраструктура Amazon.
Содержание
Общие понятия
VPC и подсети
VPC – это виртуальная сеть, выделенная вашему аккаунту и она отделена от всех других сетей в облаке AWS.
В этой сети вы можете запускать ваши сервисы AWS, такие как инстансы EC2 машин.
Вы имеете полный контроль для вашей сетью, и можете:
- выбирать диапазон используемых IP-адресов;
- создавать подсети;
- настраивать маршрутизацию;
- создавать сетевые шлюзы;
- создавать Security groups и NACL (Network Access Control List).
Больше о убличных и приватных сетях – на странице Your VPC with Subnets.
Доступ в Интернет
Вы имеете полны контрль над тем, как сервисы в вашей VPC получают доступ к ресурсам вне этой сети.
Если у вас есть Default VPC (которая создаётся по умолчанию) – в неё включен сетевой шлюз (Internet Gateway), и каждая сеть по умолчанию является публичной сетью. Это значит, что каждый инстанс, запущенный в этой сети, получает приватный и публичный IP адреса, и может получать доступ в Интернет через Internet Gateway:
По умолчанию – каждый инстанс, запущенный не в сети по умолчанию (т.е. – из созданной вами VPC) получает приватный IP, но не публичный (если вы явно не указали другого при создании). Такие инстансы могут получать доступ друг к другу – но не в Интернет:
Больше о приватных и публичных IP – на странице Public and Private IP Addresses.
Вы можете открыть доступ в Интернет для машин в такой сети, подключив к ней Internet Gateway и привязав Elastic IP к инстансу в этой сети:
Больше об Internet Gateways – на странице Internet Gateways.
Либо – вы можете разрешить вашим машинам в VPC инициализирвоать исходящие соединения в Инетнет – но закрыть нежелательный доступ из него с помощью NAT-устройства.
NAT транслирует все приватные IP в один публичный. К самому NAT-устройсву привязывается публичный Elastic IP, и оно подключается к Инетрнету через Internet Gateway.
Подробнее про NAT – тут>>>.
Далее – мы вручную (без использования AWS VPC Wizard) создадим AWS VPC, подсеть в ней и добавим пару инстансов EC2.
Создание VPC
Переходим в Панель управления > VPC, и жмём Create VPC:
Создаём сеть:
- Name tag: имя сети;
- CIDR block: блок IP адресов, удобная утилита есть тут>>>;
- Tenancy: запускать инстансы в этой сети на выделенных (dedicated) или общих серверах, подробнее – тут>>>.
Блок 10.1.0.1/16 – это наша “базовая” сеть VPC.
Далее – создаём в ней подсеть. Переходим в Subnets > Create subnet:
- Name tag: имя подсети;
- VPC: “базовая” сеть, в которой будет создана новая подсеть;
- Availability Zone: каждая VPC привязывается к определённому региону и реурсам в этом регионе, но при этом – доступна из любой “зоны доступности” (дата-центра) в этом регионе;
- CIDR block: блок IP адресов, должен входить в блок адресов самой VPC.
Добавляем Internet Gateway, через который ресурсы в этой VPC и созданной подсети смогут “ходить в Интернет”.
Переходим в Internet Gateways > Create Internet Gateway:
После создания – IGW будет в состоянии detached.
Выделяем шлюз, и жмём Attache to VPC:
Теперь – у сети 10.1.0.1/16 имеется подключенный шлюз, но созданная подсеть – о нём не знает:
Переходим в Route Tables, и добавляем новый маршрут для сети 0.0.0.0/0, т.е. весь интернет, через созданный ранее шлюз:
Проверяем маршрутизацию созданной подсети:
Создание EC2
Переходим в EC2 > Launch Instance.
В настройках создаваемого инстанса – выбираем нашу подсеть:
В настройках интерфейсов – можно указать IP из подсети вручную:
После создания машины – её настройки выглядят так:
У машины имеется один интерфейс – eth0
, с IP 10.1.1.128
, но нет публичного IP и, соответсвенно, доступа “снаружи”.
Переходим в Elastic IPs > Allocate new Adress и добавляем Elastic IP.
После того, как он добавлен – мы можем подключить его к инстансу или интерфейсу.
Подключаем к интерфейсу:
Возвращаемся к EC2 машине:
Теперь у ней есть доступ из мира.
Аналогично – создаём вторую машину, указав IP из подсети вручную, но без EIP:
Теперь имеется два инстанса EC2 в одной подсети:
В настройках Security Group разрешаем ICMP:
Подключаемся к первой созданной машине:
$ ssh [email protected] -i Temp/rtfm_vpc_tests_env_1.pem
И проверяем доступ ко второй машине:
$ ping 10.1.1.11 PING 10.1.1.11 (10.1.1.11) 56(84) bytes of data. 64 bytes from 10.1.1.11: icmp_seq=1 ttl=64 time=0.697 ms 64 bytes from 10.1.1.11: icmp_seq=2 ttl=64 time=0.460 ms
$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.1.1.1 0.0.0.0 UG 0 0 0 eth0 10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Получить SSH ко второй машине теперь можно только с первой.
В целом – этого достаточно, что бы начать работу с AWS VPC.
Есть ещё много нюансов (например – два сетевых интерфейса для одного инстанса, группы безопасности и NACL и так далее) – о них в следующих постах.