Amazon Web Services is the largest IaaS provider, according to this Gartner report, in terms of compute capacity. AWS also has a wider geographical presence than other similar companies.
AWS offers an option to have a private cloud inside their public
cloud. You can run this as a small personal cloud, or use one of
Amazon's connectivity offerings to connect it securely to your existing
infrastructure. This is an overview of the private cloud options with AWS, followed by an overview of the various connectivity options.
Private Cloud Options
When
you launch a regular EC2 instance, it has a public IP address. It is
always reachable from the public internet whether you want it or not.
You can configure the instance's AWS security group (the inbuilt
firewall) to allow access to specific ports only, but this may not serve
your security needs. You might want traffic to flow only between your
instances and not from the internet.
The obvious way to do this is to not have IP addresses which are
reachable from the internet, i.e., use private IP addresses. Which is
exactly what VPC offers.
IP Ranges
A VPC is
like a private network inside Amazon's cloud where you can create
smaller subnets and instances inside them. While creating a VPC, you'll
need to define the range of IP addresses that the VPC will cover.
Subnets
The basic unit of a VPC is a subnet - a logical network where you
can create instances, define the range of private IP addresses that the
instances inside it will have and create routing tables to define how
traffic is routed to and from the subnet.
Kinds of Subnets
There are two kinds of subnets you can create inside a VPC
Private : EC2 instances created inside it cannot talk to the internet and vice versa.
Public : EC2 instances created inside it can access the internet and can also be made accessible from the internet.
Private
and public are just names and not inbuilt properties. What actually
makes them "private" and "public" are the routing tables you create and
assign to the subnets. So you must first create the subnets, then create
the tables, assign them to the subnets and finally give them descriptive
names. If you use the VPC wizard, it will do this for you. You can
create multiple subnets of each type.
Communication between a public subnet and the internet
If
you want your instances to access the internet, you have an option of
adding an "internet gateway" to a subnet. The internet gateway here is
an AWS abstraction. You would add this to your public subnet (or
subnets). Once you assign a gateway, you must assign an elastic IP to an
instance inside that subnet. This instance is the one that would be
able to communicate with the outside world.
VPC places a
limit on the number of elastic IPs (5). If you have many instances
which need to access the internet, you would put all of them behind a
single instance with an EIP instead of assigning each an EIP, and use
NAT to access the internet from the "hidden" instances.
Communication between a private and a public subnet
Setting up communication between a private and a public subnet is a straightforward configuration in the routing table.
A typical example of using both private and public subnets in a VPC is from the AWS documentation:
Here, the database servers are extra-secure inside a private subnet, while the webservers are in the public subnet, as they have to serve traffic to end users.
The
"private" nature of a VPC is not limited to the network alone.
Inside a VPC, you have the option of launching a regular EC2 instance,
which is a virtual machine on a host shared with other guest VMs. You
can also choose to launch a dedicated instance - which is a truly
dedicated machine used only by your instance, giving you isolation at the hardware level as well. Costs are slightly higher
for dedicated instances.
A VPC lets you setup your own private cloud with
isolation at the hardware and the network levels. I'll explore the
various connectivity options between VPCs and your own datacenter in the
next post.