AWS KMS - Key Material
Tags: aws, cloud, devops, security
Published: 2023-05-19 14:29:35

**Anotações sobre o AWS KMS - Key Material para ajudar na preparação das certificações AWS.**

Até o momento as anotações são para as certificações abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/se0sqtegn424nami6rz8.png)

- [Link oficial](https://docs.aws.amazon.com/pt_br/kms/latest/developerguide/importing-keys.html)


---

##**Definição do fornecedor**
_A Key Material é uma propriedade da Key do KMS que identifica a origem do Key Material na Key do KMS._

---

##**Anotações gerais**

- **External**
- **O download expira em até 24 horas**
- Você escolhe a origem do Key Material ao criar a Key do KMS 
- **Não é possível alterá-la, extrair e visualizar**
- **Não tem rotação automática**
- Select o wrapping algoritmo
- Download key
- Custom key store (CloudHSM)
- **O key material não pode ser excluído; você deve excluir a Key KMS.**
- **Encrypted key material and import token**
- **Pode setar a expiração da key - 7 a 30 dias**
- **Deleção manual da key material importada**
- Cria-se uma nova CMK e altere o alias para a nova utilizando cli - `aws kms update-alias`
- **KMS Key --> Key Meta-Data + Key Material**
- Por padrão o Key Material é AWS KMS
- **O CMK também contém o Key Material usado para criptografar e descriptografar dados.**
- Ao importar Key Material, você pode especificar uma data de expiração.
- Pode excluir sob-demanda

---
##**Permissões para importar Key Material**
**Para criar e gerenciar Keys do KMS com Key Material importado**

- kms:GetParametersForImport
- kms:ImportKeyMaterial
- kms:DeleteImportedKeyMaterial

**Para **criar Keys** do KMS com Key Material importado**

- kms:CreateKey

Para **limitar essa permissão** a Key do KMS com Key Material importado, use a condição de política `kms:KeyOrigin` com um valor de EXTERNAL.

```
{
  "Sid": "CreateKMSKeysWithoutKeyMaterial",
  "Effect": "Allow",
  "Resource": "*",
  "Action": "kms:CreateKey",
  "Condition": {
    "StringEquals": {
      "kms:KeyOrigin": "EXTERNAL"
    }
  }
}
```

- kms:GetParametersForImport

Para **limitar essa permissão** a solicitações que usem um algoritmo de quebra automática específico e uma especificação de chave de quebra, use as condições de política `kms:WrappingAlgorithm` e `kms:WrappingKeySpec`.

- kms:ImportKeyMaterial

Para **permitir ou proibir** Material que expire e controlar a data de validade, use as condições de política `kms:ExpirationModel` e `kms:ValidTo`.

Para **reimportar o Key Material importad**a, a entidade principal precisa das permissões `kms:GetParametersForImport` e `kms:ImportkeyMaterial`.

Para **excluir o Key Material importada**, a entidade principal precisa da permissão `kms:DeleteImportedKeyMaterial`.

Por exemplo, para permitir que o exemplo `KMSAdminRole `gerencie todos os aspectos de uma Key do KMS com Material importado, inclua uma declaração de política de Keys como a seguinte na política de Keys da chave do KMS.


```
{
  "Sid": "Manage KMS keys with imported key material",
  "Effect": "Allow",
  "Resource": "*",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/KMSAdminRole"
  },
  "Action": [
    "kms:GetParametersForImport",
    "kms:ImportKeyMaterial",
    "kms:DeleteImportedKeyMaterial"
  ]  
}
```
---
##**Comandos para importar Key Material**

```
openssl rand -out PlaintextKeyMaterial.bin 32
```


```
openssl pkeyutl -in PlaintextKeyMaterial.bin -out EncryptedKeyMaterial.bin -inkey PublicKey.bin -keyform DER -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
```

---
##**Key Material Origin**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/kms/latest/developerguide/concepts.html#key-origin)

**AWS_KMS**
O AWS KMS cria e gerencia o Key Material para a Key do KMS no AWS KMS. **Esse é o valor padrão e o recomendado para a maioria das Key do KMS**.


**EXTERNAL**
A Key do KMS tem Key Material importado. Quando uma Key do KMS é criada com uma origem de Key Material External, ela não tem Key Material. 
Mais tarde, você poderá importar Key Material para a Key  do KMS. Ao usar material de Key  importada, é necessário proteger e gerenciar esse Key Material fora do AWS KMS, incluindo a substituição do Key Material se ele expirar. 


**AWS_CLOUDHSM**
O AWS KMS criou o Key Material para a Key do KMS no cluster do AWS CloudHSM associado ao seu armazenamento personalizado de Key .


---
##**Importar Key Material**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/kms/latest/developerguide/importing-keys.html#importing-keys-considerations)

_Quando uma Key do KMS é criada com uma origem de Key Material External, ela não tem Key Material._

- Você pode importar Key Material **simétrica de 256 bits** de sua infraestrutura de gerenciamento de Key para o AWS KMS e usá-lo como qualquer outra Key do AWS KMS.
- **Agenda a exclusão de 7 a 30 dias, exclua manualmente o key material importado**

**Como importar novamente o mesmo Key Material**
1. Utilize uma chave do KMS existente em vez de criar uma nova. 
2. Se a chave do KMS importou o Key Material importado, você deve excluir o Key Material importado existente antes de importá-lo novamente.
3. Ao reimportar o Key Material, você pode alterar o modelo de expiração e data de expiração.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6i1d8h8ay6jk3d4x79ln.png)

**Referências**
- [Como importar o material de chave](https://docs.aws.amazon.com/pt_br/kms/latest/developerguide/importing-keys.html#importing-keys-overview)
- [Como importar novamente o material de chave](https://docs.aws.amazon.com/pt_br/kms/latest/developerguide/importing-keys.html)
- [ImportKeyMaterial](https://docs.aws.amazon.com/pt_br/kms/latest/APIReference/API_ImportKeyMaterial.html)

---
##**Quando uma Master Key (CMK) c/ Key Material está com problemas na importação**
[Documentação oficial](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)

- Key Material não é uma Key simétrica de 256bit
- Demorou mais de 24 horas e o token expirou

---
##**Quando uma Master Key (CMK) c/ Key Material importado está prestes a expirar**
[Documentação oficial](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)

- **Criptografe com o mesmo Key Material e reimporte o Key Material para a mesma CMK**
- A Rotation Key altera apenas o Key Material , que é o segredo criptográfico usado nas operações de criptografia. A Key KMS é o mesmo recurso lógico, independentemente de quantas vezes seu Key Material seja alterado. As propriedades da Key KMS não mudam


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sb301xqv8ysyaq0eq6nr.png)

---
##**Importar Key Material em Keys do AWS KMS**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/kms/latest/developerguide/importing-keys.html)


1. Criar uma chave do KMS de criptografia simétrica sem Key Material: a especificação de chave deve ser SYMMETRIC_DEFAULT e a origem deve ser EXTERNAL. Uma origem de chave de EXTERNAL indica que a chave foi projetada para Key Material importado e evita que o AWS KMS gere Key Material para a chave do KMS. Em uma etapa posterior, você importará seu próprio Key Material para essa chave do KMS.

2. Baixar a chave pública e o token de importação – depois de concluir a etapa 1, baixe uma chave publica e um token de importação. Esses itens protegem a importação de seu Key Material para o AWS KMS.

3. Criptografar o Key Material – use a chave pública baixada na etapa 2 para criptografar o Key Materials  que você criou no seu próprio sistema.

4. Importar o Key Material – carregue o Key Material criptografado que você criou na etapa 3 e o token de importação que você baixou na etapa 2.

5. Quando a operação de importação é concluída com êxito, o estado da chave KMS muda de PendingImport para Enabled. Agora, você pode usar suas Keys do KMS em operações de criptografia.