¿Buscas nuestro logo?
Aquí te dejamos una copia, pero si necesitas más opciones o quieres conocer más, visita nuestra área de marca.
¿Buscas nuestro logo?
Aquí te dejamos una copia, pero si necesitas más opciones o quieres conocer más, visita nuestra área de marca.
dev
Eloisa Ibáñez y Ernesto Alonso Marco 23/11/2016 Cargando comentarios…
Cada vez es más común que las aplicaciones, servicios e infraestructuras de las empresas se hagan en Cloud. No es la primera vez en el blog que hablamos de las ventajas que tiene trabajar en Cloud, de cuáles son las principales plataformas y tecnologías de Cloud o, incluso, de por qué todas las empresas deberían seguir los pasos de Amazon.
Incluso en alguna ocasión hemos sobrevolado los servicios de AWS. Sin embargo, en esta ocasión vamos a centrarnos en el servicio Amazon Virtual Private Cloud (VPC), que nos permite construir un CPD de comunicaciones virtual a golpe de ratón.
Amazon Virtual Private Cloud es un servicio que nos permite provisionar una sección aislada de forma lógica en la red de Amazon Web Services (AWS) donde poder lanzar recursos de AWS en una red que se defina. Permite seleccionar el rango de direcciones IP que se desee, la creación de subredes y configuración de tablas de enrutamiento y puertas de enlace de red.
Un ejemplo de configuración habitual es crear una subred para los servidores que necesiten acceso a Internet, y otra subred, para los sistemas de back-end como bases de datos y servidores de aplicaciones, de uso privado sin acceso a Internet.
También permite crear una red privada virtual (VPN) de hardware para conectar un centro de datos con la VPC.
La limitación de rango y clases de IP’s en las redes es de /16, es el recomendado para poder “jugar” y no limitarte a la hora de escoger direccionamiento.
En el caso de las subredes la limitación de rango de IP’s es /24 y también es el recomendado.
Permite la utilización de dhcp. En la mayoría de los casos es muy interesante el utilizarlo ya que dada la elasticidad de los servicios de AWS al levantar una nueva instancia, se le asigna una ip del rango seleccionado por el dhcp.
Dividir el rango privado de direcciones IP en la VPC en una o varias subredes públicas o privadas. Dentro de la VPC es muy interesante dividir subredes, una para la parte pública asignando un "internet gateway" para darle acceso a Internet y otra para la parte privada. También se pueden crear otras subredes para otro tipo de comunicaciones o conexión entre aplicaciones o servicios que puedan interesar.
Elastic IP. Para que las instancias que están dentro de la VPC puedan alcanzarse desde Internet es posible utilizar las IP’s fijas que ofrece AWS. Como excepción, es posible utilizar un servidor “de salto” (Bastion host), que tenga una IP pública y se conecte a las demás instancias dentro de la VPC mediante las IP’s privadas de las mismas.
VPC Peering. En el caso de tener infraestructuras en varios países, cuando se hace necesario el conectar unas VPC’s con otras, e incluso con VPC’s de distintas cuentas de AWS, se utiliza este tipo de conexión. AWS aprovecha la infraestructura que crea la VPC para crear una conexión VPC Peering. Consiste en crear una conexión de red entre 2 VPC’s que permite enrutar el tráfico entre ellas a través de las direcciones privadas de las mismas, como si estuvieran dentro de una misma red, lo que facilita la transferencia de datos y el acceso a los recursos.
Utilización Listas de Control de Acceso (ACL’s**)**. En algunos casos puede resultar interesante controlar el tráfico a nivel de subredes filtrando el acceso de entrada y salida entre las mismas.
Utilizar Security Groups. Es el firewall que AWS ofrece para gestionar el acceso a IP’s y puertos. Es primordial utilizar esta capa para restringir los accesos y dotar de seguridad a la VPC.
VPN. Si se desea (aunque es recomendable), se puede enrutar todo el tráfico proveniente y dirigido a las instancias de la VPC mediante una conexión VPN encriptada. Hay diferentes casos de uso y distintas configuraciones con respecto a las VPN’s:
Se integra con servicios de AWS como EC2, IAM, S3, Amazon RDS, DynamoDB, SQS, SNS, ECS, etc. ¿Qué podemos obtener de esas integraciones? Entre otras, las siguientes ventajas:
Levantar instancias EC2 directamente dentro de una VPC, al igual que el servicio de contenedores ECS.
Provisionar IP’s dentro de la VPC, de servicios y recursos de AWS como por ejemplo, Amazon RDS, Load Balancer, Elasticache, etc.
Para limitar el acceso a los recursos de AWS (como buckets de Amazon S3, temas de Amazon SNS y colas de Amazon SQS), se pueden crear directrices de IAM que limiten el acceso a dichos recursos únicamente a las direcciones IP elásticas asociadas con la VPC.
Como en Paradigma estamos siempre a favor de una automatización en los despliegues y procesos. Generalmente este tipo de despliegues y creación de infraestructuras se hacen a partir de plantillas de código.
En el caso de AWS se suele utilizar Cloudformation, otro de los servicios que facilita AWS y que mediante el uso de plantillas permite la creación de Stacks de infraestructura. Para montar un VPC usando una plantilla de Cloudformation sería tan sencillo (y tan complicado) como definir el recurso: AWS::EC2::VPC
Tan sencillo porque el hecho de definir ese recurso requiere únicamente facilitar un CIDRBlock como parámetro y tan complicado por todas las opciones que conlleva a continuación. Un VPC vacío no tiene mucho sentido, con lo cual lo primero que hay que decidir es la configuración de las subredes, sus rangos de ips, si serán públicas o privadas, de ser públicas necesitarán un gateway que permitan enrutar el tráfico a Internet…
Para definir vía Cloudformation un VPC como el que AWS facilita como “default” habría que seguir los siguientes pasos:
"VPC" : {
"Type" : "AWS::EC2::VPC",
"Properties" : {
"CidrBlock" : “10.1.0.0/16”,
}
}
"SubnetPublic1": {
"DependsOn" : ["VPC"],
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"AvailabilityZone" : “eu-west-1a”,
"CidrBlock" : “10.1.1.0/24”,
"VpcId" : { "Ref": "VPC" },
}
},
"SubnetPublic2": {
"DependsOn" : ["VPC"],
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"AvailabilityZone" : “eu-west-1b”,
"CidrBlock" : “10.1.2.0/24”,
"VpcId" : { "Ref": "VPC" },
}
},
"SubnetPublic3": {
"DependsOn" : ["VPC"],
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"AvailabilityZone" : “eu-west-1c”,
"CidrBlock" : “10.1.3.0/24”,
"VpcId" : { "Ref": "VPC" },
}
}
"InternetGateway" : {
"DependsOn" : ["VPC"],
"Type" : "AWS::EC2::InternetGateway",
"Properties" : {
"Tags" : [
{ "Key" : "Gateway", "Value" : "MyGateway" }
]
}
},
"VPCGatewayAttachment" : {
"DependsOn" : ["VPC", "InternetGateway"],
"Type" : "AWS::EC2::VPCGatewayAttachment",
"Properties" : {
"VpcId" : { "Ref" : "VPC" },
"InternetGatewayId" : { "Ref" : "InternetGateway" }
}
},
"PublicRouteTable" : {
"DependsOn" : ["VPC"],
"Type" : "AWS::EC2::RouteTable",
"Properties" : {
"VpcId" : { "Ref" : "VPC" },
}
},
"PublicRoute" : {
"DependsOn" : ["PublicRouteTable", "InternetGateway"],
"Type" : "AWS::EC2::Route",
"Properties" : {
"RouteTableId" : { "Ref" : "PublicRouteTable" },
"DestinationCidrBlock" : "0.0.0.0/0",
"GatewayId" : { "Ref" : "InternetGateway" }
}
},
"PublicSubnetRouteTableAssociation1" : {
"DependsOn" : ["SubnetPublic1", "PublicRouteTable"],
"Type" : "AWS::EC2::SubnetRouteTableAssociation",
"Properties" : {
"SubnetId" : { "Ref" : "SubnetPublic1" },
"RouteTableId" : { "Ref" : "PublicRouteTable" }
}
},
"PublicSubnetRouteTableAssociation2" : {
"DependsOn" : ["SubnetPublic2", "PublicRouteTable"],
"Type" : "AWS::EC2::SubnetRouteTableAssociation",
"Properties" : {
"SubnetId" : { "Ref" : "SubnetPublic2" },
"RouteTableId" : { "Ref" : "PublicRouteTable" }
}
},
"PublicSubnetRouteTableAssociation3" : {
"DependsOn" : ["SubnetPublic3", "PublicRouteTable"],
"Type" : "AWS::EC2::SubnetRouteTableAssociation",
"Properties" : {
"SubnetId" : { "Ref" : "SubnetPublic3" },
"RouteTableId" : { "Ref" : "PublicRouteTable" }
}
}
Este ejemplo es una simplificación de todo lo que se puede hacer con Cloudformation. Sin embargo, para hacernos a la idea de la potencia de esta herramienta conviene tener en cuenta que permite la integración con muchos de los servicios de AWS, como por ejemplo AWS Code Deploy, OpsWorks, Cloudwatch, Cloudtrail, RDS, DynamoDB, Redshift, Elasticache, S3, Auto Scaling, ELB, ECS, etc.
Especialmente a nivel de comunicaciones, Cloudformation permite establecer todo tipo de conectividad tanto entre VPCs (AWS::EC2::VPCPeeringConnection), con servicios de AWS (EC2::VPNVPC Endpoint), con Internet (AWS::EC2::NatGateway, AWS::EC2::InternetGateway).
Incluso facilita el establecimiento de una VPN que comunique el VPC con las dependencias del cliente para gestión de cloud híbridas o simplemente para acceder más cómodamente al VPC (AWS::EC2::VPNConnection, AWS::EC2::VPNGateway).
En muchas ocasiones, y dependiendo de las necesidades, es muy útil utilizar este tipo de servicios que ofrece Amazon para evitar el sobredimensionamiento de los recursos en tu centro de datos y así poder crecer cuando sea necesario en cloud. Así mismo desde Paradigma fomentamos la definición de este tipo de infraestructuras como código por la agilidad y control que aportan sobre las mismas.
hbspt.cta.load(2189055, '3733f91c-e3fa-4e62-b6ce-12833fc684f5', {});
Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.
Estamos comprometidos.
Tecnología, personas e impacto positivo.
Cuéntanos qué te parece.