

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Criptografe dados de registro no CloudWatch Logs usando AWS Key Management Service
<a name="encrypt-log-data-kms"></a>

Os dados do grupo de registros são sempre criptografados nos CloudWatch registros. Por padrão, o CloudWatch Logs usa criptografia do lado do servidor com o Galois/Counter Modo Padrão de Criptografia Avançada (AES-GCM) de 256 bits para criptografar dados de registro em repouso. Como alternativa, você pode usar o AWS Key Management Service para essa criptografia. Se você fizer isso, a criptografia será feita usando uma AWS KMS chave. O uso da criptografia AWS KMS é habilitado no nível do grupo de registros, associando uma chave KMS a um grupo de registros, seja quando você cria o grupo de registros ou depois que ele existe.

**Importante**  
CloudWatch Os registros agora oferecem suporte ao contexto de criptografia, usando `kms:EncryptionContext:aws:logs:arn` como chave e o ARN do grupo de registros como o valor dessa chave. Se você tiver grupos de logs que já criptografou com uma chave do KMS e quiser restringir a chave de modo que ela seja usada com uma única conta e grupo de logs, atribua uma nova chave do KMS que contenha uma condição na política do IAM. Para obter mais informações, consulte [AWS KMS chaves e contexto de criptografia](#encrypt-log-data-kms-policy).

**Importante**  
CloudWatch O Logs agora suporta `kms:ViaService` o que permite que os registros façam AWS KMS chamadas em seu nome. Você deve adicionar isso às suas funções que chamam CloudWatch Logs na sua Política de Chaves ou no IAM. Para maiores informações, veja [kms: ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service).

Depois que você associar uma chave do KMS a um grupo de logs, todos os novos dados ingeridos para o grupo de logs serão criptografados usando essa chave. Esses dados são armazenados em formato criptografado durante todo o período de retenção. CloudWatch O Logs descriptografa esses dados sempre que solicitados. CloudWatch Os registros devem ter permissões para a chave KMS sempre que dados criptografados forem solicitados.

Se, posteriormente, você desassociar uma chave KMS de um grupo de CloudWatch registros, o Logs criptografará os dados recém-ingeridos usando o método de criptografia padrão do CloudWatch Logs. Todos os dados ingeridos anteriormente que foram criptografados com a chave KMS permanecem criptografados com a chave KMS. CloudWatch Os registros ainda podem retornar esses dados após a desassociação da chave KMS, porque CloudWatch os registros ainda podem continuar referenciando a chave. No entanto, se a chave for desativada posteriormente, o CloudWatch Logs não conseguirá ler os registros que foram criptografados com essa chave.

**Importante**  
CloudWatch O Logs suporta somente chaves KMS simétricas. Não use uma chave assimétrica para criptografar os dados em seus grupos de logs. Para obter mais informações, consulte [Usar chaves simétricas e assimétricas](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html).

## Limites
<a name="encryption-limits"></a>
+ Para executar as etapas a seguir, é necessário ter as seguintes permissões: `kms:CreateKey`, `kms:GetKeyPolicy` e `kms:PutKeyPolicy`.
+ Depois de associar ou desassociar uma chave de um grupo de logs, pode levar até cinco minutos para que a operação seja efetivada.
+ Se você revogar o acesso do CloudWatch Logs a uma chave associada ou excluir uma chave KMS associada, seus dados criptografados no CloudWatch Logs não poderão mais ser recuperados.
+ Você não pode associar uma chave KMS a um grupo de registros existente usando o CloudWatch console.

## Etapa 1: criar uma AWS KMS chave
<a name="create-cmk"></a>

Para criar uma chave do KMS, use o seguinte comando [create-key](https://docs.aws.amazon.com/cli/latest/reference/kms/create-key.html):

```
aws kms create-key
```

A saída contém o ID de chave e o nome do recurso da Amazon (ARN) da chave. A seguir está um exemplo de saída:

```
{
    "KeyMetadata": {
        "Origin": "AWS_KMS",
        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "Description": "",
        "KeyManager": "CUSTOMER",
        "Enabled": true,
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "CreationDate": 1478910250.94,
        "Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59",
        "AWSAccountId": "123456789012",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ]
    }
}
```

## Etapa 2: definir permissões na chave do KMS
<a name="cmk-permissions-lg"></a>

Por padrão, todas AWS KMS as chaves são privadas. Somente o proprietário do recurso pode usá-la para criptografar e descriptografar dados. No entanto, o proprietário do recurso pode conceder permissões para acessar a chave do KMS a outros usuários e recursos. Com essa etapa, você concede permissão ao diretor do serviço de CloudWatch registros e à função de chamador para usar a chave. Esse principal de serviço deve estar na mesma AWS região em que a chave KMS está armazenada.

Como prática recomendada, recomendamos que você restrinja o uso da chave KMS somente às AWS contas ou grupos de registros que você especificar.

Primeiro, salve a política padrão para sua chave KMS `policy.json` usando o seguinte [get-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/get-key-policy.html)comando:

```
aws kms get-key-policy --key-id {{key-id}} --policy-name default --output text > ./policy.json
```

Abra o arquivo `policy.json` em um editor de texto e adicione a seção em negrito de uma das instruções a seguir. Separe a instrução existente da nova instrução com uma vírgula. Essas declarações usam `Condition` seções para aumentar a segurança da AWS KMS chave. Para obter mais informações, consulte [AWS KMS chaves e contexto de criptografia](#encrypt-log-data-kms-policy).

A seção `Condition` neste exemplo restringe a chave a um único ARN de grupo de logs.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "key-default-1",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
            "AWS": "arn:aws:iam::{{123456789012}}:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.{{us-east-1}}.amazonaws.com"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:Describe*"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:{{log-group-name}}"
                }
            }
        }
    ]
}
```

------

A seção `Condition` deste exemplo limita o uso da chave do AWS KMS à conta especificada, mas ele pode ser usado para qualquer grupo de logs.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "key-default-1",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
            "AWS": "arn:aws:iam::{{123456789012}}:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Principal": {
            "Service": "logs.{{us-east-1}}.amazonaws.com"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:Describe*"
            ],
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:{{us-east-1}}:{{123456789012}}:*"
                }
            }
        }
    ]
}
```

------

## Etapa 3: definir permissões para o diretor do IAM chamador
<a name="cmk-permissions-caller"></a>

Adicione permissões ao principal do IAM (usuário ou função) que chamará CloudWatch Logs APIs. As permissões necessárias dependem das operações que o diretor precisa realizar. Você pode adicionar essas permissões na política de AWS KMS chaves ou por meio do IAM na própria função. CloudWatch O Logs é usado `kms:ViaService` para fazer chamadas AWS KMS em nome do cliente. Para maiores informações, veja [kms: ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service).

### Permissões para associar uma chave KMS a um grupo de registros
<a name="cmk-permissions-association"></a>

O principal do IAM que chama `CreateLogGroup` com um `kmsKeyId` parâmetro, ou chamadas`AssociateKmsKey`, deve ter `kms:DescribeKey` permissão na chave KMS especificada. Se o chamador não tiver essa permissão, a chamada da API falhará com um`AccessDeniedException`.

O exemplo de declaração de política de chaves a seguir concede as permissões mínimas necessárias para associar uma chave KMS a um grupo de registros:

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::{{account_id}}:role/{{role_name}}"
  },
  "Action": [
    "kms:Describe*"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": [
        "logs.{{region}}.amazonaws.com"
      ]
    }
  }
}
```

### Permissões para ler e gravar dados de log criptografados
<a name="cmk-permissions-readwrite"></a>

Se o diretor do IAM também precisar ler ou gravar dados de registro criptografados (por exemplo, ligar para `PutLogEvents` `GetLogEvents``FilterLogEvents`, ou `StartQuery` em um grupo de registros criptografado com uma chave KMS gerenciada pelo cliente), o diretor precisará de AWS KMS permissões adicionais. O exemplo de declaração de política de chaves a seguir concede o conjunto completo de permissões necessárias para associar uma chave e ler ou gravar dados de log criptografados:

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::{{account_id}}:role/{{role_name}}"
  },
  "Action": [
    "kms:Encrypt",
    "kms:ReEncrypt*",
    "kms:Decrypt",
    "kms:GenerateDataKey*",
    "kms:Describe*"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": [
        "logs.{{region}}.amazonaws.com"
      ]
    }
  }
}
```

Como prática recomendada, defina o escopo da política somente para as funções que interagirão com grupos de registros AWS KMS criptografados.

Como alternativa, para conceder o conjunto completo de permissões para associar uma chave e ler ou gravar dados de log criptografados via IAM, você pode adicionar a política a seguir à função de chamador. Isso pode ser adicionado a uma política de função existente ou anexado a uma função como uma política separada adicional. Se você usar esse método, como prática recomendada, defina o escopo da política somente para as AWS KMS chaves que serão usadas para criptografia de log. Para obter mais informações, consulte [Editar políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:Decrypt",
                "kms:GenerateDataKey*",
                "kms:Describe*"
            ],
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": [
                        "logs.{{us-east-1}}.amazonaws.com"
                    ]
                }
            },
            "Resource": "arn:aws:kms:{{us-east-1}}:{{444455556666}}:key/{{key_id}}"
        }
    ]
}
```

------

Por fim, adicione a política atualizada usando o seguinte [put-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/put-key-policy.html)comando:

```
aws kms put-key-policy --key-id {{key-id}} --policy-name default --policy file://policy.json
```

## Etapa 4: associar uma chave KMS a um grupo de registros
<a name="associate-cmk"></a>

É possível associar uma chave do KMS a um grupo de logs ao criá-la ou posteriormente.

Para descobrir se um grupo de registros já tem uma chave KMS associada, use o seguinte [describe-log-groups](https://docs.aws.amazon.com/cli/latest/reference/logs/describe-log-groups.html)comando:

```
aws logs describe-log-groups --log-group-name-prefix "{{log-group-name-prefix}}"
```

Se a saída incluir um campo `kmsKeyId`, o grupo de logs será associado à chave exibida para o valor desse campo.

**Para associar a chave do KMS a um grupo de logs ao criá-lo**  
Use o comando [create-log-group](https://docs.aws.amazon.com/cli/latest/reference/logs/create-log-group.html) da seguinte forma:

```
aws logs create-log-group --log-group-name {{my-log-group}} --kms-key-id "{{key-arn}}"
```

**Para associar a chave do KMS a um grupo de logs existente**  
Use o comando [associate-kms-key](https://docs.aws.amazon.com/cli/latest/reference/logs/associate-kms-key.html) da seguinte forma:

```
aws logs associate-kms-key --log-group-name {{my-log-group}} --kms-key-id "{{key-arn}}"
```

## Etapa 5: Desassociar a chave de um grupo de registros
<a name="disassociate-cmk"></a>

Para desassociar a chave KMS associada a um grupo de registros, use o seguinte comando: [disassociate-kms-key](https://docs.aws.amazon.com/cli/latest/reference/logs/disassociate-kms-key.html)

```
aws logs disassociate-kms-key --log-group-name {{my-log-group}}
```

## AWS KMS chaves e contexto de criptografia
<a name="encrypt-log-data-kms-policy"></a>

Para aumentar a segurança de suas AWS Key Management Service chaves e de seus grupos de registros criptografados, o CloudWatch Logs agora coloca o grupo de registros ARNs como parte do *contexto de criptografia* usado para criptografar seus dados de registro. O contexto de criptografia é um conjunto de pares de chave/valor que são usados como dados autenticados adicionais. O contexto de criptografia permite que você use as condições da política do IAM para limitar o acesso à sua AWS KMS chave por AWS conta e grupo de registros. Para obter mais informações, consulte [Contexto de criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) e [Elementos de política JSON do IAM: condição](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html).

Recomendamos usar chaves do KMS diferentes para cada grupo de logs criptografado.

Se você tem um grupo de logs criptografado anteriormente e agora deseja alterar o grupo de logs para usar uma nova chave do KMS que funcione somente para esse grupo de logs, siga estas etapas.

**Como converter um grupo de logs criptografado para usar uma chave do KMS com uma política limitando-a a esse grupo de logs**

1. Insira o comando a seguir para localizar o ARN da chave atual do grupo de logs:

   ```
   aws logs describe-log-groups
   ```

   A saída inclui a linha a seguir. Anote o ARN. Ele será necessário na etapa 7.

   ```
   ...
   "kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef"
   ...
   ```

1. Digite o comando a seguir para criar uma nova chave do KMS:

   ```
   aws kms create-key
   ```

1. Digite o comando a seguir para salvar a política da nova chave em um arquivo `policy.json`:

   ```
   aws kms get-key-policy --key-id {{new-key-id}} --policy-name default --output text > ./policy.json
   ```

1. Use um editor de texto para abrir `policy.json` e adicionar uma expressão `Condition` à política:

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "key-default-1",
       "Statement": [
           {
               "Sid": "Enable IAM User Permissions",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::{{111122223333}}:root"
               },
               "Action": "kms:*",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Principal": {
               "Service": "logs.{{us-east-1}}.amazonaws.com"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:Describe*"
               ],
               "Resource": "*",
               "Condition": {
                   "ArnLike": {
                   "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:{{LOG-GROUP-NAME}}"
                   }
               }
           }
       ]
   }
   ```

------

1. Insira o comando a seguir para adicionar a política atualizada à nova chave do KMS:

   ```
   aws kms put-key-policy --key-id {{new-key-ARN}} --policy-name default --policy file://policy.json
   ```

1. Digite o comando a seguir para associar a política ao seu grupo de logs:

   ```
   aws logs associate-kms-key --log-group-name {{my-log-group}} --kms-key-id {{new-key-ARN}}
   ```

   CloudWatch Agora, o Logs criptografa todos os novos dados usando a nova chave.

1. Depois, revogue todas as permissões, exceto `Decrypt` da chave antiga. Primeiro, digite o comando a seguir para recuperar a política antiga:

   ```
   aws kms get-key-policy --key-id {{old-key-ARN}} --policy-name default --output text > ./policy.json
   ```

1. Use um editor de texto para abrir `policy.json` e remover todos os valores da lista `Action`, exceto `kms:Decrypt`

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "key-default-1",
       "Statement": [
           {
               "Sid": "Enable IAM User Permissions",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::{{111122223333}}:root"
               },
               "Action": "kms:*",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "logs.{{region}}.amazonaws.com"
               },
               "Action": [
                   "kms:Decrypt"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. Insira o comando a seguir para adicionar a política atualizada à antiga chave:

   ```
   aws kms put-key-policy --key-id {{old-key-ARN}} --policy-name default --policy file://policy.json
   ```