Concesiones en AWS KMS
Una concesión es un instrumento de política que permite que las principales entidades de AWS usen claves KMS en operaciones criptográficas. También puede permitirles ver una clave KMS (DescribeKey
) y crear y administrar concesiones. Al autorizar el acceso a una clave KMS, se consideran concesiones junto con políticas de claves y políticas de IAM. Las concesiones se utilizan a menudo para permisos temporales, ya que puede crear uno, utilizar sus permisos y eliminarlo sin cambiar las políticas de claves o las políticas de IAM.
Las concesiones son comúnmente utilizadas por los servicios de AWS que se integran con AWS KMS para cifrar sus datos en reposo. El servicio crea una concesión en nombre de un usuario de la cuenta, utiliza sus permisos y retira la concesión tan pronto como finalice su tarea. Para obtener más detalles sobre cómo utilizan las concesiones los servicios de AWS, consulte el tema Cifrado en reposo en la Guía del usuario o en la Guía para desarrolladores del servicio.
Las concesiones son un mecanismo de control de acceso muy flexible y útil. Al crear una concesión para una clave de KMS, la concesión permite a las entidades principales beneficiarias llamar a las operaciones de concesión especificadas en la clave de KMS siempre que se cumplan todas las condiciones especificadas en la concesión.
-
Cada concesión permite el acceso a exactamente una clave KMS. Puede crear una concesión para una clave KMS en una Cuenta de AWS diferente.
-
Una concesión puede permitir el acceso a una clave KMS, pero no denegar el acceso.
-
Cada concesión tiene una entidad principal beneficiaria. La entidad principal beneficiaria puede representar una o más identidades en la misma Cuenta de AWS que la clave de KMS o en una cuenta diferente.
-
Una concesión solo puede permitir operaciones de concesión. Las operaciones de concesión deben estar respaldadas por la clave KMS de la concesión. Si especifica una operación no compatible, la solicitud CreateGrant falla con una excepción
ValidationError
. -
La entidad principal beneficiaria puede utilizar los permisos que la concesión le otorga sin especificar la concesión, tal como lo haría si los permisos procedieran de una política de clave o de una política de IAM. Sin embargo, dado que la API de AWS KMS sigue un modelo de coherencia final, al crear, retirar o revocar una concesión, es posible que haya un breve retraso antes de que el cambio esté disponible a través de AWS KMS. Para utilizar los permisos de una concesión inmediatamente, use un token de concesión.
-
Un beneficiario principal autorizado puede eliminar la concesión (retirarla o revocarla). Al eliminar una concesión se eliminan todos los permisos permitidos por la concesión. No es necesario averiguar qué políticas se deben agregar o quitar para deshacer la concesión.
-
AWS KMS limita el número de concesiones en cada clave KMS. Para obtener más información, consulte Concesiones por clave KMS: 50 000.
Tenga cuidado al crear concesiones y al dar permiso a otros para crear concesiones. El permiso para crear concesiones tiene implicaciones de seguridad, al igual que permitir kms:PutKeyPolicy para establecer políticas.
-
Los usuarios con permiso para crear concesiones para una clave KMS (
kms:CreateGrant
) puede usar una concesión para permitir a los usuarios y roles, incluyendo los servicios de AWS, para utilizar la clave KMS. Los principales beneficiarios pueden ser identidades en su propia Cuenta de AWS o identidades en una cuenta u organización diferente. -
Las concesiones solo pueden permitir un subconjunto de operaciones de AWS KMS. Puede utilizar concesiones para permitir a los principales beneficiarios ver la clave KMS, utilizarla en operaciones criptográficas y crear y retirar concesiones. Para obtener más información, consulte Operaciones de concesión. También puede utilizar restricciones de la concesión para limitar los permisos de una concesión para una clave de cifrado simétrica.
-
Las entidades principales pueden obtener permiso para crear concesiones a partir de una política de claves o de una política de IAM. Las entidades principales que reciben el permiso
kms:CreateGrant
de una política puede crear concesiones para cualquier operación de concesión en la clave KMS. Estas entidades principales no necesitan tener el permiso que conceden en la clave. Cuando se permite permisokms:CreateGrant
en una política, puede usar condiciones de política para limitar este permiso. -
Los principales beneficiarios también pueden obtener permiso para crear concesiones a partir de una concesión. Estas entidades principales solo pueden delegar los permisos que se les concedieron, incluso si tienen otros permisos de una política. Para obtener más información, consulte Conceder el permiso a CreateGrant.
Conceptos de concesión
Para utilizar las concesiones de manera efectiva, deberá comprender los términos y conceptos que AWS KMS utiliza.
- Restricción de concesiones
-
Condición que limita los permisos de la concesión. En la actualidad, AWS KMS admite restricciones de concesión basadas en el contexto de cifrado en la solicitud de una operación criptográfica. Para obtener más información, consulte Uso de restricciones de concesiones.
- ID de concesión
-
El identificador único de una concesión de una clave KMS. Puede usar un ID de concesión, junto con un identificador de clave, para identificar una concesión en una solicitud RetireGrant o RevokeGrant.
- Operaciones de concesión
-
Las operaciones AWS KMS que puede permitir en una concesión. Si especifica otras operaciones, la solicitud CreateGrant falla con una excepción
ValidationError
. Estas son también las operaciones que aceptan un token de concesión. Para obtener información detallada sobre estos permisos, consulte la Permisos de AWS KMS.Estas operaciones de concesión representan realmente permiso para usar la operación. Por lo tanto, para la operación
ReEncrypt
, puede especificarReEncryptFrom
,ReEncryptTo
o ambosReEncrypt*
.Las operaciones de concesión son:
-
Operaciones criptográficas
-
Otras operaciones
Las operaciones de concesión que usted permita deben ser compatibles con la clave KMS de la concesión. Si especifica una operación no compatible, la solicitud CreateGrant falla con una excepción
ValidationError
. Por ejemplo, las concesiones para claves KMS de cifrado simétricas no pueden permitir las operaciones Sign (Firmar), Verify (Verificar),GenerateMac
oVerifyMac
. Las concesiones para claves CMK asimétricas no pueden permitir operaciones que generen claves de datos o pares de claves de datos. -
- Token de concesión
-
La API de AWS KMS sigue un modelo de coherencia final. Al crear una concesión, es posible que haya un breve retraso antes de que el cambio esté disponible a través de AWS KMS. Por lo general, el cambio tarda menos de unos segundos en propagarse por todo el sistema, pero en algunos casos puede tardar varios minutos. Si intenta utilizar una concesión antes de que se propague por completo por el sistema, es posible que obtenga un error de acceso denegado. Un token de concesión le permite hacer referencia a la concesión y utilizar los permisos de concesión inmediatamente.
Un token de concesión es una cadena única, no secreta, de longitud variable, codificada en base64 que representa una concesión. Puede usar el token de concesión para identificar la concesión en cualquier operación de concesión. Sin embargo, debido a que el valor del token es un resumen hash, no revela ningún detalle sobre la concesión.
Un token de concesión está diseñado para utilizarse solo hasta que la concesión se haya propagado por completo a través de AWS KMS. Después de eso, el principal beneficiario puede utilizar el permiso de la concesión sin proporcionar un token de concesión ni cualquier otra prueba de la concesión. Puede usar un token de concesión en cualquier momento, pero una vez que la concesión tenga una consistencia final, AWS KMS utiliza la concesión para determinar los permisos, no el token de concesión.
Por ejemplo, el siguiente comando llama a la operación GenerateDataKey. Utiliza un token de concesión para representar la concesión que da a la persona que llama (el principal beneficiario) permiso para llamar a
GenerateDataKey
en la clave KMS especificada.$
aws kms generate-data-key \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --key-spec AES_256 \ --grant-token $token
También puede utilizar un token de concesión para identificar una concesión en operaciones que administran concesiones. Por ejemplo, la principal entidad que se va a dar de baja puede usar un token de concesión en una llamada a la operación RetireGrant.
$
aws kms retire-grant \ --grant-token $token
CreateGrant
es la única operación que devuelve un token de concesión. No puede obtener un token de concesión de ninguna otra operación de AWS KMS o desde el eventos de registro de CloudTrail para la operación CreateGrant. Las operaciones ListGrants y ListRetirableGrants devuelven el ID de concesión, pero no un token de concesión.Para obtener más información, consulte Uso de un token de concesión.
- Principal beneficiario
-
Las identidades que obtienen los permisos especificados en la concesión. Cada concesión tiene una entidad principal beneficiaria, pero la entidad principal beneficiaria puede representar varias identidades.
El principal del beneficiario puede ser cualquier entidad principal de AWS, incluida una Cuenta de AWS (raíz), un usuario de IAM, un rol de IAM, un rol o usuario federado o un usuario de rol asumido. El principal del beneficiario puede estar en la misma cuenta que la clave KMS o en una cuenta diferente. Sin embargo, el principal beneficiario no puede ser una entidad principal del servicio, un grupo de IAM o una organización de AWS.
nota
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 en la Guía del usuario de IAM;.
- Retiro (de una concesión)
-
Termina una concesión. Retire una concesión cuando termine de usar los permisos.
La revocación y el retiro de una concesión eliminan la concesión. Sin embargo, el retiro se realiza por medio de una entidad principal especificada en la concesión. La revocación suele realizarla un administrador de claves. Para obtener más información, consulte Retiro y revocación de concesiones.
- Entidad principal que se va a dar de baja
-
Una entidad principal que puede retirar una concesión. Puede especificar una entidad principal que se va a dar de baja en una concesión, pero no es necesario. Esta entidad principal que se va a dar de baja puede ser cualquier entidad principal de AWS, incluyendo Cuentas de AWS, usuarios de IAM, roles de IAM, usuarios federados y usuarios de rol asumido. La entidad principal que se va a dar de baja puede estar en la misma cuenta de que la clave KMS o en una cuenta diferente.
nota
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 en la Guía del usuario de IAM;.
Además de la principal entidad que se da de baja especificada en la concesión, la Cuenta de AWS también puede retirar la concesión en la que se creó. El principal beneficiario puede retirar la concesión, si la concesión admite la operación
RetireGrant
. Además, la Cuenta de AWS o una Cuenta de AWS que sea la principal entidad que se retira puede delegar el permiso para retirar una concesión a una entidad principal de IAM en la misma Cuenta de AWS. Para obtener más información, consulte Retiro y revocación de concesiones. - Revocación (de una concesión)
-
Termina una concesión. Puede revocar una concesión para denegar activamente los permisos que permite la concesión.
La revocación y el retiro de una concesión eliminan la concesión. Sin embargo, el retiro se realiza por medio de una entidad principal especificada en la concesión. La revocación suele realizarla un administrador de claves. Para obtener más información, consulte Retiro y revocación de concesiones.
- Consistencia final (para las concesiones)
-
La API de AWS KMS sigue un modelo de coherencia final
. Al crear, retirar o revocar una concesión, es posible que haya un breve retraso antes de que el cambio esté disponible a través de AWS KMS. Por lo general, el cambio tarda menos de unos segundos en propagarse por todo el sistema, pero en algunos casos puede tardar varios minutos. Puede darse cuenta de este breve retraso si recibe errores inesperados. Por ejemplo, si intenta administrar una nueva concesión o utiliza los permisos en una nueva concesión antes de que se conozca la concesión en toda la AWS KMS, puede que obtenga un error de acceso denegado. Si retira o revoca una concesión, es posible que el principal beneficiario pueda seguir utilizando sus permisos durante un breve período hasta que la concesión se elimine por completo. La estrategia típica es volver a intentar la solicitud, y algunas AWS SDK incluyen el respaldo automático y la lógica de reintento.
AWS KMS tiene características para mitigar este breve retraso.
-
Para utilizar los permisos de una nueva concesión inmediatamente, utilice un token de concesión. Puede usar un token de concesión para referirse a una concesión en cualquier operación de concesión. Para obtener instrucciones, consulte Uso de un token de concesión.
-
La operación CreateGrant tiene un parámetro
Name
que impide que las operaciones de reintento creen concesiones duplicadas.
nota
Los tokens de concesión reemplazan la validez de la concesión hasta que todos los puntos de conexión del servicio se hayan actualizado con el nuevo estado de concesión. En la mayoría de los casos, la consistencia final se logrará en cinco minutos.
Para obtener más información, consulte Coherencia final de AWS KMS.
-