

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Simplificación de la autenticación de aplicaciones con TLS mutuo en Amazon ECS mediante el equilibrador de carga de aplicación
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs"></a>

*Olawale Olaleye y Shamanth Devagari, Amazon Web Services*

## Resumen
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-summary"></a>

Este patrón le permite simplificar la autenticación de sus aplicaciones y a reducir las cargas de seguridad con el TLS mutuo en Amazon Elastic Container Service (Amazon ECS) mediante el [equilibrador de carga de aplicación (ALB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/mutual-authentication.html). Con ALB, puede autenticar los certificados de cliente X.509 desde. AWS Private Certificate Authority Esta eficiente combinación ayuda a lograr una comunicación segura entre sus servicios, lo que reduce la necesidad de mecanismos de autenticación complejos en las aplicaciones. Además, el patrón utiliza Amazon Elastic Container Registry (Amazon ECR) para almacenar imágenes de contenedor.

En el ejemplo de este patrón se utilizan imágenes de Docker de una galería pública para crear las cargas de trabajo de muestra desde un inicio. Posteriormente, se crean nuevas imágenes de Docker para almacenarlas en Amazon ECR. Para la fuente, considere un sistema basado en Git como GitHub GitLab, o Bitbucket, o utilice Amazon Simple Storage Service Amazon S3 (Amazon S3). Para crear las imágenes de Docker, considere utilizarlas AWS CodeBuild para las imágenes siguientes.

## Requisitos previos y limitaciones
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS con acceso a las pilas de despliegue AWS CloudFormation . Asegúrese de tener [permisos de usuario o rol AWS Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html) (de IAM) para realizar la implementación. CloudFormation
+ AWS Command Line Interface (AWS CLI) [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). [Configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) sus AWS credenciales en su máquina local o en su entorno utilizando AWS CLI o configurando las variables de entorno del `~/.aws/credentials` archivo.
+ OpenSSL [instalado](https://www.openssl.org/).
+ Docker [instalado](https://www.docker.com/get-started/).
+ Familiaridad con lo Servicios de AWS descrito en [Herramientas](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools).
+ Conocimientos de Docker y NGINX.

**Limitaciones**
+ La TLS mutua para el equilibrador de carga de aplicación solo admite certificados de cliente X.509v3. No se admiten los certificados de cliente X.509v1.
+ La CloudFormation plantilla que se proporciona en el repositorio de código de este patrón no incluye el aprovisionamiento de un CodeBuild proyecto como parte de la pila.
+ Algunas Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

**Versiones de producto**
+ La versión 27.3.1 o posterior de Docker
+ AWS CLI versión 2.14.5 o posterior

## Arquitectura
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-architecture"></a>

En el diagrama siguiente se muestran los componentes de la arquitectura de este patrón.

![\[Flujo de trabajo para autenticarse con la TLS mutua mediante el equilibrador de carga de aplicación.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a343fa4e-097f-416b-9c83-01a28eb57dc3/images/e1371297-b987-4487-9b13-8120933c921f.png)


 En el diagrama, se muestra el siguiente flujo de trabajo:

1. Cree un repositorio de Git y confirme el código de la aplicación en el repositorio.

1. Cree una autoridad de certificación (CA) privada en. AWS Private CA

1. Cree un CodeBuild proyecto. CodeBuildproject Se activa mediante cambios de confirmación y crea la imagen de Docker y publica la imagen creada en Amazon ECR.

1. Copie la cadena del certificado y el cuerpo del certificado de la autoridad de certificación y cargue la agrupación de certificados en Amazon S3.

1. Cree un almacén de confianza con la agrupación de CA que cargó en Amazon S3. Asocie el almacén de confianza a los oyentes de la TLS mutua del equilibrador de carga de aplicación (ALB).

1. Utilice la CA privada para emitir certificados de cliente para las cargas de trabajo del contenedor. Cree también un certificado TLS privado utilizando. AWS Private CA

1. Importe el certificado TLS privado a AWS Certificate Manager (ACM) y utilícelo con el ALB.

1. La carga de trabajo del contenedor en `ServiceTwo` utiliza el certificado de cliente emitido para autenticarse con el equilibrador de carga de aplicación cuando se comunica con la carga de trabajo del contenedor en `ServiceOne`.

1. La carga de trabajo del contenedor en `ServiceOne` utiliza el certificado de cliente emitido para autenticarse con el equilibrador de carga de aplicación cuando se comunica con la carga de trabajo del contenedor en `ServiceTwo`.

**Automatización y escala**

Este patrón se puede automatizar por completo mediante el uso CloudFormation de operaciones de API desde un SDK para aprovisionar los recursos. AWS Cloud Development Kit (AWS CDK) AWS 

Se puede utilizar AWS CodePipeline para implementar una canalización de integración e implementación continuas (CI/CD) CodeBuild para automatizar el proceso de creación de imágenes de contenedores y la implementación de nuevas versiones en los servicios de clúster de Amazon ECS.

## Tools (Herramientas)
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools"></a>

**Servicios de AWS **
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) le ayuda a crear, almacenar y renovar claves y certificados SSL/TLS X.509 públicos y privados que protegen sus AWS sitios web y aplicaciones.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida en todo el territorio y. Cuentas de AWS Regiones de AWS
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) es un servicio de administración de contenedores altamente escalable y rápido que permite ejecutar, detener y administrar contenedores en un clúster. Puede ejecutar sus tareas y servicios en una infraestructura sin servidores gestionada por AWS Fargate. Como alternativa, para tener más control sobre su infraestructura, puede ejecutar sus tareas y servicios en un clúster de instancias de Amazon Elastic Compute Cloud (Amazon EC2) que administre.
+ [Amazon ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html) le permite interactuar de manera directa con los contenedores sin necesidad de interactuar primero con el sistema operativo del contenedor host, abrir puertos entrantes o administrar claves SSH. Puedes usar ECS Exec para ejecutar comandos u obtener un shell para un contenedor que se ejecute en una EC2 instancia de Amazon o en AWS Fargateél.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribuye el tráfico entrante de aplicaciones o redes entre varios destinos. Por ejemplo, puede distribuir el tráfico entre EC2 instancias, contenedores y direcciones IP de Amazon, en una o más zonas de disponibilidad. ELB supervisa el estado de los destinos registrados y enruta el tráfico solo a los destinos con un estado correcto. ELB escala el equilibrador de carga a medida que el tráfico entrante va cambiando con el tiempo. Puede escalarse automáticamente para adaptarse a la mayoría de las cargas de trabajo.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)le ayuda a ejecutar contenedores sin necesidad de gestionar servidores o EC2 instancias de Amazon. Fargate es compatible tanto con Amazon ECS como con Amazon Elastic Kubernetes Service (Amazon EKS). Puede ejecutar las tareas y servicios de Amazon ECS con el tipo de lanzamiento de Fargate o con un proveedor de capacidad de Fargate. Todo lo que tiene que hacer es empaquetar su aplicación en contenedores, especificar los requisitos de CPU y de memoria, definir las políticas de IAM y de redes, y lanzar la aplicación. Cada tarea de Fargate tiene su propio límite de aislamiento y no comparte el kernel subyacente, los recursos de CPU, los recursos de memoria ni la interfaz de red elástica con otra tarea.
+ [AWS Private Certificate Authority](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)permite la creación de jerarquías de autoridades de certificación (CA) privadas, incluidas las principales y las subordinadas CAs, sin los costes de inversión y mantenimiento que implica operar una CA local.

**Otras herramientas******
+ [Docker](https://www.docker.com/) es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores.
+ [GitHub[GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html)](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), y [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) son algunos de los sistemas de control de código fuente basados en Git más utilizados para realizar un seguimiento de los cambios en el código fuente.
+ [NGINX Open Source](https://nginx.org/en/docs/?_ga=2.187509224.1322712425.1699399865-405102969.1699399865) es un equilibrador de carga, caché de contenido y servidor web de código abierto. Este patrón lo utiliza como servidor web.
+ [OpenSSL](https://www.openssl.org/) es una biblioteca de código abierto que proporciona servicios que utilizan las implementaciones OpenSSL de TLS y CMS. 

**Repositorio de código**

El código de este patrón está disponible en el repositorio GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS).

## Prácticas recomendadas
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-best-practices"></a>
+ Utilice Amazon ECS Exec para ejecutar comandos en un contenedor u obtener un intérprete de comandos en un contenedor que se ejecute en Fargate. Puede también utilizar ECS Exec como ayuda para recopilar información de diagnóstico para la depuración.
+ Utilice grupos de seguridad y listas de control de acceso a la red () para controlar el tráfico entrante y saliente entre los servicios. ACLs Las tareas de Fargate reciben una dirección IP de la subred configurada en la nube privada virtual (VPC).

## Epics
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-epics"></a>

### Creación de repositorio
<a name="create-the-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Descargue el código fuente. | Para descargar el código fuente de este patrón, bifurque o clone el repositorio GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS). | DevOps ingeniero | 
| Cree un repositorio de Git. | Para crear un repositorio de Git que contenga el Dockerfile y los archivos `buildspec.yaml`, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`git clone https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS.git` | DevOps ingeniero | 

### Creación de una CA y generación de certificados
<a name="create-ca-and-generate-certificates"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree una CA privada en AWS Private CA. | Para crear una autoridad de certificación (CA) privada, ejecute los siguientes comandos en su terminal. Sustituya los valores de las variables de ejemplo por sus propios valores. <pre>export AWS_DEFAULT_REGION="us-west-2"<br />export SERVICES_DOMAIN="www.example.com"<br /><br />export ROOT_CA_ARN=`aws acm-pca create-certificate-authority \<br />    --certificate-authority-type ROOT \<br />    --certificate-authority-configuration \<br />    "KeyAlgorithm=RSA_2048,<br />    SigningAlgorithm=SHA256WITHRSA,<br />    Subject={<br />        Country=US,<br />        State=WA,<br />        Locality=Seattle,<br />        Organization=Build on AWS,<br />        OrganizationalUnit=mTLS Amazon ECS and ALB Example,<br />        CommonName=${SERVICES_DOMAIN}}" \<br />        --query CertificateAuthorityArn --output text`</pre>Para obtener más información, consulte [Crear una CA privada AWS Private CA en](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html) la AWS documentación. | DevOps ingeniero, AWS DevOps | 
| Cree e instale su certificado CA privado. | Para crear e instalar un certificado para su CA raíz privada, ejecute los comandos siguientes en su terminal:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | AWS DevOps, DevOps ingeniero | 
| Solicite un certificado administrado. | Para solicitar un certificado privado AWS Certificate Manager para usarlo con su ALB privado, utilice el siguiente comando:<pre>export TLS_CERTIFICATE_ARN=`aws acm request-certificate \<br />    --domain-name "*.${DOMAIN_DOMAIN}" \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --query CertificateArn --output text`</pre> | DevOps ingeniero, AWS DevOps | 
| Utilice la CA privada para emitir un certificado de cliente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`openssl req -out client_csr1.pem -new -newkey rsa:2048 -nodes -keyout client_private-key1.pem``openssl req -out client_csr2.pem -new -newkey rsa:2048 -nodes -keyout client_private-key2.pem`Este comando devuelve la CSR y la clave privada de los dos servicios. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)<pre>SERVICE_ONE_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr1.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_ONE_CERT_ARN: ${SERVICE_ONE_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_ONE_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert1.cert<br /><br />SERVICE_TWO_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr2.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_TWO_CERT_ARN: ${SERVICE_TWO_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_TWO_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert2.cert</pre>Para obtener más información, consulte [Emitir certificados de entidades finales privadas](https://docs.aws.amazon.com/privateca/latest/userguide/PcaIssueCert.html) en la AWS documentación. | DevOps ingeniero, AWS DevOps | 

### Aprovisionamiento de servicios de AWS
<a name="provision-aws-services"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
|  Servicios de AWS Aprovisione con la CloudFormation plantilla. | Para aprovisionar la nube privada virtual (VPC), el clúster de Amazon ECS, los servicios de Amazon ECS, Application Load Balancer y Amazon Elastic Container Registry (Amazon ECR), utilice la plantilla. CloudFormation  | DevOps ingeniero | 
| Obtenga las variables. | Verifique que tiene un clúster de Amazon ECS con dos servicios en ejecución. Para recuperar los detalles del recurso y almacenarlos como variables, utilice los comandos siguientes:<pre><br />export LoadBalancerDNS=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`LoadBalancerDNS`].OutputValue')<br /><br />export ECRRepositoryUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryUri`].OutputValue')<br /><br />export ECRRepositoryServiceOneUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceOneUri`].OutputValue')<br /><br />export ECRRepositoryServiceTwoUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceTwoUri`].OutputValue')<br /><br />export ClusterName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ClusterName`].OutputValue')<br /><br />export BucketName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`BucketName`].OutputValue')<br /><br />export Service1ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service1ListenerArn`].OutputValue')<br /><br />export Service2ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service2ListenerArn`].OutputValue')</pre> | DevOps ingeniero | 
| Crea un CodeBuild proyecto. | Para usar un CodeBuild proyecto para crear las imágenes de Docker para sus servicios de Amazon ECS, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Para obtener más información, consulta [Cómo crear un proyecto de compilación AWS CodeBuild en](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html) la AWS documentación. | AWS DevOps, DevOps ingeniero | 
| Cree las imágenes de Docker. | Se puede utilizar CodeBuild para realizar el proceso de creación de imágenes. CodeBuild necesita permisos para interactuar con Amazon ECR y trabajar con Amazon S3.Como parte del proceso, la imagen de Docker se compila y envía al registro de Amazon ECR. Para obtener información sobre la plantilla y el código, consulte [Información adicional](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional).(Opcional) Para compilar localmente con fines de prueba, utilice el siguiente comando:<pre># login to ECR<br />aws ecr get-login-password | docker login --username AWS --password-stdin $ECRRepositoryUri<br /><br /># build image for service one<br />cd /service1<br />aws s3 cp s3://$BucketName/serviceone/ service1/ --recursive<br />docker build -t $ECRRepositoryServiceOneUri .<br />docker push $ECRRepositoryServiceOneUri<br /><br /># build image for service two<br />cd ../service2<br />aws s3 cp s3://$BucketName/servicetwo/ service2/ --recursive<br />docker build -t $ECRRepositoryServiceTwoUri .<br />docker push $ECRRepositoryServiceTwoUri</pre> | DevOps ingeniero | 

### Cómo inhabilitar la TLS mutua
<a name="enable-mutual-tls"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cargue el certificado CA en Amazon S3. | Para cargar el certificado CA en el bucket de Amazon S3, utilice el comando de ejemplo siguiente:`aws s3 cp ca-cert.pem s3://$BucketName/acm-trust-store/ ` | AWS DevOps, DevOps ingeniero | 
| Cree un almacén de confianza. | Para crear el almacén de confianza, utilice el comando de ejemplo siguiente:<pre>TrustStoreArn=`aws elbv2 create-trust-store --name acm-pca-trust-certs \<br />    --ca-certificates-bundle-s3-bucket $BucketName \<br />    --ca-certificates-bundle-s3-key acm-trust-store/ca-cert.pem --query 'TrustStores[].TrustStoreArn' --output text`</pre> | AWS DevOps, DevOps ingeniero | 
| Cargue los certificados de cliente. | Para cargar los certificados de cliente en Amazon S3 para las imágenes de Docker, utilice el comando de ejemplo siguiente:<pre># for service one<br />aws s3 cp client_cert1.cert s3://$BucketName/serviceone/<br />aws s3 cp client_private-key1.pem s3://$BucketName/serviceone/<br /><br /># for service two<br />aws s3 cp client_cert2.cert s3://$BucketName/servicetwo/<br />aws s3 cp client_private-key2.pem s3://$BucketName/servicetwo/</pre> | AWS DevOps, DevOps ingeniero | 
| Modifique el oyente. | Para habilitar el TLS mutuo en el ALB, modifique los oyentes HTTPS con los comandos siguientes:<pre>aws elbv2 modify-listener \<br />    --listener-arn $Service1ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8080 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /><br />aws elbv2 modify-listener \<br />    --listener-arn $Service2ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8090 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /></pre>Para obtener más información, consulte [Configuración del TLS mutuo en un Application Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/configuring-mtls-with-elb.html) Balancer en AWS la documentación. | AWS DevOps, DevOps ingeniero | 

### Actualización de los servicios
<a name="update-the-services"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice la definición de tareas de Amazon ECS. | Para actualizar la definición de tareas de Amazon ECS, modifique el parámetro `image` en la revisión nueva.Para obtener los valores de los servicios respectivos, actualice las definiciones de tareas con la nueva URI de imágenes de Docker que creó en los pasos anteriores: `echo $ECRRepositoryServiceOneUri` o `echo $ECRRepositoryServiceTwoUri`<pre><br />    "containerDefinitions": [<br />        {<br />            "name": "nginx",<br />            "image": "public.ecr.aws/nginx/nginx:latest",   # <----- change to new Uri<br />            "cpu": 0,</pre>Para obtener más información, consulte [Actualización de una definición de tarea de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-task-definition-console-v2.html) mediante la consola en la AWS documentación.  | AWS DevOps, DevOps ingeniero | 
| Actualice el servicio Amazon ECS. | Actualice el servicio con la última definición de tareas. Esta definición de tareas es el esquema de las imágenes de Docker recién creadas y contiene el certificado de cliente que se requiere para la autenticación de TLS mutua.  Para actualizar el servicio, proceda de la manera siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Repita los pasos para el otro servicio. | Administrador de AWS DevOps, DevOps ingeniero de AWS | 

### Acceda a la aplicación
<a name="access-the-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Copie la URL de la aplicación. | Utilice la consola de Amazon ECS para ver la tarea. Cuando el estado de la tarea se haya actualizado a **En ejecución**, seleccione la tarea. En la sección **Tarea**, copie el ID de la tarea. | Administrador de AWS, AWS DevOps | 
| Pruebe su aplicación. | Para probar la aplicación, utilice ECS Exec para acceder a las tareas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | Administrador de AWS, AWS DevOps | 

## Recursos relacionados
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-resources"></a>

**Documentación de Amazon ECS**
+ [Creación de una definición de tarea de Amazon ECS mediante la consola](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)
+ [Creación de una imagen de contenedor para su uso en Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Clústeres de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Amazon ECS para AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html#create-container-image-next-steps)
+ [Mejores prácticas de redes de Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/networking-best-practices.html)
+ [Parámetros de definición del servicio Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html)

**Otros AWS recursos**
+ [¿Cómo uso una CA AWS privada para configurar los mTLS en el Application Load Balancer?](https://repost.aws/knowledge-center/elb-alb-configure-private-ca-mtls) ()AWS re:Post

## Información adicional
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional"></a>

**Edición del Dockerfile******

El siguiente código muestra los comandos que edita en el Dockerfile para el servicio 1:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 1: Ok" > /usr/share/nginx/html/index.html
ADD client_cert1.cert client_private-key1.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

El siguiente código muestra los comandos que edita en el Dockerfile para el servicio 2:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 2: Ok" > /usr/share/nginx/html/index.html
ADD client_cert2.cert client_private-key2.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Si está creando las imágenes de Docker CodeBuild, el `buildspec` archivo utiliza el número de CodeBuild compilación para identificar de forma exclusiva las versiones de las imágenes como un valor de etiqueta. Puede cambiar el archivo `buildspec` para adaptarlo a sus necesidades, como se muestra en el código personalizado `buildspec `: 

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_REPOSITORY_URI
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
        # change the S3 path depending on the service
      - aws s3 cp s3://$YOUR_S3_BUCKET_NAME/serviceone/ $CodeBuild_SRC_DIR/ --recursive 
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $ECR_REPOSITORY_URI:latest .
      - docker tag $ECR_REPOSITORY_URI:latest $ECR_REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $ECR_REPOSITORY_URI:latest
      - docker push $ECR_REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      # for ECS deployment reference
      - printf '[{"name":"%s","imageUri":"%s"}]' $CONTAINER_NAME $ECR_REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json   

artifacts:
  files:
    - imagedefinitions.json
```