AWS Backup Cross-Account com KMS para instâncias EC2
Tags: aws, backup, tutorial, cloud
Published: 2023-07-13 03:41:25

Em um mundo cada vez mais digital e dependente de tecnologia, as aplicações desempenham um papel fundamental para empresas, organizações e até mesmo para usuários individuais. Elas armazenam informações críticas, processam dados essenciais e fornecem funcionalidades vitais para o funcionamento diário de diversos setores. Diante desse cenário, é de extrema importância garantir a segurança e disponibilidade dessas aplicações, e uma das medidas essenciais nesse sentido é a realização de backups.

O backup de aplicações é uma medida essencial para garantir a segurança e disponibilidade dos dados vitais em um mundo digitalizado. Diante de ameaças como falhas técnicas, ataques cibernéticos e erros humanos, a perda de informações pode ser desastrosa para empresas e indivíduos. Realizar backups regularmente protege contra tais situações, permitindo a recuperação rápida e eficiente dos dados. Além disso, backups são fundamentais para garantir a continuidade dos negócios, minimizar prejuízos financeiros e evitar danos à reputação.

A Amazon Web Services (AWS) oferece uma solução de backup chamada AWS Backup, que fornece uma maneira centralizada de gerenciar backups em vários serviços e contas da AWS. O AWS Backup permite que as empresas criem, automatizem e gerenciem backups de seus dados, aplicativos e recursos.

No cenário abaixo, irei explicar como configurar o AWS Backup para realizar backups de suas instâncias EC2 em uma região específica e como configurar ele para enviar os backups para outra conta da AWS (Backup Cross-Account).

O backup entre contas oferece suporte apenas a CMKs gerenciadas pelo cliente. Ele não oferece suporte a cofres de backup criptografados usando CMKs gerenciadas pela AWS, incluindo cofres padrão, as CMKs gerenciadas pela AWS não devem ser compartilhadas entre contas, por isso precisamos criar nossa própria chave.

O cenário abaixo também funciona para volumes que estão criptografados com a CMK gerenciada pelo cliente.

## Pré-requisito:

 * Duas contas AWS, a conta A (origem) será nossa conta de aplicação onde está rodando nossa instância EC2 e a conta B (destino) será nossa conta de gerencia onde iremos armazenar a cópia do Backup.
 * Precisamos configurar o AWS Organizations em nossa conta B e ingressar a conta A no Organization (não entrarei em detalhes de como realizar a criação do AWS Organizations).

## Etapa 01 - Ativar o Cross-Account Backup (Conta B)

1) Acesse a console AWS e procure pelo serviço "AWS Backup".
2) No menu lateral a esquerda, clique em "Settings".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/611c3l9hkc8fuqig2ncy.png)
3) Procure o campo "Cross-account management" e habilite as funções "Backup policies", "Cross-account monitoring" e "Cross-account backup", clicando no botão "Turn on", o status deverá mudar de "Off" para "On".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mt35616eivqflpvdlc5j.png)

## Etapa 02 - Criar chave KMS na conta de destino (Conta B)

1) Acesse a console AWS e procure pelo serviço "Key Management Service".
2) No menu lateral a esquerda, clique em "Customer managed keys".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/suizucj1gnbammtu7uts.png)
3) Clique em "Create key".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3onk6hnmvs3r4sgcb2z.png)
4) Selecione a "Key type" como "Symmetric" e a "Key usage" como "Encrypt and decrypt" e clique em "Next".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9howz2q24nbblxdcgwn5.png)
5) Defina um nome de sua escolha para o "Alias" da key e clique em "Next".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/asbatlbdxlipvirrv430.png)
6) Em "Define key administrative permissions" selecione a role "AWSServiceRoleForBackup" e clique em "Next".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bekcbz5qq44sqttaj4xf.png)
7) Em "Define key usage permissions" selecione a role "AWSServiceRoleForBackup" e clique em "Next".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/weeb5c8kmeq0aylsk2qo.png)
8) Revise as informações e clique em "Finish" para criar a chave KMS.

## Etapa 03 - Criar o Backup Vault na conta de destino (Conta B)

1) Acesse a console AWS e procure pelo serviço "AWS Backup".
2) No menu lateral a esquerda, clique em "Backup vaults".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rz6qfnlssygpwymn0mn5.png)
3) Clique no botão "Create backup vault".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sujtgupl6hew8qvl7nb6.png)
4) Defina um nome de sua escolha para o Backup Vault, em seguida selecione a "Encrypt key" criada na etapa 02 "arn:aws:kms:us-east-1:XXXXXXXXXXXX:alias/AWS-Backup-Dest" e clique em "Create backup vault".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g1502npd6k5rit9xdouj.png)
5) Agora precisamos definir uma política permitindo a conta A de enviar backups para o Vault criado. Clique em "Edit access policy" e adicione o seguinte JSON (substituindo o "AccountSrcID" para o ID da conta A de origem), clique em "Save policy".
```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Allow AccountSrcID to copy into DestMyBackupVault",
      "Effect": "Allow",
      "Action": "backup:CopyIntoBackupVault",
      "Resource": "*",
      "Principal": {
        "AWS": "arn:aws:iam::AccountSrcID:root"
      }
    }
  ]
}
```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/taxi09mb8o0qgsz8w45w.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvfa54je69bohhvy631g.png)
6) Copie o ARN do Vault para utilizarmos na próxima etapa.

## Etapa 04 - Criar chave KMS na conta de origem (Conta A)

1) Acesse a console AWS e procure pelo serviço "Key Management Service".
2) No menu lateral a esquerda, clique em "Customer managed keys".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9b1ok2p261bfth7kp63a.png)
3) Clique em "Create key".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5rspa2hut5az7mrg4px9.png)
4) Selecione a "Key type" como "Symmetric" e a "Key usage" como "Encrypt and decrypt" e clique em "Next".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0cud6p6yndimav7z5hkt.png)
5) Defina um nome de sua escolha para o "Alias" da key e clique em "Next".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xisdwcxss35m5z5d7lbh.png)
6) Em "Define key administrative permissions" selecione a role "AWSServiceRoleForBackup" e clique em "Next".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f0u16eavj9cwflc79tsq.png)
7) Em "Define key usage permissions" selecione a role "AWSServiceRoleForBackup", em "Other AWS accounts" clique em "Add another AWS account" e digite o ID da conta de destino (conta B) e clique em "Next".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ofklp6k0dqp8f1vex2xg.png)
8) Revise as informações e clique em "Finish" para criar a chave KMS.

## Etapa 05 - Configurar o AWS Backup (Conta A)

1) Acesse a console AWS e procure pelo serviço "AWS Backup".
2) No menu lateral a esquerda, clique em "Backup vaults".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3pzqc602dr3jgvarmdnv.png)
3) Clique no botão "Create backup vault".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/alnkkosm19v0hc5ddayk.png)
4) Defina um nome de sua escolha para o Backup Vault, em seguida selecione a "Encrypt key" criada na etapa 04 "arn:aws:kms:us-east-1:XXXXXXXXXXXX:alias/AWS-Backup" e clique em "Create backup vault".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qauia44loug7wz2omti.png)
5) No menu lateral a esquerda, clique em "Backup plans".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c8u3o5g3aaiba3xijnxx.png)
6) Clique no botão "Create backup plan".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p6fougmyvh6y6oobo853.png)
7) Em "Start options", defina "Build a new plan", em seguida defina um nome de sua escolha para o Backup Plan.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wejdshh2pesknwo7ubgu.png)
8) Em "Backup rule configuration", defina um nome de sua escolha para o Backup Rule, em "Backup vault" selecione o Vault criado anteriormente, em "Backup frequency" defina a frequência de backup desejada (nesse exemplo a frequência será diária), em "Backup window" definimos qual será o horário que a regra de backup será executada (nesse exemplo será as 03:00 AM UTC. Obs: 00:00 horário de brasília), em "Retention period" definimos o tempo de retenção do backup (nesse exemplo a retenção será de 1 semana).
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yss5vub5gtqgnjh5wnqu.png)
9) Em "Copy to destination" definimos para qual região/conta iremos enviar a cópia do backup (nesse exemplo iremos enviar para a região US East (N. Virginia) e para o Vault da conta B), em "External vault ARN" adicionamos o ARN do Vault criado na etapa 03 Ex: arn:aws:backup:us-east-1:XXXXXXXXXXXX:backup-vault:DestMyBackupVault (irá aparecer uma mensagem falando que será necessário adicionar permissão de acesso da conta B no vault da conta A) clique no botão "Allow" para adicionar a permissão.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/azzvjkfyf0nmn08tmsqi.png)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/su074jr06lqne3dk0o99.png)
10) Em "Retention period" definimos qual será a retenção dos backups na conta B (nesse exemplo a retenção da conta B será de 3 dias). Clique em "Create plan".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/764vqhk0akhh5auk7fzr.png)
11) Agora definimos qual será os recursos que iremos fazer Backup (nesse exemplo vamos realizar o backup das instâncias EC2 que possuem a TAG "Backup = True"). Em "General" defina um nome de sua escolha para o Assign Resources, mantenha a "IAM role" como "Default role".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/or3m0pbmjdgwgv0fw2n0.png)
12) Em "Resource selection", marque a opção "Include specific resource types", em "Select specific resource types" selecione "EC2", em "Refine selection using tags" adicione a TAG "Key" = Backup o "Condition for value" = Equals e o "Value" = True. Clique em "Assign resources".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d04elydlsv4odt33ytxc.png)
13) Clique em "Continue".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/731xlltsr40nj4x326ec.png)

## Etapa 06 - Adicionar a TAG de Backup = True em todas as instâncias que você deseja realizar o Backup (Conta A)

1) Acesse a console AWS e procure pelo serviço "EC2".
2) No menu lateral a esquerda, clique em "Instances".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hihz2amefyi09svm7l0v.png)
3) Selecione a instância desejada, clique em "Actions" > "Instance settings" > "Manage tags".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1wvg1sesco2mli3lxuo1.png)
4) Clique em "Add new tag", em "Key" digite Backup e em "Value" digite True. Clique em Save.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ho2c8f9lxu75blew7wg0.png)

## Etapa 07 - Verificar backups realizados (Conta A)

1) Acesse a console AWS e procure pelo serviço "AWS Backup".
2) No menu lateral a esquerda, clique em "Jobs".
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nz5orkqba20trqddkst0.png)
3) Em "Backup jobs" podemos ver os backups realizados na conta de origem (Conta A).
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zp6dclallffj3f0blfau.png)
4) Em "Copy jobs" podemos ver os backups copiados para a conta de destino (Conta B).
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/20p0rklv5bgbkt5lj08z.png)

Espero tê-lo ajudado! Se houver alguma dúvida, não hesite em deixar um comentário.