

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Criptografar segredos do Kubernetes com o KMS em clusters existentes
<a name="enable-kms"></a>

**Importante**  
Este procedimento se aplica somente aos clusters do EKS que executam o Kubernetes versão 1.27 ou mais antiga. Se você estiver executando o Kubernetes versão 1.28 ou mais recente, os segredos do Kubernetes serão protegidos com criptografia envelopada por padrão. Para obter mais informações, consulte [Criptografia envelopada padrão para todos os dados de API do Kubernetes](envelope-encryption.md).

Se você habilitar a [criptografia de segredos](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/), os segredos do Kubernetes serão criptografados usando a chave do AWS KMS selecionada. A chave do KMS deve atender às seguintes condições:
+ Simétrica
+ Pode criptografar e descriptografar dados
+ Criado na mesma região AWS que o cluster
+ Se a chave do KMS tiver sido criada em uma conta diferente, a [entidade principal do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal) deverá ter acesso à chave do KMS.

Para obter mais informações, consulte [Como permitir que as entidades principais do IAM em outras contas usem uma chave do KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html) no * [ Guia do desenvolvedor do serviço de gerenciamento de chaves AWS](https://docs.aws.amazon.com/kms/latest/developerguide/) *.

**Atenção**  
Não é possível desativar a criptografia de segredos depois de habilitá-la. Essa ação é irreversível.

eksctl   
Este procedimento se aplica somente aos clusters do EKS que executam o Kubernetes versão 1.27 ou mais antiga. Para obter mais informações, consulte [Criptografia envelopada padrão para todos os dados de API do Kubernetes](envelope-encryption.md).

É possível ativar a criptografia de duas formas:
+ Adicione criptografia ao cluster com um único comando.

  Para recriptografar seus segredos automaticamente, execute o comando a seguir.

  ```
  eksctl utils enable-secrets-encryption \
      --cluster my-cluster \
      --key-arn arn:aws:kms:region-code:account:key/key
  ```

  Para optar por não recriptografar seus segredos automaticamente, execute o comando a seguir.

  ```
  eksctl utils enable-secrets-encryption
      --cluster my-cluster \
      --key-arn arn:aws:kms:region-code:account:key/key \
      --encrypt-existing-secrets=false
  ```
+ Adicione criptografia ao cluster com um arquivo `kms-cluster.yaml`.

  ```
  apiVersion: eksctl.io/v1alpha5
  kind: ClusterConfig
  
  metadata:
    name: my-cluster
    region: region-code
  
  secretsEncryption:
    keyARN: arn:aws:kms:region-code:account:key/key
  ```

  Para que seus segredos sejam recriptografados automaticamente, execute o comando a seguir.

  ```
  eksctl utils enable-secrets-encryption -f kms-cluster.yaml
  ```

  Para optar por não recriptografar seus segredos automaticamente, execute o comando a seguir.

  ```
  eksctl utils enable-secrets-encryption -f kms-cluster.yaml --encrypt-existing-secrets=false
  ```  
 Console de gerenciamento da AWS   

  1. Este procedimento se aplica somente aos clusters do EKS que executam o Kubernetes versão 1.27 ou mais antiga. Para obter mais informações, consulte [Criptografia envelopada padrão para todos os dados de API do Kubernetes](envelope-encryption.md).

  1. Abra o [console do Amazon EKS](https://console.aws.amazon.com/eks/home#/clusters).

  1. Escolha o cluster ao qual você deseja adicionar a criptografia do KMS.

  1. Escolha a guia **Overview** (Visão geral) (selecionada por padrão).

  1. Role para baixo até **Secrets encryption** (Criptografia de segredos) e escolha **Enable** (Habilitar).

  1. Selecione uma chave na lista suspenso e escolha **Enable** (Habilitar). Se nenhuma chave estiver listada, primeiro você deve criar uma. Para obter mais informações, consulte [Criar chaves](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) 

  1. Escolha o botão **Confirm** (Confirmar) para usar a chave escolhida.  
 AWS CLI  

  1. Este procedimento se aplica somente aos clusters do EKS que executam o Kubernetes versão 1.27 ou mais antiga. Para obter mais informações, consulte [Criptografia envelopada padrão para todos os dados de API do Kubernetes](envelope-encryption.md).

  1. Associe a configuração [de criptografia de segredos](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) ao seu cluster usando o seguinte comando da CLI AWS. Substitua os valores de exemplo pelos seus próprios.

     ```
     aws eks associate-encryption-config \
         --cluster-name my-cluster \
         --encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"arn:aws:kms:region-code:account:key/key"}}]'
     ```

     Veja abaixo um exemplo de saída.

     ```
     {
       "update": {
         "id": "3141b835-8103-423a-8e68-12c2521ffa4d",
         "status": "InProgress",
         "type": "AssociateEncryptionConfig",
         "params": [
           {
             "type": "EncryptionConfig",
             "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]"
           }
         ],
         "createdAt": 1613754188.734,
         "errors": []
       }
     }
     ```

  1. Você pode monitorar o status da atualização da criptografia com o comando a seguir. Utilize o `cluster name` e o `update ID` específicos que foram retornados na saída anterior. Quando um status de `Successful` for exibido, significa que a atualização está concluída.

     ```
     aws eks describe-update \
         --region region-code \
         --name my-cluster \
         --update-id 3141b835-8103-423a-8e68-12c2521ffa4d
     ```

     Veja um exemplo de saída abaixo.

     ```
     {
       "update": {
         "id": "3141b835-8103-423a-8e68-12c2521ffa4d",
         "status": "Successful",
         "type": "AssociateEncryptionConfig",
         "params": [
           {
             "type": "EncryptionConfig",
             "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]"
           }
         ],
         "createdAt": 1613754188.734>,
         "errors": []
       }
     }
     ```

  1. Para verificar se a criptografia está habilitada no cluster, execute comando `describe-cluster`. A resposta contém uma string `EncryptionConfig`.

     ```
     aws eks describe-cluster --region region-code --name my-cluster
     ```

Depois de habilitar a criptografia no cluster, você precisa criptografar todos os segredos existentes com a nova chave:

**nota**  
Se você utilizar `eksctl`, apenas será necessário executar o seguinte comando se você optar por não recriptografar seus segredos automaticamente:

```
kubectl get secrets --all-namespaces -o json | kubectl annotate --overwrite -f - kms-encryption-timestamp="time value"
```

**Atenção**  
Se você habilitar a [criptografia de segredos](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) para um cluster existente e se algum dia a chave do KMS usada for excluída, não haverá maneira de recuperar o cluster. Se você excluir a chave do KMS, colocará permanentemente o cluster em um estado degradado. Para informações, consulte [Exclusão das chaves do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html).

**nota**  
Por padrão, o comando `create-key` cria uma [chave KMS de criptografia simétrica](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html) com uma política de chave que concede à conta acesso de administrador raiz às ações e aos recursos do KMS AWS. Se você quiser reduzir o escopo das permissões, certifique-se de que as ações `kms:DescribeKey` e `kms:CreateGrant` sejam permitidas na política para a entidade principal que chama a API `create-cluster`.  
Para clusters que usam criptografia envelopada do KMS, são necessárias permissões `kms:CreateGrant`. A condição `kms:GrantIsForAWSResource` não tem suporte para a ação CreateCluster e não deve ser utilizada nas políticas do KMS para controlar permissões `kms:CreateGrant` de usuários que executam CreateCluster.