

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Creación de concesiones
<a name="create-grant-overview"></a>

Antes de crear una concesión, obtenga información sobre las opciones para personalizar su concesión. Puede usar *restricciones de concesión* para limitar los permisos de la concesión. Además, obtenga más información sobre la concesión de permiso `CreateGrant`. Las principales entidades que obtienen permiso para crear concesiones a partir de una concesión están limitadas en las concesiones que pueden crear.

**Topics**
+ [Crear una concesión](#grant-create)
+ [Concesión del permiso CreateGrant](#grant-creategrant)

## Crear una concesión
<a name="grant-create"></a>

Para crear una subvención, llame a la [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)operación. Especifique una clave KMS, un [beneficiario principal](grants.md#terms-grantee-principal) y una lista de [operaciones de concesión](grants.md#terms-grant-operations) permitidas. También puede designar una [entidad principal que se retira](grants.md#terms-retiring-principal). Para personalizar la concesión, utilice los parámetros opcionales `Constraints` para definir [restricciones de concesión](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html).

Al crear, retirar o revocar una concesión, es posible que haya un breve retraso, normalmente menos de cinco minutos, antes de que el cambio esté disponible a través de AWS KMS. Para obtener más información, consulte [Eventual consistency (for grants)](grants.md#terms-eventual-consistency).

Por ejemplo, el siguiente comando `CreateGrant` crea una concesión que permite a los usuarios que están autorizados a asumir el rol `keyUserRole` para llamar a la operación [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) en la [clave KMS simétrica](symm-asymm-choose-key-spec.md#symmetric-cmks) especificada. La concesión utiliza el parámetro `RetiringPrincipal` para designar una entidad principal que puede retirar la concesión. También incluye una restricción de concesión que permite el permiso únicamente cuando el [contexto de cifrado](encrypt_context.md) de la solicitud incluye `"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}
```

Si su código vuelve a intentar la operación `CreateGrant`, o utiliza una [AWS SDK que reintenta automáticamente las solicitudes](https://docs.aws.amazon.com/general/latest/gr/api-retries.html), utilice el parámetro opcional [Name](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-Name) (Nombre) para evitar la creación de concesiones duplicadas. Si AWS KMS recibe una `CreateGrant` solicitud de concesión con las mismas propiedades que una subvención existente, incluido el nombre, reconoce la solicitud como un reintento y no crea una nueva concesión. No puede usar el valor `Name` para identificar la concesión en cualquier operación de AWS KMS .

**importante**  
No incluya información confidencial en el nombre de la concesión. Puede aparecer en texto plano en CloudTrail los registros y otros resultados.

```
$ 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}
```

En [Úselo `CreateGrant` con un AWS SDK o CLI](example_kms_CreateGrant_section.md), puede consultar ejemplos de código que muestran cómo crear concesiones en varios lenguajes de programación.

### Uso de restricciones de concesiones
<a name="grant-constraints"></a>

Las [restricciones de concesión](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html) establecen condiciones sobre los permisos que la concesión otorga a entidad principal beneficiaria. Las restricciones de concesión sustituyen a las [claves de condición](policy-conditions.md) en una [política de claves](key-policies.md) o una [política de IAM](iam-policies.md). Cada valor de restricción de concesión puede incluir hasta 8 pares de contexto de cifrado. El valor de contexto de cifrado en cada restricción de concesión no puede superar los 384 caracteres.

**importante**  
No incluya información confidencial en este campo. Este campo puede mostrarse en texto plano en CloudTrail los registros y otros resultados.

AWS KMS admite dos restricciones de concesión `EncryptionContextEquals` y `EncryptionContextSubset` ambas establecen los requisitos para el [contexto de cifrado](encrypt_context.md) en una solicitud de una operación criptográfica. 

Las restricciones de concesión de contexto de cifrado están diseñadas para ser utilizadas con [operaciones de concesión](grants.md#terms-grant-operations) que tienen un parámetro de contexto de cifrado. 
+ Las restricciones de contexto de cifrado solo son válidas en una concesión para una clave KMS de cifrado simétrica. Las operaciones criptográficas con otras claves KMS no son compatibles con un contexto de cifrado.
+ La restricción de contexto de cifrado se omite para las operaciones `DescribeKey` y `RetireGrant`. `DescribeKey` y `RetireGrant` no tienen un parámetro de contexto de cifrado, pero puede incluir estas operaciones en una concesión que tenga una restricción de contexto de cifrado.
+ Puede usar una restricción de contexto de cifrado en una concesión para la operación `CreateGrant`. La restricción de contexto de cifrado requiere que cualquier concesión creada con el permiso `CreateGrant` tenga una restricción de contexto de cifrado igualmente estricta o más estricta.

AWS KMS admite las siguientes restricciones de concesión del contexto de cifrado.

**EncryptionContextEquals**  
Use `EncryptionContextEquals` para especificar el contexto de cifrado exacto para las solicitudes permitidas.   
`EncryptionContextEquals` requiere que los pares de contexto de cifrado de la solicitud coincidan exactamente, incluido el uso de mayúsculas y minúsculas, con los pares de contexto de cifrado de la restricción de concesión. Los pares pueden aparecer en cualquier orden, pero las claves y los valores de cada par no pueden variar.   
Por ejemplo, si la limitación de la concesión `EncryptionContextEquals` requiere el par de restricción de concesión `"Department": "IT"`, la concesión permite solicitudes del tipo especificado cuando el contexto de cifrado de la solicitud es exactamente `"Department": "IT"`.

**EncryptionContextSubset**  
Use `EncryptionContextSubset` para requerir que las solicitudes incluyan pares de contexto de cifrado particulares.  
`EncryptionContextSubset` requiere que la solicitud incluya todos los pares de contexto de cifrado de la restricción de concesión (una coincidencia exacta, incluido el uso de mayúsculas y minúsculas), pero la solicitud también puede tener pares de contexto de cifrado adicionales. Los pares pueden aparecer en cualquier orden, pero las claves y los valores de cada par no pueden variar.   
Por ejemplo, si la limitación de la concesión `EncryptionContextSubset` requiere el par de contexto de concesión de `Department=IT`, la concesión permite solicitudes del tipo especificado cuando el contexto de cifrado de la solicitud es `"Department": "IT"`, o incluye `"Department": "IT"` junto con otros pares de contexto de cifrado, como `"Department": "IT","Purpose": "Test"`.

Para especificar una restricción de contexto de cifrado en la concesión de una clave KMS de cifrado simétrico, utilice el `Constraints` parámetro en la [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)operación. La concesión que crea este comando concede a los usuarios autorizados asumir el permiso del rol `keyUserRole` para llamar a la operación [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html). Sin embargo, ese permiso solo es efectivo cuando el contexto de cifrado de la solicitud `Decrypt` es un par de contexto de cifrado `"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}
```

La concesión resultante se parece a la siguiente. Tenga en cuenta que el permiso concedido al rol `keyUserRole` solo es efectivo cuando la solicitud `Decrypt` utiliza el mismo par de contexto de cifrado especificado en la restricción de concesiones. Para encontrar las concesiones de una clave KMS, utilice la [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)operación.

```
$ 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 satisfacer la limitación de concesión `EncryptionContextEquals`, el contexto de cifrado en la solicitud para la operación `Decrypt` debe ser un par `"Department": "IT"`. Una solicitud como la siguiente del principal beneficiario satisfaría la restricción de concesiones `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
```

Cuando la restricción de concesión es `EncryptionContextSubset`, los pares de contexto de cifrado de la solicitud deben incluir los pares de contexto de cifrado de la restricción de concesión, pero la solicitud también puede incluir otros pares de contexto de cifrado. La siguiente restricción de concesión requiere que uno de los pares de contexto de cifrado en la solicitud sea `"Deparment": "IT"`.

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

La siguiente solicitud del principal beneficiario sería capaz de satisfacer tanto las restricciones de concesión `EncryptionContextEqual` y `EncryptionContextSubset` en este ejemplo.

```
$ 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
```

Sin embargo, una solicitud como la siguiente del principal beneficiario podría satisfacer la limitación de concesión `EncryptionContextSubset`, pero se produciría un error en la restricción de concesiones `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 los servicios suelen utilizar restricciones de contexto de cifrado en las concesiones que les dan permiso para usar las claves de KMS en su Cuenta de AWS. Por ejemplo, Amazon DynamoDB utiliza una concesión como la siguiente para obtener permiso para utilizar la [Clave administrada de AWS](concepts.md#aws-managed-key) para DynamoDB de su cuenta. La restricción `EncryptionContextSubset` de esta concesión hace que los permisos de la concesión solo sean efectivos cuando el contexto de cifrado de la solicitud contiene pares `"tableName": "Services"` y `"subscriberID": "111122223333"`. Esta restricción de concesión significa que la concesión permite a DynamoDB utilizar la clave KMS especificada solo en una determinada tabla de su Cuenta de AWS.

Para obtener este resultado, ejecute la [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)operación en DynamoDB de su cuenta. Clave administrada de AWS 

```
$ 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"
        }
    ]
}
```

## Concesión del permiso CreateGrant
<a name="grant-creategrant"></a>

Una concesión puede incluir permiso para llamar a la operación `CreateGrant`. Pero cuando un [principal beneficiario](grants.md#terms-grantee-principal) obtiene permiso para llamar a `CreateGrant` desde una concesión, en lugar de una política, ese permiso es limitado. 
+ El principal beneficiario solo puede crear concesiones que permitan algunas o todas las operaciones de la concesión principal.
+ Las [restricciones de concesión](#grant-constraints) en las concesiones que crean deben ser al menos tan estrictas como las de la concesión principal.

Estas limitaciones no se aplican a las entidades principales que obtienen permito `CreateGrant` de una política, aunque sus permisos pueden estar limitados por [condiciones de política](grant-authorization.md).

Por ejemplo, supongamos que existe una concesión que permite a la entidad principal beneficiaria llamar a las operaciones `GenerateDataKey`, `Decrypt` y `CreateGrant`. Llamamos a una concesión que permita un permiso `CreateGrant` una *concesión principal*.

```
# 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"
                }
            },
        }
    ]
}
```

La entidad principal beneficiaria, exampleUser, puede utilizar este permiso para crear una concesión que incluya cualquier subconjunto de las operaciones especificadas en la concesión principal, como `CreateGrant` y `Decrypt`. La *concesión secundaria* no puede incluir otras operaciones, como `ScheduleKeyDeletion` o `ReEncrypt`.

Además, las [restricciones de concesión](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html) de las concesiones secundarias deben ser restrictivas o más restrictivas que las de la concesión principal. Por ejemplo, la concesión secundaria puede agregar pares a una restricción `EncryptionContextSubset` de la concesión principal, pero no puede eliminarlos. La concesión secundaria puede cambiar una restricción `EncryptionContextSubset` por una restricción `EncryptionContextEquals`, pero no al revés.

Las prácticas recomendadas de IAM desalientan el uso de usuarios de IAM con credenciales a largo plazo. Siempre que sea posible, utilice los roles de IAM, que proporcionan credenciales temporales. Para obtener más información, consulte la sección [Prácticas recomendadas de seguridad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la *Guía del usuario de IAM;*.

Por ejemplo, el principal beneficiario puede usar el permiso `CreateGrant` que obtuvo de la concesión principal para crear la siguiente concesión secundaria. Las operaciones del subsidio por hijos son un subconjunto de las operaciones del subsidio parental y las restricciones de la concesión son más restrictivas.

```
# 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"
                }
            },
        }
    ]
}
```

El principal beneficiario en la concesión secundaria, `anotherUser`, puede usar su permiso `CreateGrant` para crear concesiones. Sin embargo, las concesiones que `anotherUser` crea deben incluir las operaciones en su concesión principal o en un subconjunto, y las restricciones de concesión deben ser las mismas o más estrictas. 