Recientemente trabajé en la implementación de CloudFront para archivos de depósito s3. La mayoría de los tutoriales estaban haciendo eso usando la administración de la consola (UI), pero nosotros en preferimos el "código como infraestructura". Así que tuve que hacer esto usando CloudFormation. Con la ayuda de algunos enlaces y tutoriales de StackOverflow, pude escribir la plantilla de CloudFormation. Entonces, ¿qué son exactamente CloudFront y CloudFromation? Estas definiciones te ayudarán.
CloudFront: Amazon CloudFront es un servicio rápido de red de entrega de contenido (CDN) que entrega de forma segura datos, videos, aplicaciones y API a clientes de todo el mundo con baja latencia y altas velocidades de transferencia, todo dentro de un entorno amigable para los desarrolladores.
CloudFromation: en AWS, el servicio CloudFormation proporciona capacidades de infraestructura como código. CloudFormation utiliza plantillas , archivos de configuración definidos en sintaxis JSON o YAML, que son legibles por humanos y se pueden editar fácilmente, que puede usar para definir los recursos que desea configurar. CloudFormation lee una plantilla y genera una pila , un conjunto de recursos listos para usar en AWS.
¿Cómo va a funcionar esto?
Vamos a usar un cubo privado, también se puede usar un cubo público, pero no lo usamos para evitar el acceso directo al cubo y las fugas. CloudFront puede acceder a datos de depósitos privados mediante OAI (Identidad de acceso de origen). Un OAI es como un usuario virtual a través del cual CloudFront puede acceder a un depósito privado. Después de crear OAI y usarlo en CloudFront, debemos actualizar la política del depósito para que CloudFront con un OAI pueda acceder a él. Recursos que vamos a construir usando CloudFormation:
- Cubo S3
- OAI (Identidad de acceso de origen).
- Actualizar política de depósitos
- Distribución de CloudFront
AWSTemplateFormatVersion: "2010-09-09" Resources:
Primero, necesitamos definir la versión de la plantilla de AWS y un atributo "Recursos" para comenzar a escribir plantillas de recursos. La versión de la plantilla de AWS define las capacidades de una plantilla.
Cubo S3
Plantilla de recursos Bucker
Bucket: Type: AWS::S3::Bucket Properties: AccessControl: Private BucketName: private-bucket Tags: - Key: description Value: "Private files"
"Cubo" es el nombre de la plantilla de recursos. Podemos usarlo con cualquier nombre adecuado aquí. "Tipo" define el tipo de recurso, después de esto, podemos definir las propiedades del recurso. Cada recurso tendrá sus propias propiedades.
OAI (Identidad de acceso de origen)
plantilla de recursos OAI
CloudFrontOriginIdentity: Type: AWS::CloudFront::CloudFrontOriginAccessIdentity Properties: CloudFrontOriginAccessIdentityConfig: Comment: 'origin identity'
Actualizar política de depósitos
Recurso de plantilla para actualizar la política del depósito.
BucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: private-bucket PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: AWS: !Sub 'arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ${CloudFrontOriginIdentity}' Action: 's3:GetObject' Resource: arn:aws:s3:::private-bucket/*
Dos de los campos más importantes, aquí están el campo de AWS bajo el principio y los campos de recursos. OAI creado recientemente se puede usar directamente usando su nombre de recurso de plantilla como este "${CloudFrontOriginIdentity}"
Distribución de CloudFront
Ahora la plantilla final de recursos de distribución de CloudFront. Una propiedad que debe tener cuidado aquí es "Origins", que básicamente define el origen de su depósito y "DomainName" será así "${nombre del depósito}.s3.${región}.amazonaws.com".
publicDistribution: Type: AWS::CloudFront::Distribution Properties: DistributionConfig: Origins: - DomainName: private-bucket.s3.us-east-2.amazonaws.com Id: S3-private-bucket S3OriginConfig: OriginAccessIdentity: !Sub 'origin-access-identity/cloudfront/${CloudFrontOriginIdentity}' Enabled: 'true' Comment: Some comment DefaultCacheBehavior: AllowedMethods: - GET - HEAD TargetOriginId: S3-private-bucket ForwardedValues: QueryString: 'false' Cookies: Forward: none ViewerProtocolPolicy: redirect-to-https ViewerCertificate: CloudFrontDefaultCertificate: 'true'
Después de completar la plantilla de CloudFromation, puede usar el comando sam para implementar y verificar el estado de su pila de CloudFromation. Sam comando:
sam deploy --template-file [sample-template] --stack-name [Stack name] --s3-bucket sam-test-bucket --capabilities CAPABILITY_IAM
Algunos enlaces para aprender más:
Gracias por leer 💓️