Creación de concesiones - AWS Key Management Service

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

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.

Crear una concesión

Para crear una subvención, llama a la operación. CreateGrant Especifique una KMS clave, el director del concesionario y una lista de las operaciones de subvención permitidas. También puede designar una entidad principal que se retira. Para personalizar la concesión, utilice los parámetros opcionales Constraints para definir restricciones de concesión.

Al crear, retirar o revocar una subvención, es posible que haya un breve retraso, normalmente de menos de cinco minutos, antes de que el cambio esté disponible en su totalidad AWS KMS. Para obtener más información, consulte Consistencia eventual (para subvenciones).

Por ejemplo, el siguiente CreateGrant comando crea una concesión que permite a los usuarios autorizados a asumir el keyUserRole rol llamar a la operación de descifrado con la clave simétrica KMS 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 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 el código vuelve a intentar la CreateGrant operación o utiliza una AWS SDKque reintente las solicitudes automáticamente, utilice el parámetro opcional Name para evitar la creación de concesiones duplicadas. Si AWS KMS obtiene una CreateGrant solicitud de concesión con las mismas propiedades que una concesión existente, incluido el nombre, reconoce la solicitud como un reintento y no crea una nueva concesión. No puedes usar el Name valor para identificar la concesión en ningún AWS KMS operaciones.

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}

Para ver ejemplos de código que muestran cómo crear subvenciones en varios lenguajes de programación, consulteCreateGrantÚselo con un AWS SDKo CLI.

Uso de restricciones de concesiones

Las restricciones de concesión establecen condiciones sobre los permisos que la concesión otorga a entidad principal beneficiaria. Las restricciones de las subvenciones sustituyen a las condiciones clave en una política o IAMpolítica clave. 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 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 que tienen un parámetro de contexto de cifrado.

  • Las restricciones del contexto de cifrado solo son válidas en la concesión de una clave de cifrado KMS simétrica. Las operaciones criptográficas con otras KMS claves no admiten 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 de contextos 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 KMS clave de cifrado simétrica, utilice el Constraints parámetro en la CreateGrantoperació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. 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 KMS clave, utilice la ListGrantsoperació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 KMS claves en su Cuenta de AWS. Por ejemplo, Amazon DynamoDB utiliza una concesión como la siguiente para obtener permiso para usar el Clave administrada de AWSpara DynamoDB en 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 para una tabla concreta de su Cuenta de AWS.

Para obtener este resultado, ejecute la operación en ListGrants Clave administrada de AWS para DynamoDB en su cuenta.

$ 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

Una concesión puede incluir permiso para llamar a la operación CreateGrant. Pero cuando un principal beneficiario 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 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.

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

El cesionario principal puede usar este permiso para crear una subvención que incluya cualquier subconjunto de las operaciones especificadas en la concesión original, como y. exampleUser CreateGrant Decrypt La concesión secundaria no puede incluir otras operaciones, como ScheduleKeyDeletion o ReEncrypt.

Además, las restricciones de concesión 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.

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": { IAM best practices discourage the use of IAM users with long-term credentials. Whenever possible, use IAM roles, which provide temporary credentials. For details, see Security best practices in IAM in the IAM User Guide. "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.