AWS KMS - Grants
Tags: aws, cloud, devops, security
Published: 2023-05-19 14:28:42

**Anotações sobre o AWS KMS - Grants 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/grants.html)

---

##**Definição do fornecedor**
_`Grants `é um instrumento de Policy que permite que as entidades principais da AWS usem KMS Keys em operações de criptografia._

---
##**Anotações gerais**

- **Grant user** -> Gera o Grant // Key Administrator
- **Grantee** -> Usuário que usa o Grant gerado pelo Grant user
- **Condição: Bool - `kms:GrantsForAWSResource:true`**
- Acesso temporário
- **Igual a um Secret Token**
- Cada Grant permite o acesso a exatamente uma KMS Key. Você pode criar uma Grant para uma KMS Key em uma Conta da AWS diferente.
- Uma Grants pode permitir acesso a uma KMS Key, mas não pode negar acesso.
- Cada Grants deve ter pelo menos uma entidade principal receptora. A entidade principal receptora da Grants pode ser uma identidade em uma Conta da AWS diferente.
- Ele também pode permitir que eles visualizem uma KMS Key (_DescribeKey_) e criem e gerenciem Grant. 
- Ao autorizar o acesso a uma KMS Key, Grants são consideradas junto com as Key Policy e as IAM Policy.
- Grants geralmente são usadas para **permissões temporárias** porque você pode criar uma, usar suas permissões e excluí-la sem alterar suas Key Policy ou IAM Policy.
- Grants é uma alternativa à Key Policy. 
- Fornece controle de acesso programático

---
##**Permite ou nega permissão somente quando um serviço da AWS integrado ao AWS KMS**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/kms/latest/developerguide/policy-conditions.html#conditions-kms-grant-is-for-aws-resource)

- `"Condition": { "Bool": { "kms:GrantIsForAWSResource": true }}`
- **Permissões**
-- `CreateGrant`
-- `ListGrants`
-- `RevokeGrant `

**Exemplo**

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:user/ExampleUser"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:GrantIsForAWSResource": true
    }
  }
}
```

---

##**Exemplo**

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

---

##**Comandos KMS Grant**
**Generating the Grant**

```
aws kms create-grant /
--key-id [KEY-ID] /
--grantee-principal [GRANTE-PRINCIPLE-ARN] /
--operations "Encrypt"
```
---

**Using Grant to Perform Operation**

```
aws kms encrypt --plaintext "hello world" 
--key-id [KEY-ID] /
--grant-tokens [GRANT TOKEN RECEIVED] 
```
---

**Revoking the Grant**

```
aws kms revoke-grant --key-id [KEY-ID] --grant-id [GRANT-ID-HERE]
```

---


##**Referências**
- [Examining grants](https://docs.amazonaws.cn/en_us/kms/latest/developerguide/determining-access-grants.html)
- [AWS CLI - KMS](https://docs.aws.amazon.com/cli/latest/reference/kms/index.html#cli-aws-kms)
- [AWS KMS Key Policies vs Grants](https://ystoneman.medium.com/aws-kms-key-policies-vs-grants-41212f83f88c)