Ola,

Neste artigo, quero contar como voce pode emitir um Let's Encrypt SSL com o servico AWS Route53. Vamos comecar a aprender.

O que e Let's Encrypt?

Let's Encrypt e uma autoridade certificadora sem fins lucrativos administrada pelo Internet Security Research Group (ISRG) que fornece certificados X.509 para criptografia Transport Layer Security sem custo. Isso significa que voce pode obter um certificado SSL GRATUITO para seu projeto/app e o certificado SSL sera valido por 90 dias. Voce precisa fazer alguma automacao para renovar automaticamente.

O que e AWS Route53?

Amazon Route 53 e um servico de Sistema de Nomes de Dominio escalavel e altamente disponivel. Lancado em 5 de dezembro de 2010, faz parte da plataforma de computacao em nuvem da Amazon.com, Amazon Web Services. Voce pode registrar um novo dominio ou transferir seu dominio existente ou apenas usar o sistema de gerenciamento de DNS para seu dominio.

Para este artigo, vou usar um dos meus dominios registrado no Google Domains e decidi apenas usar o sistema de gerenciamento de DNS. Por precaucao, o tipo de dominio deve ser uma hosted zone publica no Route53. Meu dominio e "ermis.email" Voce pode se sentir a vontade para verificar os registros NS do meu dominio : )

Por que estou usando Route 53 para emitir um Let's Encrypt SSL?

Quando voce solicita um novo certificado SSL do Let's Encrypt, o certbot envia uma requisicao aos servidores do Let's Encrypt e eu nao quero enviar e receber uma requisicao HTTP (insegura) fora da AWS para obter um certificado de criptografia : ) Penso que e um pouco estranho e pode causar alguns problemas de seguranca.

Caso contrario, talvez voce apenas precise de um certificado SSL e nao queira vincular seu certificado SSL diretamente a um nginx ou apache ou qualquer tipo de servico de servidor web. E tambem, e mais conveniente e rapido e capaz de fazer alguma automacao desta forma...

Politica IAM

Decidi usar uma AWS EC2 para emitir um SSL diretamente na AWS e, primeiro de tudo, precisamos criar uma Politica IAM para esta operacao para acessar o Route53. Minha EC2 tem um Elastic IP para tornar a Politica IAM mais segura e restringir o acesso aos recursos do Route53. Voce nao pode usar esta politica como IAM Role e eu a configuro para operacoes aws-cli com um nome de perfil especifico "certbot-route53". Aqui esta um exemplo de Politica IAM abaixo;

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CertbotRoute53",
            "Effect": "Allow",
            "Action": [
                "route53:GetChange",
                "route53:ListHostedZones"
            ],
            "Resource": "*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "3.92.136.59/32"
                }
            }
        },
        {
            "Sid": "CertbotRoute531",
            "Effect": "Allow",
            "Action": "route53:ChangeResourceRecordSets",
            "Resource": "arn:aws:route53:::hostedzone/Z01859902ZBFBUXJ0AV3J",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "3.92.136.59/32"
                }
            }
        }
    ]
}

O nome DNS do meu servidor de email e "hermes.ermis.email" e o registro A esta apontando para 3.65.142.23 com Simple Routing. Vou solicitar um Let's Encrypt SSL para "hermes.ermis.email" Meu dominio TLD nao e com/net/org e talvez pareca diferente, mas nao e problema. E apenas dominio e DNS : )

Requisitos para EC2

Se voce esta rodando em uma AMI oficial do Amazon Linux 2 recem-lancada, voce deve instalar alguns pre-requisitos. Primeiro, precisamos instalar um repositorio epel para instalar o certbot e o plugin certbot-dns-route53. Vamos fazer isso com um comando de uma linha!

[root@ip-172-31-89-11 ~]# amazon-linux-extras install -y epel && yum install -y certbot python2-certbot-dns-route53

Vamos Emitir!

Voce pode verificar meu comando de emissao abaixo.

[root@ip-172-31-89-11 ~]# export AWS_PROFILE=certbot-route53; \
> certbot certonly --dns-route53 \
> --agree-tos \
> -m hello@ermis.email \
> --non-interactive \
> -d hermes.ermis.email

Uma Ultima Coisa

Nao esqueca de configurar um cron para verificar se o SSL precisa de renovacao. Voce tambem pode usar o comando no seu cron.

00 00 * * * export AWS_PROFILE=certbot-route53; certbot renew -q

Obrigado por ler meu artigo, espero que tenha gostado!