

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

# Criar concessões
<a name="create-grant-overview"></a>

Antes de criar uma concessão, saiba mais sobre as opções para personalizar sua concessão. Você pode usar *restrições de concessão* para limitar as permissões na concessão. Além disso, saiba mais sobre como conceder a permissão `CreateGrant`. As entidades principais que obtêm permissão para criar concessões a partir de uma concessão são limitados em termos das concessões que elas podem criar.

**Topics**
+ [Criar uma concessão](#grant-create)
+ [Concedendo permissão CreateGrant](#grant-creategrant)

## Criar uma concessão
<a name="grant-create"></a>

Para criar uma concessão, chame a [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)operação. Especifique uma chave do KMS, uma [entidade principal receptora da concessão](grants.md#terms-grantee-principal) e uma lista de [operações de concessão](grants.md#terms-grant-operations). Você também pode designar uma [entidade principal de retirada](grants.md#terms-retiring-principal) opcional. Para personalizar a concessão, use parâmetros `Constraints` opcionais para definir as [restrições de concessão](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)

Quando você cria, retira ou revoga uma concessão, pode haver um breve atraso, geralmente menos de cinco minutos, antes que a alteração esteja disponível em todo o AWS KMS. Para obter informações, consulte [Eventual consistency (for grants)](grants.md#terms-eventual-consistency) (Consistência eventual (para concessões)).

Por exemplo, o comando `CreateGrant` a seguir cria uma concessão que permite que usuários que estão autorizados a assumir o perfil `keyUserRole` chamem a operação [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) na [chave do KMS simétrica](symm-asymm-choose-key-spec.md#symmetric-cmks) especificada. A concessão usa o parâmetro `RetiringPrincipal` para designar um principal que pode desativar a concessão. Ele também inclui uma restrição de concessão que concede a permissão somente quando o [contexto de criptografia](encrypt_context.md) na solicitação inclui `"Department": "IT"`.

```
$  aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

Se o seu código tentar novamente a operação `CreateGrant` ou usar um[SDK da AWS que repete solicitações automaticamente](https://docs.aws.amazon.com/general/latest/gr/api-retries.html), use o parâmetro [Name](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-Name) opcional para impedir a criação de concessões duplicadas. Se AWS KMS receber uma `CreateGrant` solicitação de concessão com as mesmas propriedades de uma concessão existente, incluindo o nome, ela reconhecerá a solicitação como uma nova tentativa e não criará uma nova concessão. Não é possível usar o valor `Name` para identificar a concessão em qualquer operação do AWS KMS .

**Importante**  
Não inclua informações confidenciais ou sigilosas no nome da concessão. Ele pode aparecer em texto simples em CloudTrail registros e outras saídas.

```
$ aws kms create-grant \
    --name IT-1234abcd-keyUserRole-decrypt \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

Para exemplos de código que demonstram como criar concessões em várias linguagens de programação, consulte [Use `CreateGrant` com um AWS SDK ou CLI](example_kms_CreateGrant_section.md).

### Usar restrições de concessão
<a name="grant-constraints"></a>

[Restrições de concessão](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html) definem condições para as permissões que a concessão fornece à entidade principal receptora da concessão. Restrições de concessão ocupam o lugar de [chaves de condição](policy-conditions.md) em uma [política de chaves](key-policies.md) ou [política do IAM](iam-policies.md). Cada valor de restrição de concessão pode incluir até oito pares de contexto de criptografia. O valor do contexto de criptografia em cada restrição de concessão não pode exceder 384 caracteres.

**Importante**  
Não inclua informações confidenciais ou sigilosas nesse campo. Esse campo pode ser exibido em texto simples em CloudTrail registros e outras saídas.

AWS KMS suporta duas restrições de concessão `EncryptionContextEquals` e `EncryptionContextSubset` ambas estabelecem requisitos para o [contexto de criptografia](encrypt_context.md) em uma solicitação de uma operação criptográfica. 

As restrições de concessão de contexto de criptografia foram projetadas para serem usadas com [operações de concessão](grants.md#terms-grant-operations) que têm um parâmetro de contexto de criptografia. 
+ As restrições de contexto de criptografia são válidas somente em uma concessão para uma chave do KMS de criptografia simétrica. Operações criptográficas com outras chaves do KMS não são compatíveis com um contexto de criptografia.
+ A restrição do contexto de criptografia é ignorada para operações `DescribeKey` e `RetireGrant`. `DescribeKey` e `RetireGrant` não têm um parâmetro de contexto de criptografia, mas você pode incluir essas operações em uma concessão que tenha uma restrição de contexto de criptografia.
+ É possível usar uma restrição de contexto de criptografia em uma concessão para a operação `CreateGrant`. A restrição de contexto de criptografia requer que todas as concessões criadas com a permissão `CreateGrant` tenham uma restrição de contexto de criptografia igualmente rigorosa ou ainda mais rigorosa.

AWS KMS suporta as seguintes restrições de concessão de contexto de criptografia.

**EncryptionContextEquals**  
Use `EncryptionContextEquals` para especificar o contexto de criptografia exato para solicitações permitidas.   
`EncryptionContextEquals` requer que os pares de contexto de criptografia na solicitação sejam uma correspondência exata, com distinção entre maiúsculas e minúsculas, para os pares de contexto de criptografia na restrição de concessão. Os pares podem aparecer em qualquer ordem, mas as chaves e os valores em cada par não podem variar.   
Por exemplo, se a restrição de concessão `EncryptionContextEquals` exigir o par de contexto de criptografia `"Department": "IT"`, a concessão permitirá solicitações do tipo especificado apenas quando o contexto de criptografia na solicitação for exatamente`"Department": "IT"`.

**EncryptionContextSubset**  
Use `EncryptionContextSubset` para exigir que as solicitações incluam pares de contexto de criptografia específicos.  
`EncryptionContextSubset` requer que a solicitação inclua todos os pares de contexto de criptografia na restrição de concessão (uma correspondência exata com distinção entre maiúsculas e minúsculas), mas a solicitação também pode conter pares de contexto de criptografia adicionais. Os pares podem aparecer em qualquer ordem, mas as chaves e os valores em cada par não podem variar.   
Por exemplo, se a restrição de concessão `EncryptionContextSubset` exigir o par de contexto de criptografia `Department=IT`, a concessão permitirá solicitações do tipo especificado quando o contexto de criptografia na solicitação for `"Department": "IT"` ou incluir `"Department": "IT"` juntamente com outros pares de contexto de criptografia, como `"Department": "IT","Purpose": "Test"`.

Para especificar uma restrição de contexto de criptografia em uma concessão para uma chave KMS de criptografia simétrica, use o `Constraints` parâmetro na operação. [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) A concessão que esse comando cria concede aos usuários que estão autorizados a assumir a permissão do perfil `keyUserRole` para chamar a operação [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html). Porém, essa permissão entrará em vigor somente quando o contexto de criptografia na solicitação `Decrypt` for um par de contexto de criptografia `"Department": "IT"`.

```
$ aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextEquals={Department=IT}
```

A concessão resultante é semelhante à seguinte. Observe que a permissão concedida ao perfil `keyUserRole` entrará em vigor somente quando a solicitação `Decrypt` usar o mesmo par de contexto de criptografia especificado na restrição de concessão. Para encontrar as concessões em uma chave KMS, use a [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)operação.

```
$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "Decrypt"
            ],
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
            "CreationDate": 1568565290.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole"
        }
    ]
}
```

Para atender à restrição de concessão `EncryptionContextEquals`, o contexto de criptografia na solicitação para a operação `Decrypt` deve ser um par `"Department": "IT"`. Uma solicitação como a seguinte da entidade principal receptora da concessão atenderia à restrição de concessão `EncryptionContextEquals`.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

Quando a restrição de concessão é `EncryptionContextSubset`, os pares de contexto de criptografia na solicitação devem incluir pares de contexto de criptografia na restrição de concessão, mas a solicitação também pode incluir outros pares de contexto de criptografia. A restrição de concessão a seguir exige que um dos pares de contexto de criptografia na solicitação seja `"Deparment": "IT"`.

```
"Constraints": {
   "EncryptionContextSubset": {
       "Department": "IT"
   }
}
```

A solicitação a seguir da entidade principal receptora da concessão atenderia a ambas as restrições de concessão `EncryptionContextEqual` e `EncryptionContextSubset` neste exemplo.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

No entanto, uma solicitação como o seguinte da entidade principal receptora da concessão atenderia a restrição de concessão `EncryptionContextSubset`, mas falharia na restrição de concessão `EncryptionContextEquals`.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT,Purpose=Test
```

AWS os serviços geralmente usam restrições de contexto de criptografia nas concessões que lhes dão permissão para usar chaves KMS em seu. Conta da AWS Por exemplo, o Amazon DynamoDB usa uma concessão, como a seguinte, para obter permissão de uso da [Chave gerenciada pela AWS](concepts.md#aws-managed-key) para o DynamoDB na sua conta. A restrição de concessão `EncryptionContextSubset` nessa concessão colocará em vigor as permissões na concessão somente quando o contexto de criptografia na solicitação incluir os pares `"subscriberID": "111122223333"` e `"tableName": "Services"`. Essa restrição de concessão significa que a concessão permite que o DynamoDB use a chave do KMS especificada apenas para uma tabela específica na sua Conta da AWS.

Para obter essa saída, execute a [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)operação no Chave gerenciada pela AWS for DynamoDB em sua conta.

```
$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321

{
    "Grants": [
        {
            "Operations": [
                "Decrypt",
                "Encrypt",
                "GenerateDataKey",
                "ReEncryptFrom",
                "ReEncryptTo",
                "RetireGrant",
                "DescribeKey"
            ],
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "Constraints": {
                "EncryptionContextSubset": {
                    "aws:dynamodb:tableName": "Services",
                    "aws:dynamodb:subscriberId": "111122223333"
                }
            },
            "CreationDate": 1518567315.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321",
            "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com",
            "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com",
            "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a",
            "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59"
        }
    ]
}
```

## Concedendo permissão CreateGrant
<a name="grant-creategrant"></a>

Uma concessão pode incluir permissão para chamar a operação `CreateGrant`. Porém, quando uma [entidade principal receptora da concessão](grants.md#terms-grantee-principal) obtém permissão para chamar `CreateGrant` de uma concessão, em vez de uma política, essa permissão é limitada. 
+ A entidade principal receptora da concessão só pode criar concessões que permitam algumas ou todas as operações na concessão pai.
+ As [restrições de concessão](#grant-constraints) nas concessões que elas criam devem ser pelo menos tão rigorosas quanto as contidos na concessão pai.

Essas limitações não se aplicam a entidades principais que obtêm a permissão `CreateGrant` de uma política, embora suas permissões possam ser limitadas por [condições de política](grant-authorization.md).

Por exemplo, considere uma concessão que permite que o principal favorecido chame as operações `GenerateDataKey`, `Decrypt` e `CreateGrant`. Chamamos uma concessão que aceita a permissão `CreateGrant` para uma *concessão pai*.

```
# The original grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "GenerateDataKey",
                "Decrypt",
                "CreateGrant
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

A entidade principal receptora da concessão, exampleUser, pode usar essa permissão para criar uma concessão que inclui qualquer subconjunto das operações especificadas na concessão original, como `CreateGrant` e `Decrypt`. A *concessão filho* não pode incluir outras operações, como `ScheduleKeyDeletion` ou `ReEncrypt`.

Além disso, as [restrições de concessão](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html) nas concessões filho devem ser igualmente ou mais restritivas que as da concessão pai. Por exemplo, a concessão filho pode adicionar pares a uma restrição `EncryptionContextSubset` na concessão pai, mas não pode removê-los. A concessão filho pode alterar uma restrição `EncryptionContextSubset` para uma restrição `EncryptionContextEquals`, mas não o contrário.

As práticas recomendadas do IAM não encorajam o uso de usuários do IAM com credenciais de longo prazo. Sempre que possível, use os perfis do IAM, por fornecerem credenciais temporárias. Para obter detalhes, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) no *Guia do usuário do IAM*.

Por exemplo, a entidade principal receptora da concessão pode usar a permissão `CreateGrant` que obteve da concessão pai para criar a seguinte concessão filho. As operações na concessão filho são um subconjunto das operações na concessão pai, e as restrições de concessão são mais restritivas.

```
# The child grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572249600.0,
            "GrantId": "fedcba9999c1e2e9876abcde6e9d6c9b6a1987650000abcee009abcdef40183f",
            "Operations": [
                "CreateGrant"
                "Decrypt"
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/anotherUser",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

A entidade principal receptora da concessão na concessão filho, `anotherUser`, pode usar a permissão `CreateGrant` para criar concessões. No entanto, as concessões criadas por `anotherUser` devem incluir as operações em sua concessão pai ou um subconjunto, e as restrições de concessão devem ser iguais ou mais rigorosas. 