Usar etiquetas para controlar o acesso a chaves do KMS - AWS Key Management Service

Usar etiquetas para controlar o acesso a chaves do KMS

É possível controlar o acesso aoAWS KMS keyscom base nas etiquetas na chave do KMS. Por exemplo, você pode escrever uma política do IAM que permite que as entidades principais habilitem e desabilitem somente as chaves do KMS que possuem uma etiqueta específica. Ou você pode usar uma política do IAM para impedir que as entidades principais usem chaves do KMS em operações de criptografia, a menos que a chave do KMS tenha uma etiqueta específica.

Esse recurso faz parte do suporte do AWS KMS para controle de acesso baseado em atributos( ABAC). Para informações sobre como usar etiquetas para controlar o acesso a recursos da AWS, consulte O que é o ABAC para a AWS? eControlar o acesso a recursos do AWS usando etiquetas de recursos, no Manual do usuário do IAM. Para obter ajuda para resolver problemas de acesso relacionados ao ABAC, consulte Solução de problemas com o ABAC para o AWS KMS.

nota

Pode levar até cinco minutos para que alterações de etiqueta e alias afetem a autorização de chaves do KMS. Alterações recentes podem estar visíveis em operações de API antes de afetarem a autorização.

O AWS KMS oferece suporte ao uso da chave de contexto de condição global aws:ResourceTag/tag-key, que permite controlar o acesso às chaves do KMS com base nas etiquetas na chave do KMS. Como várias chaves do KMS podem ter a mesma etiqueta, esse recurso permite que você aplique a permissão a um conjunto selecionado de chaves do KMS. Também é possível alterar facilmente as chaves do KMS no conjunto alterando suas etiquetas.

No AWS KMS, a chave de condição aws:ResourceTag/tag-key tem suporte apenas em políticas do IAM. Ela foi projetada para ajudar você a controlar o acesso a várias chaves do KMS com as mesmas etiquetas. Ela não é compatível em políticas de chaves, que se aplicam somente a uma chave do KMS. Além disso, condições de recursos aplicam-se somente a operações que usam um recurso existente. Dessa forma, você não pode usar aws:ResourceTag/tag-key para controlar o acesso a operações como CreateKey,ListKeys ouListAliases.

Controlar o acesso com etiquetas é uma maneira simples, escalável e flexível de gerenciar permissões. No entanto, se isso não for projetado e gerenciado corretamente, poderá permitir ou negar acesso às chaves do KMS inadvertidamente. Se estiver usando etiquetas para controlar o acesso, considere as seguintes práticas.

  • Use etiquetas para reforçar a prática recomendada do acesso menos privilegiado. Conceda às entidades principais do IAM somente as permissões de que eles precisam nas chaves do KMS que elas devem usar ou gerenciar. Por exemplo, use etiquetas para rotular as chaves do KMS usadas para um projeto. Em seguida, dê permissão à equipe do projeto para usar somente chaves do KMS com a etiqueta do projeto.

  • Tenha cuidado ao conceder às entidades principais as permissões kms:TagResource e kms:UntagResource, com as quais elas podem adicionar, editar e excluir etiquetas. Quando você usa etiquetas para controlar o acesso a chaves do KMS, a alteração de uma etiqueta pode dar permissão às entidades principais para usar chaves do KMS que, de outra forma, elas não teriam permissão de usar. Ele também pode negar acesso a chaves do KMS que outras entidades principais exigem para realizar seus trabalhos. Os administradores de chaves que não tiverem permissão para alterar políticas de chaves ou criar concessões poderão controlar o acesso às chaves do KMS se tiverem permissão para gerenciar etiquetas.

    Sempre que possível, use uma condição de política, como aws:RequestTag/tag-key ou aws:TagKeys, paralimitar as permissões de marcação de uma entidade principal para etiquetas ou padrões de etiquetas específicos em chaves do KMS específicas.

  • Revise as entidades principais na sua Conta da AWS que atualmente têm permissões de marcação e desmarcação e ajuste-as, se necessário. Por exemplo, a política de chaves padrão para administradores de chaves do console inclui as permissões kms:TagResource e kms:UntagResource nessa chave do KMS. As políticas do IAM podem conceder permissões de marcação ou desmarcação em todas as chaves do KMS. Por exemplo, a política gerenciada AWSKeyManagementServicePowerUser permite que as entidades principais marquem, desmarquem e listem etiquetas em todas as chaves do KMS.

  • Antes de definir uma política que dependa de uma etiqueta, revise as etiquetas nas chaves do KMS da sua Conta da AWS . Certifique-se de que sua política se aplica somente às etiquetas que você pretende incluir. Use logs do CloudTrail e alarmes do CloudWatch para alertá-lo sobre alterações de etiquetas que possam afetar o acesso às suas chaves do KMS.

  • As condições de políticas baseadas em etiquetas usam correspondência de padrões. Elas não estão vinculadas a uma instância específica de uma etiqueta. Uma política que usa chaves de condição baseadas em etiquetas afeta todas as etiquetas novas e existentes que correspondem ao padrão. Se você excluir e recriar uma etiqueta que corresponde a uma condição de política, a condição se aplicará à nova etiqueta, assim como à antiga.

Por exemplo, considere a seguinte política do IAM. Ela permite que as entidades principais chamem as operações GenerateDataKeyWithoutPlaintext e Decrypt somente em chaves do KMS na sua conta que estão na região Ásia-Pacífico (Singapura) e têm uma etiqueta "Project"="Alpha". Você pode anexar essa política a funções no exemplo do projeto 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" } } } ] }

O exemplo de política do IAM a seguir permite que as entidades principais usem qualquer chave dp KMS na conta para determinadas operações de criptografia. Porém, ela proíbe as entidades principais de usar qualquer operações do AWS KMS em chaves do KMS com uma etiqueta "Type"="Reserved" ou sem 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:*", "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringEquals": { "aws:ResourceTag/Type": "Reserved" } } }, { "Sid": "IAMDenyNoTag", "Effect": "Deny", "Action": "kms:*", "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "Null": { "aws:ResourceTag/Type": "true" } } } ] }