

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á.

# Proteção de dados em AWS IoT Core
<a name="data-protection"></a>

O modelo de [responsabilidade AWS compartilhada modelo](https://aws.amazon.com/compliance/shared-responsibility-model/) se aplica à proteção de dados em AWS IoT Core. Conforme descrito neste modelo, AWS é responsável por proteger a infraestrutura global que executa todos os Nuvem AWS. Você é responsável por manter o controle sobre o conteúdo hospedado nessa infraestrutura. Você também é responsável pelas tarefas de configuração e gerenciamento de segurança dos Serviços da AWS que usa. Para saber mais sobre a privacidade de dados, consulte as [Data Privacy FAQ](https://aws.amazon.com/compliance/data-privacy-faq/). Para saber mais sobre a proteção de dados na Europa, consulte a postagem do blog [AWS Shared Responsibility Model and RGPD](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) no *Blog de segurança da AWS *.

Para fins de proteção de dados, recomendamos que você proteja Conta da AWS as credenciais e configure usuários individuais com Centro de Identidade do AWS IAM ou AWS Identity and Access Management (IAM). Dessa maneira, cada usuário receberá apenas as permissões necessárias para cumprir suas obrigações de trabalho. Recomendamos também que você proteja seus dados das seguintes formas:
+ Use uma autenticação multifator (MFA) com cada conta.
+ Use SSL/TLS para se comunicar com AWS os recursos. Exigimos TLS 1.2 e recomendamos TLS 1.3.
+ Configure a API e o registro de atividades do usuário com AWS CloudTrail. Para obter informações sobre o uso de CloudTrail trilhas para capturar AWS atividades, consulte Como [trabalhar com CloudTrail trilhas](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html) no *Guia AWS CloudTrail do usuário*.
+ Use soluções de AWS criptografia, juntamente com todos os controles de segurança padrão Serviços da AWS.
+ Use serviços gerenciados de segurança avançada, como o Amazon Macie, que ajuda a localizar e proteger dados sensíveis armazenados no Amazon S3.
+ Se você precisar de módulos criptográficos validados pelo FIPS 140-3 ao acessar AWS por meio de uma interface de linha de comando ou de uma API, use um endpoint FIPS. Para saber mais sobre os endpoints FIPS disponíveis, consulte [Federal Information Processing Standard (FIPS) 140-3](https://aws.amazon.com/compliance/fips/).

É altamente recomendável que nunca sejam colocadas informações confidenciais ou sensíveis, como endereços de e-mail de clientes, em tags ou campos de formato livre, como um campo **Nome**. Isso inclui quando você trabalha com AWS IoT ou Serviços da AWS usa o console, a API ou AWS SDKs. AWS CLI Quaisquer dados inseridos em tags ou em campos de texto de formato livre usados para nomes podem ser usados para logs de faturamento ou de diagnóstico. Se você fornecer um URL para um servidor externo, é fortemente recomendável que não sejam incluídas informações de credenciais no URL para validar a solicitação nesse servidor.

Consulte mais informações sobre proteção de dados na publicação do blog [AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) no *Blog de segurança da AWS *.

AWS IoT os dispositivos coletam dados, realizam alguma manipulação nesses dados e, em seguida, enviam esses dados para outro serviço da web. É possível optar por armazenar alguns dados em seu dispositivo por um curto período. Você é responsável por fornecer a proteção de dados sobre esses dados em repouso. Quando seu dispositivo envia dados para AWS IoT, ele o faz por meio de uma conexão TLS, conforme discutido posteriormente nesta seção. AWS IoT os dispositivos podem enviar dados para qualquer AWS serviço. Para obter mais informações sobre a segurança de dados de cada serviço, consulte a documentação desse serviço. AWS IoT pode ser configurado para gravar registros em CloudWatch Logs e registrar chamadas de AWS IoT API em AWS CloudTrail. Para obter mais informações sobre a segurança de dados desses serviços, consulte [Autenticação e controle de acesso para a Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/auth-and-access-control-cw.html) e [Criptografia de arquivos de CloudTrail log com chaves AWS KMS gerenciadas](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/encrypting-cloudtrail-log-files-with-aws-kms.html).

## Criptografia de dados em AWS IoT
<a name="data-protection-encrypt"></a>

Por padrão, todos os AWS IoT dados em trânsito e em repouso são criptografados. [Os dados em trânsito são criptografados usando TLS](transport-security.md) e os dados em repouso são criptografados usando chaves AWS próprias. AWS IoT suporta gerenciamento de clientes AWS KMS keys (chaves KMS) a partir do AWS Key Management Service (AWS KMS). No entanto, o Device Advisor e o AWS IoT Wireless usam somente um Chave pertencente à AWS para criptografar os dados do cliente.

 

# Segurança de transporte em AWS IoT Core
<a name="transport-security"></a>

O Transport Layer Security (TLS) é um protocolo criptográfico projetado para comunicação segura em uma rede de computadores. O AWS IoT Core Device Gateway exige que os clientes criptografem toda a comunicação em trânsito usando TLS para conexões de dispositivos ao Gateway. O TLS é usado para obter a confidencialidade dos protocolos de aplicativos (MQTT, HTTP e WebSocket) suportados pelo. AWS IoT Core O suporte ao TLS está disponível em várias de linguagens de programação e sistemas operacionais. Os dados AWS internos são criptografados pelo AWS serviço específico. Para obter mais informações sobre criptografia de dados em outros AWS serviços, consulte a documentação de segurança desse serviço.

**Topics**
+ [Protocolos TLS](#tls-ssl-policy)
+ [Políticas de segurança](#tls-policy-table)
+ [Notas importantes para a segurança do transporte em AWS IoT Core](#tls-ssl-core)
+ [Segurança de transporte para dispositivos sem fio LoRa WAN](#tls-lorawan)

## Protocolos TLS
<a name="tls-ssl-policy"></a>

AWS IoT Core suporta as seguintes versões do protocolo TLS:
+ TLS 1.3 
+ TLS 1.2

Com AWS IoT Core, você pode definir as configurações de TLS (para [TLS 1.2 e TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) [1.3](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3)) nas configurações de domínio. Para obter mais informações, consulte [Definir configurações de TLS nas configurações de domínio](iot-endpoints-tls-config.md).

## Políticas de segurança
<a name="tls-policy-table"></a>

Uma política de segurança é uma combinação de protocolos TLS e suas cifras que determinam quais protocolos e cifras são compatíveis durante as negociações de TLS entre um cliente e um servidor. Você pode configurar seus dispositivos para usar políticas de segurança predefinidas com base em suas necessidades. Observe que isso AWS IoT Core não oferece suporte a políticas de segurança personalizadas.

Você pode escolher uma das políticas de segurança predefinidas para seus dispositivos ao conectá-los a. AWS IoT Core Os nomes das políticas de segurança predefinidas mais recentes AWS IoT Core incluem informações de versão com base no ano e mês em que foram lançadas. A política de segurança padrão predefinida é `IoTSecurityPolicy_TLS13_1_2_2022_10`. Para especificar uma política de segurança, você pode usar o AWS IoT console ou AWS CLI o. Para obter mais informações, consulte [Definir configurações de TLS nas configurações de domínio](iot-endpoints-tls-config.md).

A tabela a seguir descreve as políticas de segurança predefinidas mais recentes compatíveis com o AWS IoT Core . O `IotSecurityPolicy_` foi removido dos nomes de política na linha de cabeçalho para que se ajustem ao espaço.


| **Política de segurança** | TLS13\$11\$13\$12022\$110 | TLS13\$11\$12\$12022\$110 | TLS12\$11\$12\$12022\$110 | TLS12\$11\$10\$12016\$101\$1 | TLS12\$11\$10\$12015\$101\$1 | 
| --- | --- | --- | --- | --- | --- | 
| Porta TCP |  443/8443/8883  |  443/8443/8883  |  443/8443/8883  | 443 | 8443/8883 | 443 | 8443/8883 | 
| Protocolos TLS | 
| TLS 1.2 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| TLS 1.3 | ✓ | ✓ |  |  |  |  |  | 
| Cifras TLS | 
| TLS\$1AES\$1128\$1GCM\$1 SHA256 | ✓ | ✓ |  |  |  |  |  | 
| TLS\$1AES\$1256\$1GCM\$1 SHA384 | ✓ | ✓ |  |  |  |  |  | 
| TLS\$1 \$1 \$1 CHACHA20 POLY1305 SHA256 | ✓ | ✓ |  |  |  |  |  | 
| ECDHE-RSA- -GCM- AES128 SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA- - AES128 SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA- -SHA AES128 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA- -GCM- AES256 SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA- - AES256 SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-RSA- -SHA AES256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES128-GCM- SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES128-SHA256 |  | ✓ | ✓ | ✓ |  | ✓ | ✓ | 
| AES128-SHAH |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-GCM- SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| AES256-SHAH |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| DHE-RSA- -SHA AES256 |  |  |  |  |  | ✓ | ✓ | 
| ECDHE-ECDSA- -GCM- AES128 SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA- - AES128 SHA256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA- -SHA AES128 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA- -GCM- AES256 SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA- - AES256 SHA384 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 
| ECDHE-ECDSA- -SHA AES256 |  | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 

**nota**  
`TLS12_1_0_2016_01`só está disponível no seguinte Regiões da AWS: ap-east-1, ap-northeast-2, ap-south-1, ap-south-1, ap-southeast-2, ca-central-1, cn-north-1, cn-northwest-1, eu-north-1, eu-north-1, eu-west-2, eu-west-3, me-south-1, sa-lest-1, us-east-1, us-east-2, -1, -2, us-west-1. us-gov-west us-gov-west  
`TLS12_1_0_2015_01`só está disponível no seguinte Regiões da AWS: ap-northeast-1, ap-southeast-1, eu-central-1, eu-central-1, eu-west-1, us-east-1, us-west-2.

## Notas importantes para a segurança do transporte em AWS IoT Core
<a name="tls-ssl-core"></a>

Para dispositivos que se conectam AWS IoT Core usando o [MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html), o TLS criptografa a conexão entre os dispositivos e o agente e AWS IoT Core usa a autenticação do cliente TLS para identificar dispositivos. Para obter mais informações, consulte [Autenticação do cliente](https://docs.aws.amazon.com//iot/latest/developerguide/client-authentication.html). Para dispositivos que se conectam AWS IoT Core usando [HTTP](https://docs.aws.amazon.com//iot/latest/developerguide/http.html), o TLS criptografa a conexão entre os dispositivos e o agente, e a autenticação é delegada à AWS Signature Version 4. Para obter mais informações, consulte [Assinatura de solicitações com o SignatAre Versão 4](https://docs.aws.amazon.com//general/latest/gr/create-signed-request.html) na *Referência geral da AWS *.

Quando você conecta dispositivos ao AWS IoT Core, o envio da [extensão de Indicação de Nome do Servidor (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) não é obrigatório, mas é altamente recomendado. Para usar recursos, como [registro de várias contas](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), [domínios personalizados](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html), [endpoints da VPC](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html) e [políticas de TLS configuradas](https://docs.aws.amazon.com//iot/latest/developerguide/iot-endpoints-tls-config.html), é necessário usar a extensão SNI e fornecer o endereço completo do endpoint no campo `host_name`. O campo `host_name` deve conter o endpoint que você está chamando. Esse endpoint deve ser um dos seguintes:
+ O `endpointAddress` retornado por `aws iot [describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html) --endpoint-type iot:Data-ATS`
+ O `domainName` retornado por `aws iot [describe-domain-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-domain-configuration.html) –-domain-configuration-name "domain_configuration_name"`

As conexões tentadas por dispositivos com o `host_name` valor incorreto ou inválido falharão. AWS IoT Core registrará falhas no tipo de [autenticação personalizada](https://docs.aws.amazon.com//iot/latest/developerguide/custom-authentication.html). CloudWatch 

AWS IoT Core não suporta a [extensão SessionTicket TLS](https://www.ietf.org/rfc/rfc5077.txt).

## Segurança de transporte para dispositivos sem fio LoRa WAN
<a name="tls-lorawan"></a>

LoRaOs dispositivos WAN seguem as práticas de segurança descritas em [LoRaWAN™ SECURITY: um white paper preparado para a LoRa Alliance™ pela Gemalto, Actility e](https://lora-alliance.org/sites/default/files/2019-05/lorawan_security_whitepaper.pdf) Semtech. 

Para obter mais informações sobre segurança de transporte com dispositivos LoRa WAN, consulte [Dados de LoRa WAN e segurança de transporte](https://docs.aws.amazon.com/iot-wireless/latest/developerguide/iot-lorawan-security.html).

# Criptografia de dados em AWS IoT
<a name="data-encryption"></a>

A proteção de dados se refere à proteção de dados em trânsito (à medida que viajam de e para lá AWS IoT Core) e em repouso (enquanto são armazenados em dispositivos ou por outros AWS serviços). Todos os dados enviados AWS IoT Core são enviados por uma conexão TLS usando MQTT, HTTPS e WebSocket protocolos, tornando-os seguros por padrão durante o trânsito. AWS IoT Core coleta dados dos dispositivos e os envia para outros AWS serviços para processamento adicional. Para obter mais informações sobre criptografia de dados em outros serviços da AWS , consulte a documentação de segurança desse serviço. Para acessar mais informações, consulte [Criptografia de dados em repouso](encryption-at-rest.md).

O FreeRTOS fornece uma biblioteca do PKCS\$111 que abstrai o armazenamento de chaves, acessando objetos criptográficos e gerenciando sessões. É sua responsabilidade usar essa biblioteca para criptografar dados em repouso em seus dispositivos. Para obter mais informações, consulte [Biblioteca do padrão de criptografia de chave pública do FreeRTOS Nº 11 (PKCS)](https://docs.aws.amazon.com/freertos/latest/userguide/security-pkcs.html).

# Criptografia de dados em repouso em AWS IoT Core
<a name="encryption-at-rest"></a>

Por padrão, todos os AWS IoT Core dados em repouso são criptografados usando chaves AWS próprias. AWS IoT Core também suporta chaves simétricas gerenciadas pelo cliente a partir de AWS Key Management Service (AWS KMS). Com as chaves gerenciadas pelo cliente, você pode criar, possuir e gerenciar as AWS KMS chaves em sua AWS conta. AWS IoT Core usará suas chaves KMS para criptografar seus dados em repouso. Você tem controle total sobre essas chaves do KMS, inclusive sobre a criação e a manutenção de suas políticas de chave. Você também pode configurar políticas do IAM para as funções que acessam AWS KMS para controlar as permissões dessas chaves.

## AWS chaves de propriedade
<a name="aws-owned-keys"></a>

AWS chaves próprias são uma coleção de chaves KMS que um AWS serviço possui e gerencia para uso em várias AWS contas. AWS os serviços podem usar chaves AWS próprias para proteger seus dados. Por padrão, AWS IoT Core criptografa dados em repouso usando chaves AWS próprias. Essas chaves são gerenciadas pelo serviço. Você não pode visualizar, gerenciar ou usar chaves AWS próprias. No entanto, não é necessário realizar nenhuma ação para proteger essas chaves.

Para obter mais informações sobre chaves AWS próprias, consulte [chaves AWS próprias](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-key) no *Guia do AWS Key Management Service desenvolvedor*.

## Chaves gerenciadas pelo cliente
<a name="customer-managed-keys"></a>

As chaves gerenciadas pelo cliente são chaves KMS em sua AWS conta que você cria, possui e gerencia. Você tem controle total sobre essas chaves do AWS KMS , inclusive sobre a criação e a manutenção de suas respectivas políticas. Você também pode configurar políticas do IAM para as funções que acessam AWS KMS para controlar as permissões dessas chaves. Você pode configurar AWS IoT Core para usar chaves KMS gerenciadas pelo cliente para criptografar seus dados.

Para obter mais informações sobre chaves gerenciadas pelo cliente, consulte [Chaves gerenciadas pelo cliente](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) no *Guia do desenvolvedor do AWS Key Management Service *.

Para ativar as chaves gerenciadas pelo cliente AWS IoT Core, siga estas etapas:

**Topics**
+ [Etapa 1: criar uma chave gerenciada pelo cliente](#encryption-at-rest-cmk-create)
+ [Etapa 2: criar uma função do IAM para conceder AWS IoT Core permissões para usar a chave KMS](#create-an-iam-role)
+ [Etapa 3: ativar as chaves gerenciadas pelo cliente no AWS IoT Core](#opt-in-customer-managed-keys)
+ [Etapa 4: Permissões adicionais necessárias para operações do plano de AWS IoT Core controle](#cmk-control-plane-permissions)
+ [Etapa 5: gerenciar as chaves](#understanding-key-health)
+ [Etapa 6: monitorar a integridade das chaves](#health-status-monitoring)

### Etapa 1: criar uma chave gerenciada pelo cliente
<a name="encryption-at-rest-cmk-create"></a>

Você pode criar uma chave simétrica gerenciada pelo cliente usando o AWS KMS console ou os comandos da AWS KMS CLI. A `keySpec` deve ser `SYMMETRIC_DEFAULT`, e o `keyUsage` deve ser `ENCRYPT_DECRYPT`.

**nota**  
AWS IoT Core só suporta AWS KMS `SYMMETRIC_DEFAULT` chaves com especificação e uso de `ENCRYPT_DECRYPT` chaves para chaves gerenciadas pelo cliente.

Veja a seguir um exemplo de AWS CLI comando para criar uma chave KMS que pode ser usada com chaves gerenciadas AWS IoT Core pelo cliente.

```
aws kms create-key --key-spec SYMMETRIC_DEFAULT --key-usage ENCRYPT_DECRYPT --region us-west-2
```

O conteúdo a seguir é um exemplo de saída do comando.

```
{
    "KeyMetadata": {
        "AWSAccountId": "111122223333",
        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "CreationDate": "2024-09-19T11:45:23.982000-07:00",
        "Enabled": true,
        "Description": "",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "Origin": "AWS_KMS",
        "KeyManager": "CUSTOMER",
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "KeySpec": "SYMMETRIC_DEFAULT",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ],
        "MultiRegion": false
    }
}
```

Para acessar mais informações, consulte [Criar uma CMK simétrica](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk) no *Guia do desenvolvedor do AWS Key Management Service *.

#### Política de chave
<a name="key-policy"></a>

Quando você cria uma chave gerenciada pelo cliente, pode especificar uma política de chave. As políticas de chaves controlam o acesso à chave gerenciada pelo cliente. Cada chave gerenciada pelo cliente deve ter exatamente uma política de chave, que contém declarações que determinam quem pode usar a chave e como pode usá-la. Para acessar mais informações, consulte [Políticas de chave](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) no *Guia do desenvolvedor do AWS Key Management Service *.

AWS IoT Core usa uma função do IAM em sua conta para acessar sua chave gerenciada pelo cliente. Se você estiver usando uma política de chave personalizada, verifique se o perfil do IAM criado nessa chave tem as seguintes permissões:
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

### Etapa 2: criar uma função do IAM para conceder AWS IoT Core permissões para usar a chave KMS
<a name="create-an-iam-role"></a>

 AWS IoT Core Para usar a chave KMS que você criou para criptografar seus dados em repouso, você também precisa criar uma função do IAM em sua conta, que AWS IoT Core pode assumir o acesso à chave KMS.

A função deve ter a seguinte política de confiança para AWS IoT Core permitir que você assuma a função.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "Service": "iot.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
            "StringEquals": {
                "aws:SourceAccount": "111122223333"
            },
            "ArnLike": {
                "aws:SourceArn": "arn:aws:iot:us-west-2:111122223333:*"
            }
        }
    }
}
```

Verifique se as políticas do IAM associadas ao perfil do IAM têm as seguintes permissões na chave do KMS:
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

Confira abaixo um exemplo de política do IAM com as permissões necessárias para as chaves gerenciadas pelo cliente.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowIoTToAccessKMSResource",
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey",
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncryptTo",
                "kms:ReEncryptFrom",
                "kms:GenerateDataKeyWithoutPlaintext"
            ],
            "Resource": [
                "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
            ],
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:aws-crypto-ec:vendor": "iot.amazonaws.com"
                }
            }
        }
    ]
}
```

Para acessar mais informações, consulte [Criar um perfil para delegar permissões a um usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) no *Guia do usuário do AWS Identity and Access Management *.

### Etapa 3: ativar as chaves gerenciadas pelo cliente no AWS IoT Core
<a name="opt-in-customer-managed-keys"></a>

Depois de concluir todas as etapas anteriores, execute o comando `update-encryption-configuration` da CLI para usar as chaves gerenciadas pelo cliente no AWS IoT Core. Quando você opta por usar as chaves gerenciadas pelo cliente, todos os AWS IoT Core recursos AWS da sua conta serão criptografados usando a AWS KMS chave especificada.

1. Para ativar o AWS IoT Core uso de chaves gerenciadas pelo cliente AWS CLI, execute o comando `update-encryption-configuration` CLI.

   ```
   aws iot update-encryption-configuration --encryption-type "CUSTOMER_MANAGED_KMS_KEY" \
   --kms-access-role-arn "arn:aws:iam::111122223333:role/myrole" \
   --kms-key-arn "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" --region us-west-2
   ```

1. Para verificar se as chaves gerenciadas pelo cliente estão AWS CLI sendo usadas, execute o comando `describe-encryption-configuration` CLI: AWS IoT Core 

   ```
   aws iot describe-encryption-configuration --region us-west-2
   ```

   Se você ativou as chaves gerenciadas pelo cliente AWS IoT Core, a saída pode ter a seguinte aparência:

   ```
   {
       "encryptionType": "CUSTOMER_MANAGED_KMS_KEY",
       "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
       "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
       "configurationDetails": {
           "configurationStatus": "HEALTHY"
       },
       "lastModifiedDate": "2024-09-26T22:01:02.365000-07:00"
   }
   ```

   O campo `lastModifiedDate` indica a data em que a configuração de criptografia foi atualizada pela última vez.

   Se não tiver habilitado as chaves gerenciadas pelo cliente, a saída poderá ser parecida com o seguinte:

   ```
   {
       "encryptionType": "AWS_OWNED_KMS_KEY",
       "lastModifiedDate": "2024-09-26T22:01:02.365000-07:00"
   }
   ```

### Etapa 4: Permissões adicionais necessárias para operações do plano de AWS IoT Core controle
<a name="cmk-control-plane-permissions"></a>

Depois de optar pelas chaves gerenciadas pelo cliente, todos os AWS IoT Core recursos pertencentes à sua AWS conta são criptografados com a chave KMS fornecida. Todas as operações do plano de controle agora exigem que o chamador tenha `kms:Decrypt` permissões na chave KMS, além das permissões necessárias para a operação específica no AWS IoT Core recurso. Se o chamador não tiver a permissão `kms:Decrypt` e fizer uma chamada de API que exija criptografia ou descriptografia de dados (por exemplo, `GetPolicy`), ele receberá uma `UnauthorizedException`.

Por exemplo, ao chamar `GetPolicy`, você precisa das permissões `iot:GetPolicy` e `kms:Decrypt` e da chave do KMS gerenciada pelo cliente para que a chamada de API seja bem-sucedida.

**nota**  
Ao atualizar os usuários ou funções do IAM para conceder AWS KMS permissões na chave usada para sua configuração de criptografia, certifique-se de que a política de chaves do KMS também conceda as permissões necessárias aos respectivos usuários ou funções do IAM.

#### AWS KMS permissões para `UpdateEncryptionConfiguration`
<a name="kms-permissions-update-encryption-configuration"></a>

A chamada de `UpdateEncryptionConfiguration` API precisa das seguintes AWS KMS permissões na chave KMS para poder aceitar as chaves gerenciadas pelo cliente ou modificar a configuração da chave:
+ `kms:DescribeKey`
+ `kms:Decrypt`
+ `kms:Encrypt`
+ `kms:GenerateDataKeyWithoutPlaintext`
+ `kms:ReEncryptTo`
+ `kms:ReEncryptFrom`

#### AWS KMS permissões para todos os outros planos de controle APIs
<a name="kms-permissions-control-plane-apis"></a>

A maioria dos planos de controle APIs exige `kms:Decrypt` permissões quando as chaves gerenciadas pelo cliente estão habilitadas. No entanto, alguns APIs não exigem essas permissões adicionais:

APIs que não exigem AWS KMS permissões  
A `List*` e `Delete*` APIs não caia nesse balde. Os clientes sempre podem invocar qualquer API `List*` ou `Delete*` do ambiente de gerenciamento, e essas chamadas de API seriam bem-sucedidas mesmo que o chamador não tivesse a permissão `kms:Decrypt`. Essas chamadas de API serão bem-sucedidas mesmo que sua chave gerenciada pelo cliente não esteja íntegra `List*` e não `Delete*` APIs faça nenhuma decodificação.  
+ **Lista\$1 APIs** — Todas as operações de listagem (por exemplo,`ListThings`,`ListPolicies`,`ListCertificates`)
+ **Excluir\$1 APIs** — Todas as operações de exclusão (por exemplo,,,) `DeleteThing` `DeletePolicy` `DeleteCertificate`

### Etapa 5: gerenciar as chaves
<a name="understanding-key-health"></a>

AWS IoT Core executa verificações periódicas na configuração da chave gerenciada pelo cliente para garantir que as operações de criptografia e descriptografia não sejam afetadas. Essas verificações de saúde são executadas uma vez a cada minuto e verificam a capacidade AWS IoT Core da empresa de acessar e usar a AWS KMS chave e a função do IAM associada para operações de criptografia e descriptografia.

HEALTHY  
AWS IoT Core pode acessar com êxito a AWS KMS chave por meio da função do IAM especificada e realizar encryption/decryption operações. Todos os componentes funcionam corretamente.

UNHEALTHY  
AWS IoT Core não consigo acessar ou usar a AWS KMS chave. Isso evita novas operações de criptografia e pode afetar a funcionalidade do serviço. O campo `errorCode` indica se o problema está na chave ou no perfil do IAM.

#### Ações do cliente que podem afetar a integridade da chave
<a name="customer-actions-affecting-health"></a>

Várias ações do cliente podem fazer com que o status de integridade da chave mude de `HEALTHY` para `UNHEALTHY`:

Ações relacionadas a chaves  
+ **Excluindo uma AWS KMS chave** — Quando você agenda a exclusão de uma chave, ela está em um `Pending deletion` status e não pode ser usada
+ **Desabilitar uma AWS KMS chave** — Quando você desativa uma chave KMS, ela não pode mais ser usada para operações de criptografar/descriptografar
+ **Agendar a exclusão de uma chave**: a chave se torna inutilizável quando a exclusão é concluída.
+ **Modificando a política de chaves** — Removendo as permissões necessárias para AWS IoT Core acesso
+ **Alterando as permissões de uso das chaves** — Restringindo as ações necessárias AWS KMS 

Ações relacionadas ao perfil do IAM  
+ **Excluindo a função do IAM** — não AWS IoT Core consigo assumir a função de acessar a chave
+ **Modificando as permissões da função** — Removendo AWS KMS as permissões necessárias da política da função
+ **Mudando a política de confiança** — impedindo que o AWS IoT Core serviço assuma a função
+ **Adicionar condições restritivas — Condições** que AWS IoT Core impedem o uso da função

Ações em nível de conta  
+ **Alterações de acesso das chaves entre contas**: modificar permissões para chaves em contas diferentes.
+ **Políticas de controle de serviços (SCPs) — políticas** em nível organizacional que restringem o acesso AWS KMS 
+ **Políticas do IAM em nível de conta**: políticas que substituem ou entram em conflito com o acesso da chave.

**Importante**  
Qualquer alteração nas AWS KMS chaves, funções do IAM ou políticas usadas pelo AWS IoT Core deve ser testada primeiro em ambientes de desenvolvimento. Monitore o status de integridade da chave de perto após fazer qualquer alteração para garantir que a AWS IoT Core funcionalidade não seja afetada.

#### Atualizar a configuração de criptografia
<a name="key-transition"></a>

Atualize sua configuração de criptografia AWS IoT Core para mudar de uma chave gerenciada pelo cliente para outra, ou entre chaves AWS próprias e chaves gerenciadas pelo cliente.

Para alterar a configuração para uma chave gerenciada pelo cliente:

1. Crie uma chave gerenciada pelo cliente seguindo as etapas em [Etapa 1: criar uma chave gerenciada pelo cliente](#encryption-at-rest-cmk-create).

1. Atualize sua política de perfil do IAM para incluir permissões para as chaves antigas e novas durante o período de atualização.

1. Atualize sua configuração de criptografia para usar a nova chave:

   ```
   aws iot update-encryption-configuration --encryption-type "CUSTOMER_MANAGED_KMS_KEY" \
   --kms-access-role-arn "arn:aws:iam::111122223333:role/myrole" \
   --kms-key-arn "arn:aws:kms:us-west-2:111122223333:key/new-key-id"
   ```

Para alterar a configuração das chaves gerenciadas pelo cliente para chaves AWS próprias:

```
aws iot update-encryption-configuration --encryption-type "AWS_OWNED_KMS_KEY"
```

**nota**  
Ao atualizar a configuração de criptografia para novas chaves gerenciadas pelo cliente, garanta que as chaves antigas e novas permaneçam acessíveis para que a operação seja bem-sucedida.

##### Cenários e impactos comuns de falhas
<a name="failure-scenarios"></a>

A seguinte tabela descreve cenários de falha comuns quando as chaves são excluídas ou desativadas:


| Cenário | Impacto imediato | Consequências no longo prazo | 
| --- | --- | --- | 
|  Chave desabilitada  |  Todas as novas encryption/decryption operações falham imediatamente  |  Interrupção do serviço até que a chave seja reabilitada ou substituída.  | 
|  Chave agendada para exclusão  |  O status da chave é alterado para exclusão pendente e todas as encryption/decryption operações falharão  |  Falha automática do serviço quando a exclusão é concluída.  | 
|  Chave excluída permanentemente.  |  Falha imediata e permanente de todas as operações.  |  Perda permanente de dados e incapacidade de recuperar dados criptografados.  | 
|  Política de chave modificada incorretamente.  |  AWS IoT Core perde as permissões de acesso à chave  |  Falhas no serviço até que a política seja corrigida.  | 
|  Perfil do IAM excluído.  |  AWS IoT Core não pode assumir a função de acessar a chave  |  Falha total no serviço de criptografia.  | 
|  O perfil do IAM foi modificado incorretamente.  |  AWS IoT Core não pode assumir a função ou usar a função para acessar a chave  |   Falhas no serviço até que o perfil do IAM seja corrigido.  | 

##### Prevenção e práticas recomendadas
<a name="prevention-best-practices"></a>

Para evitar a exclusão ou desativação acidental da chave e minimizar o risco de falhas no serviço:

Implementar políticas de ciclo de vida de chaves  
Estabeleça procedimentos claros para criação, alternância e retirada de chaves. Documente quais chaves são usadas por quais AWS IoT Core recursos e mantenha um inventário das chaves ativas.

Usar as políticas do IAM para restringir a exclusão de chaves  
Crie políticas do IAM que evitem que usuários não autorizados excluam ou desabilitem chaves críticas de criptografia. Use condições para exigir aprovação adicional para operações de exclusão de chaves.

Ativar CloudTrail registro  
Monitore todas as AWS KMS principais operações CloudTrail para detectar atividades de gerenciamento de chaves não autorizadas ou acidentais. Configure alertas para exclusão e desativação de chaves ou alterações na política.

Procedimentos de substituição de chaves de teste  
Teste regularmente seus procedimentos de substituição de chaves em ambientes que não sejam de produção a fim de garantir que você possa se recuperar rapidamente de falhas relacionadas a chaves.

Manter backups de chaves  
Embora você não possa exportar material de AWS KMS chaves, mantenha registros detalhados das chaves ARNs, das políticas e das AWS IoT Core configurações associadas para facilitar a substituição rápida das chaves, se necessário.

Monitorar a integridade das chaves  
Monitore continuamente a métrica `CMK.Health` e configure alertas automatizados para alterações no status de integridade das chaves. Implemente respostas automatizadas para resolver rapidamente problemas relacionados a chaves.

**Importante**  
Sempre teste os procedimentos de atualização de chaves em ambientes de desenvolvimento antes de implementá-los na produção. Tenha um plano de reversão documentado e garanta que os procedimentos de substituição de chaves possam ser executados rapidamente em caso de emergências.

### Etapa 6: monitorar a integridade das chaves
<a name="health-status-monitoring"></a>

Como parte das verificações AWS IoT Core periódicas, CloudWatch métricas e registros são emitidos para fornecer visibilidade sobre o status de integridade da configuração de sua chave gerenciada pelo cliente

AWS IoT Core emite a `CMK.Health` métrica pelo CloudWatch menos uma vez a cada minuto. A métrica fornece informações sobre o status de integridade das chaves gerenciadas pelo cliente usadas AWS IoT Core para criptografar e descriptografar seus dados.

A métrica `CMK.Health` pode ter os seguintes valores:
+ O valor é`1`: AWS IoT Core é capaz de usar as chaves de criptografia com sucesso para criptografar e descriptografar seus dados.
+ O valor AWS IoT Core é`0`: não consegue usar as chaves de criptografia para criptografar e descriptografar seus dados.

AWS IoT Core também emite registros AWS IoT V2 quando o status de integridade das chaves de criptografia muda. Esses logs fornecem detalhes adicionais sobre a atualização do status de integridade. Para visualizar esses registros, você deve habilitar os registros AWS IoT V2. Os logs de `HEALTHY` são emitidos em nível de `INFO`, e os logs de `UNHEALTHY` são emitidos em nível de `ERROR`. Para acessar mais informações sobre níveis de log, consulte [Níveis de log](https://docs.aws.amazon.com/iot/latest/developerguide/configure-logging.html#log-level).

Os exemplos a seguir são entradas de CloudWatch registro emitidas por AWS IoT Core para indicar a atualização do status de saúde das chaves gerenciadas pelo cliente.

Para monitorar e responder de forma eficaz a mudanças no status de integridade das chaves:

1. **Configure CloudWatch alarmes** para a `CMK.Health` métrica:

   ```
   aws cloudwatch put-metric-alarm --region us-west-2 \
     --alarm-name "IoTCore-CMK-Health-Alert" \
     --alarm-description "Alert when IoT Core CMK health is unhealthy" \
     --metric-name "CMK.Health" \
     --namespace "AWS/IoT" \
     --statistic "Minimum" \
     --period 300 \
     --evaluation-periods 1 \
     --threshold 1 \
     --comparison-operator "LessThanThreshold" \
     --alarm-actions "arn:aws:sns:us-west-2:111122223333:iot-alerts"
   ```

1. **Ative o registro AWS IoT V2** para capturar eventos detalhados de alteração do status de saúde com códigos e mensagens de erro.

1. **Confira o status da configuração** para solucionar problemas:

   ```
   aws iot describe-encryption-configuration --region us-west-2
   ```

1. **Investigue o status UNHEALTHY** examinando o campo `errorCode`:
   + `KMS_KEY_VALIDATION_ERROR`— Problema com a AWS KMS chave (desativado, excluído ou problemas de política)
   + `ROLE_VALIDATION_ERROR`: problema com o perfil do IAM (excluído, problemas de política ou problemas de confiança).

#### De UNHEALTHY para HEALTHY
<a name="unhealthy-to-healthy"></a>

Quando o status das chaves de criptografia for atualizado de `UNHEALTHY` para`HEALTHY`, AWS IoT Core emitirá uma mensagem de log AWS IoT V2 no seguinte formato.

```
{
    "timestamp": "2017-08-10 15:37:23.476",
    "logLevel": "INFO",
    "traceId": "8421693b-f4f0-4e4a-9235-0cff8bab897d",
    "accountId": "111122223333",
    "status": "SUCCESS",
    "cmkStatus": "HEALTHY",
    "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
    "eventType": "CmkHealthCheck"
}
```

#### De HEALTHY para UNHEALTHY
<a name="healthy-to-unhealthy"></a>

Quando o status das chaves de criptografia for atualizado de `HEALTHY` para`UNHEALTHY`, AWS IoT Core emitirá uma mensagem de log AWS IoT V2 no seguinte formato.

```
{
    "timestamp": "2017-08-10 15:37:23.476",
    "logLevel": "ERROR",
    "traceId": "8421693b-f4f0-4e4a-9235-0cff8bab897d",
    "accountId": "111122223333",
    "status": "FAILURE",
    "cmkStatus": "UNHEALTHY",
    "errorCode": "KMS_KEY_VALIDATION_ERROR / ROLE_VALIDATION_ERROR",
    "errorMessage": "Error message on why there was a failure",
    "kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "kmsAccessRoleArn": "arn:aws:iam::111122223333:role/myrole",
    "eventType": "CmkHealthCheck"
}
```

**Atenção**  
Quando a integridade é fundamental`UNHEALTHY`, AWS IoT Core as operações falham imediatamente. Se isso ocorrer, revise as configurações das chaves, as permissões do perfil do IAM e as políticas. Monitore a métrica `CMK.Health` em busca de mudanças de status. Se as operações continuarem falhando após revisar suas configurações, entre em contato com o gerente de conta ou com o [AWS Support Center](https://console.aws.amazon.com/support/home#/) para receber assistência adicional.

#### AWS CloudTrail eventos
<a name="aws-cloudtrail-events"></a>

Você também pode monitorar AWS IoT Core o uso da chave KMS para operações de criptografia e descriptografia. AWS IoT Core fará`DescribeKey`,, `Decrypt``ReEncrypt`, e `GenerateDataKeyWithoutPlaintext` operações em sua chave KMS para criptografar/descriptografar dados pertencentes à sua AWS conta armazenados em repouso.

Existem CloudTrail eventos para `DescribeKey``Decrypt`,`ReEncrypt`, `GenerateDataKeyWithoutPlaintext` e. Esses eventos monitoram AWS KMS as operações chamadas por AWS IoT Core para acessar dados criptografados pela chave gerenciada pelo cliente.

##### Exemplo de `Decrypt`
<a name="decrypt"></a>

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "*********************",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
                "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "*****"
            },
            "attributes": {
                "creationDate": "2024-09-16T20:23:39Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "iot.amazonaws.com"
    },
    "eventTime": "2024-09-16T20:32:48Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "iot.amazonaws.com",
    "userAgent": "iot.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "kms-arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "aws-crypto-ec:vendor": "iot.amazonaws.com",
            "branch-key-id": "111122223333",
            "type": "branch:ACTIVE"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "responseElements": null,
    "requestID": "1afb6d98-8388-455d-8b48-e62c9e0cf7f4",
    "eventID": "b59a5f16-0d98-46d8-a590-0e040a48b39b",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```