Uso de etiquetas para controlar el acceso a las claves KMS
Puede controlar el acceso a AWS KMS keys en función de las etiquetas de la clave KMS. Por ejemplo, puede escribir una política de IAM que permita a las entidades principales habilitar y desactivar solo las claves KMS que tienen una etiqueta concreta. O bien, puede utilizar una política de IAM para evitar que las principales entidades utilicen claves KMS en operaciones criptográficas, a menos que la clave KMS tenga una etiqueta concreta.
Esta característica forma parte de la compatibilidad de AWS KMS para el control de acceso basado en atributos (ABAC). Para obtener más información sobre cómo usar etiquetas para controlar el acceso a los recursos de AWS, consulte ¿Qué es ABAC para AWS? y Control del acceso a recursos de AWS con etiquetas de recursos en la Guía del usuario de IAM. Para obtener ayuda para resolver problemas de acceso relacionados con ABAC, consulte Solución de problemas de ABAC para AWS KMS.
nota
Puede que transcurran cinco minutos hasta que los cambios de etiqueta y alias afecten a la autorización de clave KMS. Los cambios recientes pueden ser visibles en las operaciones de API antes de que afecten a la autorización.
AWS KMS admite la clave de contexto de condición global aws:ResourceTag/tag-key, que le permite controlar el acceso a las claves KMS basándose en las etiquetas de la clave KMS. Dado que varias claves KMS pueden tener la misma etiqueta, esta función le permite aplicar el permiso a un conjunto seleccionado de claves KMS. También puede cambiar fácilmente las claves KMS del conjunto cambiando sus etiquetas.
En AWS KMS, la clave de condición de aws:ResourceTag/tag-key
solo se admite en las políticas de IAM. No se admite en las políticas de claves, que se aplican solo a una clave KMS, ni en las operaciones que no utilizan una clave KMS en particular, como las operaciones ListKeys o ListAliases.
Controlar el acceso con etiquetas proporciona una forma sencilla, escalable y flexible de administrar los permisos. Sin embargo, si no está diseñado y administrado correctamente, puede permitir o denegar el acceso a sus claves KMS inadvertidamente. Si utiliza etiquetas para controlar el acceso, tenga en cuenta las siguientes prácticas.
-
Utilice etiquetas para reforzar la práctica recomendada de acceso menos privilegiado. Proporcione a las entidades principales de IAM solo los permisos que necesitan y únicamente en las claves KMS que deben usar o administrar. Por ejemplo, utilice etiquetas para etiquetar las claves KMS utilizadas en un proyecto. A continuación, dé permiso al equipo del proyecto para usar solo claves KMS con la etiqueta de proyecto.
-
Tenga cuidado al dar a las principales entidades los permisos
kms:TagResource
ykms:UntagResource
que les permiten agregar, editar y eliminar etiquetas. Cuando utiliza etiquetas para controlar el acceso a las claves KMS, cambiar una etiqueta puede dar permiso a las principales entidades para usar claves KMS que de otro modo no tenían permiso para usar. También puede denegar el acceso a las claves KMS que otras entidades principales requieren para realizar sus trabajos. Los administradores de claves que no tienen permiso para cambiar políticas de claves o crear concesiones pueden controlar el acceso a claves KMS si tienen permiso para administrar etiquetas.Siempre que sea posible, utilice una condición de política, como
aws:RequestTag/tag-key
oaws:TagKeys
para limitar los permisos de etiquetado de una entidad a determinadas etiquetas o patrones de etiquetas en determinadas claves KMS. -
Revise las entidades principales de su Cuenta de AWS que actualmente tienen permisos para etiquetar y desetiquetar y ajustarlos, si es necesario. Por ejemplo, la consola Política de claves predeterminada para administradores de claves incluye el permiso
kms:TagResource
ykms:UntagResource
en esa clave KMS. Las políticas de IAM pueden habilitar permisos de etiqueta y desetiqueta en todas las claves KMS. Por ejemplo, la política AWSKeyManagementServicePowerUser permite a las principales entidades administradas etiquetar, desetiquetar y generar un lista de etiquetas en todas las claves KMS. -
Antes de establecer una política que dependa de una etiqueta, revise las etiquetas de las claves KMS de su Cuenta de AWS. Asegúrese de que su política solo se aplique a las etiquetas que desea incluir. Use Registros de CloudTrail y Alarmas de CloudWatch para alertarle de los cambios de etiqueta que puedan afectar el acceso a las claves KMS.
-
Las condiciones de política basadas en etiquetas utilizan la coincidencia de patrones; no están vinculadas a una instancia concreta de una etiqueta. Una política que utiliza claves de condición basadas en etiquetas afecta a todas las etiquetas nuevas y existentes que coincidan con el patrón. Si elimina y vuelve a crear una etiqueta que coincida con una condición de política, la condición se aplica a la nueva etiqueta, igual que a la anterior.
Por ejemplo, tomemos el siguiente ejemplo de política de IAM. Permite a las principales entidades llamar a las operaciones GenerateDataKeyWithoutPlaintext y Decrypt solo en claves KMS de su cuenta que sean la región de Asia Pacífico (Singapur) y tengan una etiqueta "Project"="Alpha"
. Puede adjuntar esta política a roles del ejemplo de proyecto Alpha.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMPolicyWithResourceTag", "Effect": "Allow", "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:Decrypt" ], "Resource": "arn:aws:kms:ap-southeast-1:111122223333:key/*", "Condition": { "StringEquals": { "aws:ResourceTag/Project": "Alpha" } } } ] }
La siguiente política de IAM de ejemplo permite a la entidad principal utilizar la clave KMS en la cuenta para operaciones criptográficas. Pero prohíbe a las principales entidades usar estas operaciones criptográficas en claves KMS con una etiqueta "Type"="Reserved"
o sin etiqueta "Type"
.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMAllowCryptographicOperations", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:GenerateDataKey*", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:*:111122223333:key/*" }, { "Sid": "IAMDenyOnTag", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:GenerateDataKey*", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringEquals": { "aws:ResourceTag/Type": "Reserved" } } }, { "Sid": "IAMDenyNoTag", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:GenerateDataKey*", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "Null": { "aws:ResourceTag/Type": "true" } } } ] }