Autenticação simplificada de aplicações com TLS mútua no Amazon ECS usando o Application Load Balancer - Recomendações da AWS

Autenticação simplificada de aplicações com TLS mútua no Amazon ECS usando o Application Load Balancer

Olawale Olaleye e Shamanth Devagari, Amazon Web Services

Resumo

Este padrão ajuda você a simplificar a autenticação das suas aplicações e aliviar as atividades de segurança com TLS mútua no Amazon Elastic Container Service (Amazon ECS) usando o Application Load Balancer (ALB). Com o ALB, você pode autenticar certificados de cliente X.509 do Autoridade de Certificação Privada da AWS. Essa combinação poderosa ajuda a obter uma comunicação segura entre seus serviços, reduzindo a necessidade de mecanismos complexos de autenticação em suas aplicações. Além disso, o padrão usa o Amazon Elastic Container Registry (Amazon ECR) para armazenar imagens de contêiner.

O exemplo deste padrão usa imagens do Docker de uma galeria pública para criar inicialmente as workloads de amostra. Posteriormente, novas imagens do Docker são criadas para serem armazenadas no Amazon ECR. Para a fonte, considere um sistema baseado em Git, como GitHub, GitLab ou Bitbucket, ou use o Amazon Simple Storage Service Amazon S3 (Amazon S3). Para criar as imagens do Docker, considere usar o AWS CodeBuild para as imagens subsequentes.

Pré-requisitos e limitações

Pré-requisitos

  • Uma Conta da AWS ativa com acesso para implantar pilhas do AWS CloudFormation. Certifique-se de ter permissões de usuário ou perfil do AWS Identity and Access Management (IAM) para implantar o CloudFormation.

  • AWS Command Line Interface (AWS CLI) instalada. Configure as credenciais da AWS em sua máquina local ou ambiente usando a AWS CLI ou definindo as variáveis de ambiente no arquivo ~/.aws/credentials.

  • OpenSSL instalado.

  • Docker instalado.

  • Familiaridade com os Serviços da AWS descritos em Ferramentas.

  • Conhecimento em Docker e NGINX.

Limitações

  • A TLS mútua para o Application Load Balancer é compatível somente com certificados de cliente X.509v3. Não há suporte para certificados de cliente X.509v1.

  • O modelo do CloudFormation fornecido no repositório de código deste padrão não inclui o provisionamento de um projeto do CodeBuild como parte da pilha.

  • Alguns Serviços da AWS não estão disponíveis em todas as Regiões da AWS. Para conferir a disponibilidade de uma região, consulte AWS Services by Region. Para endpoints específicos, consulte Service endpoints and quotas e clique no link correspondente ao serviço desejado.

Versões do produto

  • Docker, versão 27.3.1 ou versões posteriores

  • AWS CLI versão 2.14.5 ou posterior

Arquitetura

O diagrama a seguir mostra os componentes da arquitetura desse padrão.

Fluxo de trabalho para autenticar com TLS mútua usando o Application Load Balancer.

O diagrama mostra o seguinte fluxo de trabalho:

  1. Crie um repositório Git e confirme o código da aplicação nele.

  2. Crie uma autoridade de certificação (CA) privada no CA Privada da AWS.

  3. Criar um projeto do CodeBuild. O CodeBuildproject é acionado por alterações de confirmação e cria a imagem do Docker e a publica no Amazon ECR.

  4. Copie a cadeia de certificados e o corpo do certificado da CA e faça o upload do pacote de certificados no Amazon S3.

  5. Crie um armazenamento confiável com o pacote da CA que você enviou para o Amazon S3. Associe o armazenamento confiável aos receptor da TLS mútua no Application Load Balancer (ALB).

  6. Use a CA privada para emitir certificados de cliente para as workloads do contêiner. Além disso, crie um certificado TLS privado usando o CA Privada da AWS.

  7. Importe o certificado TLS privado para o AWS Certificate Manager (ACM) e use-o com o ALB.

  8. A workload do contêiner em ServiceTwo usa o certificado de cliente emitido para autenticar com o ALB ao se comunicar com a workload do contêiner em ServiceOne.

  9. A workload do contêiner em ServiceOne usa o certificado de cliente emitido para autenticar com o ALB ao se comunicar com a workload do contêiner em ServiceTwo.

Automação e escala

Este padrão pode ser totalmente automatizado usando o CloudFormation, o AWS Cloud Development Kit (AWS CDK) ou operações de API de um SDK para provisionar os recursos da AWS.

Você pode usar o AWS CodePipeline para implementar um pipeline de implantação contínua e integração contínua (CI/CD) usando o CodeBuild para automatizar o processo de criação de imagens de contêiner e implantar novas versões para serviços de cluster do Amazon ECS.

Ferramentas

Serviços da AWS

  • O AWS Certificate Manager (ACM) auxilia na criação, no armazenamento e na renovação de chaves e certificados SSL/TLS X.509 públicos e privados, protegendo seus sites e aplicações na AWS.

  • O AWS CloudFormation permite configurar recursos da AWS, provisioná-los com rapidez e consistência e administrá-los durante todo o ciclo de vida, abrangendo Contas da AWS e Regiões da AWS.

  • O AWS CodeBuild é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.

  • O Amazon Elastic Container Registry (Amazon ECR) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.

  • O Amazon Elastic Container Service (Amazon ECS) é um serviço de gerenciamento de contêineres altamente escalável e rápido para execução, interrupção e gerenciamento de contêineres em um cluster. Você pode executar tarefas e serviços em uma infraestrutura sem servidor gerenciada pelo AWS Fargate. Como alternativa, para ter mais controle da infraestrutura, é possível executar tarefas e serviços em um cluster de instâncias do Amazon Elastic Compute Cloud (Amazon EC2) que você gerencia.

  • Com o Amazon ECS Exec, você pode interagir diretamente com contêineres sem precisar interagir primeiro com o sistema operacional do contêiner do host, abrir portas de entrada ou gerenciar chaves SSH. É possível usar o ECS Exec para executar comandos em um contêiner, ou obter um shell para ele, que seja executado em uma instância do Amazon EC2 ou no AWS Fargate.

  • O Elastic Load Balancing (ELB) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Por exemplo, você pode distribuir o tráfego entre instâncias do Amazon EC2, contêineres e endereços IP em uma ou mais zonas de disponibilidade. O ELB monitora a integridade dos destinos registrados e roteia o tráfego apenas para os destinos íntegros. O ELB escala seu balanceador de carga conforme o tráfego de entrada muda com o tempo. Ele pode ser dimensionado automaticamente para a maioria das workloads.

  • O AWS Fargate facilita a execução de contêineres sem que você precise gerenciar servidores ou instâncias do Amazon EC2. O Fargate é compatível com o Amazon ECS e com o Amazon Elastic Kubernetes Service (Amazon EKS). Você pode executar suas tarefas e serviços do Amazon ECS com o tipo de inicialização do Fargate ou com um provedor de capacidade do Fargate. Para isso, empacote sua aplicação em contêineres, especifique os requisitos de CPU e de memória, defina as políticas do IAM e de rede e inicie a aplicação. Cada tarefa do Fargate tem seu próprio limite de isolamento e não compartilha o kernel subjacente, os recursos de CPU, os recursos de memória nem a interface de rede elástica com outra tarefa.

  • O Autoridade de Certificação Privada da AWS permite a criação de hierarquias de autoridades de certificação (CA) privadas, incluindo CAs raiz e subordinadas, sem os custos de investimento e manutenção da operação de uma CA on-premises.

Outras ferramentas

  • O Docker é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres.

  • O GitHub, o GitLab e o Bitbucket são alguns dos sistemas de controle de versão baseados em Git mais usados para acompanhar as alterações no código-fonte.

  • O NGINX Open Source é um balanceador de carga, cache de conteúdo e servidor web de código aberto. Este padrão o usa como um servidor web.

  • O OpenSSL é uma biblioteca de código aberto que fornece serviços usados pelas implementações do OpenSSL de TLS e CMS.

Repositório de código

O código para este padrão está disponível no repositório mTLS-with-Application-Load-Balancer-in-Amazon-ECS do GitHub.

Práticas recomendadas

  • Use o Amazon ECS Exec para executar comandos ou obter um shell para um contêiner em execução no Fargate. Também é possível usar o ECS Exec para ajudar a coletar informações de diagnóstico para depuração.

  • Use grupos de segurança e listas de controle de acesso (ACLs) à rede para controlar o tráfego de entrada e saída entre os serviços. As tarefas do Fargate recebem um endereço IP da sub-rede configurada em sua nuvem privada virtual (VPC).

Épicos

TarefaDescriçãoHabilidades necessárias

Faça o download do código-fonte.

Para baixar o código-fonte desse padrão, bifurque ou clone o repositório mTLS-with-Application-Load-Balancer-in-Amazon-ECS do GitHub.

Engenheiro de DevOps

Crie um repositório Git.

Para criar um repositório Git para conter o Dockerfile e os arquivos buildspec.yaml, siga as etapas abaixo:

  1. Crie uma pasta no seu ambiente virtual. Nomeie-a com o nome do seu projeto.

  2. Abra um terminal em sua máquina local e acesse essa pasta.

  3. Para clonar o repositório mTLS-with-Application-Load-Balancer-in-Amazon-ECS no diretório do seu projeto, digite o seguinte comando:

git clone https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS.git

Engenheiro de DevOps
TarefaDescriçãoHabilidades necessárias

Crie uma CA privada no CA Privada da AWS.

Para criar uma autoridade de certificação (CA) privada, execute os comandos a seguir no seu terminal. Substitua os valores no exemplo por seus próprios valores.

export AWS_DEFAULT_REGION="us-west-2" export SERVICES_DOMAIN="www.example.com" export ROOT_CA_ARN=`aws acm-pca create-certificate-authority \ --certificate-authority-type ROOT \ --certificate-authority-configuration \ "KeyAlgorithm=RSA_2048, SigningAlgorithm=SHA256WITHRSA, Subject={ Country=US, State=WA, Locality=Seattle, Organization=Build on AWS, OrganizationalUnit=mTLS Amazon ECS and ALB Example, CommonName=${SERVICES_DOMAIN}}" \ --query CertificateAuthorityArn --output text`

Para obter mais detalhes, consulte Create a private CA in CA Privada da AWS na documentação da AWS.

Engenheiro de DevOps, AWS DevOps

Crie e instale seu certificado CA privado.

Para criar e instalar um certificado para sua CA raiz privada, execute os comandos os seguintes no seu terminal:

  1. Gere uma solicitação de assinatura de certificado (CSR).

    ROOT_CA_CSR=`aws acm-pca get-certificate-authority-csr \ --certificate-authority-arn ${ROOT_CA_ARN} \ --query Csr --output text`
  2. Emita o certificado raiz.

    AWS_CLI_VERSION=$(aws --version 2>&1 | cut -d/ -f2 | cut -d. -f1) [[ ${AWS_CLI_VERSION} -gt 1 ]] && ROOT_CA_CSR="$(echo ${ROOT_CA_CSR} | base64)" ROOT_CA_CERT_ARN=`aws acm-pca issue-certificate \ --certificate-authority-arn ${ROOT_CA_ARN} \ --template-arn arn:aws:acm-pca:::template/RootCACertificate/V1 \ --signing-algorithm SHA256WITHRSA \ --validity Value=10,Type=YEARS \ --csr "${ROOT_CA_CSR}" \ --query CertificateArn --output text`
  3. Recupere o certificado raiz.

    ROOT_CA_CERT=`aws acm-pca get-certificate \ --certificate-arn ${ROOT_CA_CERT_ARN} \ --certificate-authority-arn ${ROOT_CA_ARN} \ --query Certificate --output text` # store for later use aws acm-pca get-certificate \ --certificate-arn ${ROOT_CA_CERT_ARN} \ --certificate-authority-arn ${ROOT_CA_ARN} \ --query Certificate --output text > ca-cert.pem
  4. Importe o certificado CA raiz para instalá-lo na CA.

    [[ ${AWS_CLI_VERSION} -gt 1 ]] && ROOT_CA_CERT="$(echo ${ROOT_CA_CERT} | base64)" aws acm-pca import-certificate-authority-certificate \ --certificate-authority-arn $ROOT_CA_ARN \ --certificate "${ROOT_CA_CERT}"

    Para obter mais detalhes, consulte Installing the CA certificate na documentação da AWS.

AWS DevOps, engenheiro de DevOps

Solicite um certificado gerenciado.

Para solicitar um certificado privado no AWS Certificate Manager para usar com seu ALB privado, use o seguinte comando:

export TLS_CERTIFICATE_ARN=`aws acm request-certificate \ --domain-name "*.${DOMAIN_DOMAIN}" \ --certificate-authority-arn ${ROOT_CA_ARN} \ --query CertificateArn --output text`
Engenheiro de DevOps, AWS DevOps

Use a CA privada para emitir um certificado de cliente.

  • Para criar uma solicitação de assinatura de certificado (CSR) para os dois serviços, use o seguinte comando da AWS CLI:

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

Esse comando retorna a CSR e a chave privada dos dois serviços.

  • Para emitir um certificado para os serviços, execute os seguintes comandos para usar a CA privada que você criou:

SERVICE_ONE_CERT_ARN=`aws acm-pca issue-certificate \ --certificate-authority-arn ${ROOT_CA_ARN} \ --csr fileb://client_csr1.pem \ --signing-algorithm "SHA256WITHRSA" \ --validity Value=5,Type="YEARS" --query CertificateArn --output text` echo "SERVICE_ONE_CERT_ARN: ${SERVICE_ONE_CERT_ARN}" aws acm-pca get-certificate \ --certificate-authority-arn ${ROOT_CA_ARN} \ --certificate-arn ${SERVICE_ONE_CERT_ARN} \ | jq -r '.Certificate' > client_cert1.cert SERVICE_TWO_CERT_ARN=`aws acm-pca issue-certificate \ --certificate-authority-arn ${ROOT_CA_ARN} \ --csr fileb://client_csr2.pem \ --signing-algorithm "SHA256WITHRSA" \ --validity Value=5,Type="YEARS" --query CertificateArn --output text` echo "SERVICE_TWO_CERT_ARN: ${SERVICE_TWO_CERT_ARN}" aws acm-pca get-certificate \ --certificate-authority-arn ${ROOT_CA_ARN} \ --certificate-arn ${SERVICE_TWO_CERT_ARN} \ | jq -r '.Certificate' > client_cert2.cert

Para obter mais informações, consulte Issue private end-entity certificates na documentação da AWS.

Engenheiro de DevOps, AWS DevOps
TarefaDescriçãoHabilidades necessárias

Provisione os Serviços da AWS com o modelo do CloudFormation.

Para provisionar a nuvem privada virtual (VPC), o cluster do Amazon ECS, os serviços do Amazon ECS, o Application Load Balancer e o Amazon Elastic Container Registry (Amazon ECR), use o modelo do CloudFormation.

Engenheiro de DevOps

Obtenha as variáveis.

Verifique se você tem um cluster do Amazon ECS com dois serviços em execução. Para recuperar os detalhes do recurso e armazená-los como variáveis, use os seguintes comandos:

export LoadBalancerDNS=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`LoadBalancerDNS`].OutputValue') export ECRRepositoryUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryUri`].OutputValue') export ECRRepositoryServiceOneUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceOneUri`].OutputValue') export ECRRepositoryServiceTwoUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceTwoUri`].OutputValue') export ClusterName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`ClusterName`].OutputValue') export BucketName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`BucketName`].OutputValue') export Service1ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`Service1ListenerArn`].OutputValue') export Service2ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`Service2ListenerArn`].OutputValue')
Engenheiro de DevOps

Criar um projeto do CodeBuild.

Para usar um projeto do CodeBuild para criar as imagens do Docker dos seus serviços do Amazon ECS, faça o seguinte:

  1. Faça login no Console de gerenciamento da AWS e abra o console do CodeBuild em https://console.aws.amazon.com/codesuite/codebuild/.

  2. Criar um novo projeto Em Origem, escolha o repositório Git que você criou. Para obter informações sobre os diferentes tipos de integração com repositórios Git, consulte Working with connections na documentação da AWS.

  3. Confirme se o modo Privilegiado está habilitado. Para criar imagens do Docker, esse modo é necessário. Caso contrário, a imagem não será criada com êxito.

  4. Use o arquivo buildspec.yaml personalizado compartilhado para cada serviço.

  5. Forneça valores para o nome e a descrição do projeto.

Para obter mais detalhes, consulte Create a build project in AWS CodeBuild na documentação da AWS.

AWS DevOps, engenheiro de DevOps

Crie as imagens do Docker.

Você pode usar o CodeBuild para realizar o processo de criação de imagens. O CodeBuild precisa de permissões para interagir com o Amazon ECR e trabalhar com o Amazon S3.

Como parte do processo, a imagem do Docker é criada e enviada para o registro do Amazon ECR. Para obter detalhes sobre o modelo e o código, consulte Informações adicionais.

(Opcional) Para criar as imagens localmente para fins de teste, use o seguinte comando:

# login to ECR aws ecr get-login-password | docker login --username AWS --password-stdin $ECRRepositoryUri # build image for service one cd /service1 aws s3 cp s3://$BucketName/serviceone/ service1/ --recursive docker build -t $ECRRepositoryServiceOneUri . docker push $ECRRepositoryServiceOneUri # build image for service two cd ../service2 aws s3 cp s3://$BucketName/servicetwo/ service2/ --recursive docker build -t $ECRRepositoryServiceTwoUri . docker push $ECRRepositoryServiceTwoUri
Engenheiro de DevOps
TarefaDescriçãoHabilidades necessárias

Faça o upload do certificado CA para o Amazon S3.

Para fazer o upload do certificado CA para o bucket do Amazon S3, use o seguinte exemplo de comando:

aws s3 cp ca-cert.pem s3://$BucketName/acm-trust-store/

AWS DevOps, engenheiro de DevOps

Crie o armazenamento confiável.

Para criar o armazenamento confiável, use o seguinte exemplo de comando:

TrustStoreArn=`aws elbv2 create-trust-store --name acm-pca-trust-certs \ --ca-certificates-bundle-s3-bucket $BucketName \ --ca-certificates-bundle-s3-key acm-trust-store/ca-cert.pem --query 'TrustStores[].TrustStoreArn' --output text`
AWS DevOps, engenheiro de DevOps

Faça o upload dos certificados de cliente.

Para fazer upload dos certificados de cliente ao Amazon S3 para imagens do Docker, use o seguinte exemplo de comando:

# for service one aws s3 cp client_cert1.cert s3://$BucketName/serviceone/ aws s3 cp client_private-key1.pem s3://$BucketName/serviceone/ # for service two aws s3 cp client_cert2.cert s3://$BucketName/servicetwo/ aws s3 cp client_private-key2.pem s3://$BucketName/servicetwo/
AWS DevOps, engenheiro de DevOps

Modifique o receptor.

Para habilitar a TLS mútua no ALB, modifique os receptores HTTPS usando os seguintes comandos:

aws elbv2 modify-listener \ --listener-arn $Service1ListenerArn \ --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \ --ssl-policy ELBSecurityPolicy-2016-08 \ --protocol HTTPS \ --port 8080 \ --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false aws elbv2 modify-listener \ --listener-arn $Service2ListenerArn \ --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \ --ssl-policy ELBSecurityPolicy-2016-08 \ --protocol HTTPS \ --port 8090 \ --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false

Para obter mais informações, consulte Configuring mutual TLS on an Application Load Balancer na documentação da AWS.

AWS DevOps, engenheiro de DevOps
TarefaDescriçãoHabilidades necessárias

Atualize a definição de tarefa do Amazon ECS.

Para atualizar a definição da tarefa do Amazon ECS, modifique o parâmetro image na nova revisão.

Para obter os valores dos respectivos serviços, atualize as definições de tarefas com o novo Uri de imagens do Docker que você criou nas etapas anteriores: echo $ECRRepositoryServiceOneUri ou echo $ECRRepositoryServiceTwoUri

"containerDefinitions": [ { "name": "nginx", "image": "public.ecr.aws/nginx/nginx:latest", # <----- change to new Uri "cpu": 0,

Para obter mais informações, consulte Atualizar uma definição de tarefa do Amazon ECS usando o console na documentação da AWS.

AWS DevOps, engenheiro de DevOps

Atualize o serviço do Amazon ECS.

Atualize o serviço com a definição de tarefa mais recente. Essa definição de tarefa é o esquema para as imagens do Docker criadas recentemente e contém o certificado de cliente necessário para a autenticação de TLS mútua.

Para atualizar o serviço, use o seguinte procedimento:

  1. Abra o console do Amazon ECS em https://console.aws.amazon.com/ecs/v2.

  2. Na página Clusters, escolha o cluster.

  3. Na página de detalhes do cluster, na seção Serviços, marque a caixa de seleção ao lado do serviço e escolha Atualizar.

  4. Para que seu serviço inicie uma nova implantação, selecione Force new deployment (Forçar nova implantação).

  5. Em Definição de tarefa, escolha a família de definição de tarefa e a revisão mais recente.

  6. Selecione Atualizar.

Repita as etapas para o outro serviço.

Administrador da AWS, profissional de DevOps da AWS, engenheiro de DevOps
TarefaDescriçãoHabilidades necessárias

Copie o URL do aplicativo.

Use o console do Amazon ECS para visualizar a tarefa. Quando o status da tarefa for atualizado para Em execução, selecione a tarefa. Na seção Tarefa, copie o ID da tarefa.

Administrador da AWS, AWS DevOps

Testar seu aplicativo

Para testar sua aplicação, use o ECS Exec para acessar as tarefas.

  1. Para o serviço um, use o seguinte comando:

    container="nginx" ECS_EXEC_TASK_ARN="<TASK ARN>" aws ecs execute-command --cluster $ClusterName \ --task $ECS_EXEC_TASK_ARN \ --container $container \ --interactive \ --command "/bin/bash"
  2. No contêiner da tarefa do serviço um, use o comando a seguir para inserir o url do balanceador de carga interno e a porta do receptor que aponta para o serviço dois. Em seguida, especifique o caminho para o certificado de cliente para testar a aplicação:

    curl -kvs https://<internal-alb-url>:8090 --key /usr/local/share/ca-certificates/client.key --cert /usr/local/share/ca-certificates/client.crt
  3. No contêiner da tarefa do serviço dois, use o comando a seguir para inserir o url do balanceador de carga interno e a porta do receptor que aponta para o serviço dois. Em seguida, especifique o caminho para o certificado de cliente para testar a aplicação:

    curl -kvs https://<internal-alb-url>:8080 --key /usr/local/share/ca-certificates/client.key --cert /usr/local/share/ca-certificates/client.crt
    nota

    O sinalizador -k nos comandos curl (como parte de -kvs) desabilita a validação do certificado SSL. Você pode remover esse sinalizador ao usar um certificado SSL que corresponda ao seu nome de domínio, permitindo a validação adequada do certificado.

Administrador da AWS, AWS DevOps

Recursos relacionados

Documentação do Amazon ECS

Outros recursos da AWS

Mais informações

Edição do Dockerfile

O código a seguir mostra os comandos que você edita no Dockerfile do serviço 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/

O código a seguir mostra os comandos que você edita no Dockerfile do serviço 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/

Se você estiver criando imagens do Docker com o CodeBuild, o arquivo buildspec usa o número de compilação do CodeBuild para identificar de forma exclusiva as versões da imagem como um valor de tag. Você pode alterar o arquivo buildspec para atender às suas necessidades, conforme mostrado no seguinte código buildspec personalizado:

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