Usando o ABAC para o AWS KMS - AWS Key Management Service

Usando o ABAC para o AWS KMS

O controle de acesso baseado em atributos (ABAC) é uma estratégia de autorização que define permissões com base em atributos. O AWS KMS oferece suporta ao ABAC, permitindo que você controle o acesso às suas chaves gerenciadas pelo cliente com base nas etiquetas e nos aliases associados às chaves do KMS. As chaves de condição de etiqueta e alias que habilitam o ABAC no AWS KMS fornecem uma maneira eficiente e flexível de autorizar as entidades principais a usar chaves do KMS sem editar políticas ou gerenciar concessões. Porém, você deve usar esse recurso com cuidado, para que as entidades principais não sejam tenham o acesso inadvertidamente permitido ou negado.

Se você usar ABAC, esteja ciente de que a permissão para gerenciar etiquetas e aliases agora é uma permissão de controle de acesso. Certifique-se de conhecer as etiquetas e os aliases existentes em todas as chaves do KMS antes de implantar uma política que depende de etiquetas ou aliases. Tome precauções razoáveis ao adicionar, excluir e atualizar aliases e ao marcar e desmarcar chaves. Conceda permissões para gerenciar etiquetas e aliases apenas às entidades principais que precisam deles e limite as etiquetas e os aliases que eles podem gerenciar.

Notes

Ao usar o ABAC para o AWS KMS, tenha cuidado ao conceder permissão a entidades principais para gerenciar etiquetas e aliases. A alteração de uma etiqueta ou de um alias pode permitir ou negar permissão para uma chave do KMS. 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 ou aliases.

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.

Para controlar o acesso a uma chave do KMS com base em seu alias, você deve usar uma chave de condição. Você não pode usar um alias para representar uma chave do KMS no elemento Resourcede uma instrução de política. Quando um alias é exibido no elemento Resource, a instrução de política aplica-se a esse alias, e não à chave do KMS associada.

Saiba mais

Chaves de condição de ABAC para o AWS KMS

Para autorizar o acesso a chaves do KMS com base em suas etiquetas e aliases, use as seguintes chaves de condição em uma política de chaves ou política do IAM.

Chave de condição para ABAC Descrição Tipo de política AWS KMS operações
aws:ResourceTag A etiqueta (chave e valor) na chave do KMS corresponde à etiqueta (chave e valor) ou ao padrão de etiqueta na política Somente política do IAM Operações de recursos de chaves do KMS 2
aws:RequestTag/tag-key A etiqueta (chave e valor) na solicitação corresponde à etiqueta (chave e valor) ou ao padrão de etiqueta na política Políticas de chaves e políticas do IAM1 TagResource, UntagResource
aws:TagKeys Chaves de etiqueta na solicitação correspondem a chaves de etiqueta na política Políticas de chaves e políticas do IAM1 TagResource, UntagResource
kms:ResourceAliases Aliases associados à chave do KMS correspondem a aliases ou padrões de alias na política Somente política do IAM Operações de recursos de chaves do KMS 2
kms:RequestAlias O alias que representa a chave do KMS na solicitação corresponde ao alias ou aos padrões de alias na política. Políticas de chaves e políticas do IAM1 Operações criptográficas,DescribeKey,GetPublicKey

1Qualquer chave de condição que possa ser usada em uma política de chaves também pode ser usada em uma política do IAM, mas somente sea política de chaves a permitir.

2A operação de recurso de chave do KMS é uma operação autorizada para uma chave do KMS específica. Para identificar as operações de recursos de chaves do KMS, no tabela de permissões do AWS KMS, procure um valor de chave do KMS na coluna Resourcespara a operação.

Por exemplo, é possível usar essas chaves de condição para criar as seguintes políticas.

  • Uma política do IAM com aws:ResourceAliases que concede permissão para usar chaves do KMS com um alias específico ou um padrão de alias. Isso é um pouco diferente de políticas que dependem de etiquetas: Embora seja possível usar padrões de alias em uma política, cada alias deve ser exclusivo em uma região e Conta da AWS . Isso permite aplicar uma política a um conjunto selecionado de chaves do KMS sem listar os ARNs dessas chaves na instrução de política. Para adicionar ou remover chaves do KMS do conjunto, altere o alias da chave do KMS.

  • Uma política de chaves com aws:RequestAlias que permite que as entidades principais usem uma chave do KMS em uma operação Encrypt, mas somente quando a solicitação Encrypt usa esse alias para identificar a chave do KMS.

  • Uma política do IAM com aws:ResourceTag/tag-key que nega permissão para usar chaves do KMS com uma determinada chave de etiqueta e um valor de etiqueta. Isso permite aplicar uma política a um conjunto selecionado de chaves do KMS sem listar os ARNs dessas chaves na instrução de política. Para adicionar ou remover chaves do KMS do conjunto, marque ou desmarque a chave do KMS.

  • Uma política do IAM com aws:RequestTag/tag-key que permite que as entidades principais excluam somente etiquetas "Purpose"="Test" de chaves do KMS.

  • Uma política do IAM com aws:TagKeys que nega permissão para marcar ou desmarcar uma chave do KMS com uma chave de etiqueta Restricted.

O ABAC torna o gerenciamento de acesso flexível e escalável. Por exemplo, você pode usar a chave de condição aws:ResourceTag/tag-key para criar uma política do IAM que permite que as entidades principais usem uma chave do KMS para operações especificadas somente quando essa chave tem uma etiqueta Purpose=Test. A política aplica-se a todas as chaves do KMS em todas as regiões da Conta da AWS .

Quando anexada a um usuário ou função, a seguinte política do IAM permite que as entidades principais usem todas as chaves do KMS existentes com uma etiqueta Purpose=Test para as operações especificadas. Para fornecer esse acesso a chaves do KMS novas ou existentes, não é necessário alterar a política. Basta anexar a etiqueta Purpose=Testàs chaves do KMS. Da mesma forma, para remover esse acesso das chaves do KMS com uma etiqueta Purpose=Test, edite ou exclua essa etiqueta.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringEquals": { "aws:ResourceTag/Purpose": "Test" } } } ] }

No entanto, se você usar esse recurso, tenha cautela ao gerenciar etiquetas e aliases. Operações de adicionar, alterar ou excluir uma marca ou alias podem inadvertidamente permitir ou negar acesso a uma chave do KMS. 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 e aliases. Para atenuar esse risco, considerelimitar permissões para gerenciar etiquetas ealiases. Por exemplo, é possível permitir que apenas as entidades principais selecionadas gerenciem etiquetas do Purpose=Test. Para obter mais detalhes, consulte Usar aliases para controlar o acesso a chaves do KMS e Usar etiquetas para controlar o acesso a chaves do KMS.

Etiquetas ou aliases?

O AWS KMS oferece suporte ao ABAC com etiquetas e aliases. Ambas as opções proporcionam uma estratégia de controle de acesso flexível e escalável, mas são ligeiramente diferentes uma da outra.

Você pode optar por usar etiquetas ou aliases com base em seus padrões de uso específicos da AWS. Por exemplo, se você já concedeu permissões de marcação para a maioria dos administradores, talvez seja mais fácil controlar uma estratégia de autorização baseada em aliases. Ou, se você estiver se aproximando da cota de aliases por chave do KMS, talvez prefira uma estratégia de autorização baseada em etiquetas.

Os benefícios a seguir são de interesse geral.

Benefícios do controle de acesso baseado em etiquetas

  • O mesmo mecanismo de autorização para diferentes tipos de recursos da AWS.

    É possível usar a mesma etiqueta ou chave de etiqueta para controlar o acesso a vários tipos de recursos, como cluster do Amazon Relational Database Service (Amazon RDS), volume do Amazon Elastic Block Store (Amazon EBS) e chave do KMS. Esse recurso permite diversos modelos de autorização diferentes que são mais flexíveis que o controle de acesso baseado em função tradicional.

  • Autorize o acesso a um grupo de chaves do KMS.

    É possível usar etiquetas para gerenciar o acesso a um grupo de chaves do KMS na mesma região e Conta da AWS . Atribua a mesma etiqueta ou chave de etiqueta às chaves do KMS qye você escolher. Em seguida, crie uma instrução de política simples e fácil de manter com base nessa etiqueta ou chave de etiqueta. Para adicionar ou remover uma chave do KMS do seu grupo de autorização, adicione ou remova a etiqueta: não é necessário editar a política.

Benefícios do controle de acesso baseado em alias

  • Autorize o acesso a operações de criptografia com base em aliases.

    A maioria das condições de política com base em solicitações para atributos, incluindoaws:RequestTag/tag-key, afeta apenas as operações que adicionam, editam ou excluem o atributo. Porém, a chave de condição kms:RequestAlias controla o acesso a operações de criptografia com base no alias usado para identificar a chave do KMS na solicitação. Por exemplo, você pode conceder uma permissão à entidade principal para usar uma chave do KMS em uma operação Encrypt, mas somente quando o valor do parâmetro KeyIdéalias/restricted-key-1. Para atender a essa condição, é necessário o seguinte:

    • A chave do KMS deve estar associada a esse alias.

    • A solicitação deve usar o alias para identificar a chave do KMS.

    • A entidade principal deve ter permissão para usar a chave do KMS sujeita à condição kms:RequestAlias.

    Isso é particularmente útil quando suas aplicações costumam usar nomes de alias ou ARNs de alias para fazer referência a chaves do KMS.

  • Forneça permissões muito limitadas.

    O alias deve ser exclusivo em uma região e Conta da AWS . Como resultado, o ato de conceder acesso para as entidades principais a uma chave do KMS baseada em um alias pode ser muito mais restritivo do que o conceder acesso para eles com base em uma etiqueta. Diferentemente de aliases, etiquetas podem ser atribuídas a várias chaves do KMS na mesma conta e região. Se você escolher, é possível usar um padrão de alias, comoalias/test*, a fim de conceder acesso para as entidades principais a um grupo de chaves do KMS na mesma conta e região. Porém, permitir ou negar o acesso a um alias específico possibilita um controle muito rigoroso sobre as chaves do KMS.

Solução de problemas com o ABAC para o AWS KMS

Controlar o acesso a chaves do KMS com base em etiquetas e aliases é uma estratégia conveniente e poderosa. No entanto, ela está propensa a alguns erros previsíveis que convém evitar.

Acesso alterado devido a mudanças de etiqueta

Se uma etiqueta for excluída ou seu valor for alterado, as entidades principais que tiverem acesso a uma chave do KMS com base apenas nessa etiqueta terão acesso negado à chave do KMS. Isso também pode acontecer quando uma etiqueta incluída em uma instrução de política de negação é adicionada a uma chave do KMS. Adicionar uma etiqueta relacionada a uma política a uma chave do KMS pode permitir acesso a entidades principais que não devem ter esse acesso a uma chave do KMS.

Por exemplo, suponha que uma entidade principal tenha acesso a uma chave do KMS com base na etiqueta Project=Alpha, como a permissão fornecida pelo seguinte exemplo de instrução de política do IAM.

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

Se a etiqueta for excluída dessa chave do KMS ou se o valor da etiqueta for alterado, a entidade principal não terá mais permissão para usar a chave do KMS nas operações especificadas. Isso pode se tornar evidente quando a entidade principal tenta ler ou gravar dados em um serviço da AWS que usa uma chave gerenciada pelo cliente. Para rastrear a alteração da etiqueta, revise seus logs do CloudTrail em busca de entradas TagResource ouUntagResource.

Para restaurar o acesso sem atualizar a política, altere as etiquetas na chave do KMS. Essa ação tem impacto mínimo diferente de um breve período em que está entrando em vigor no AWS KMS. Para evitar um erro como esse, conceda permissões de marcação e desmarcação apenas a entidades principais que precisem delas elimite as permissões de marcação a etiquetas que eles precisam gerenciar. Antes de alterar uma etiqueta, pesquise políticas para detectar o acesso que depende dessa etiqueta e obtenha chaves do KMS em todas as regiões que tenham a etiqueta. Você pode considerar a criação de um alarme do Amazon CloudWatch quando etiquetas específicas forem modificadas.

Alteração do acesso devido a mudanças de alias

Se um alias for excluído ou associado a uma chave do KMS diferente, as entidades principais que tiverem acesso a essa chave do KMS com base apenas nesse alias terão acesso negado a ela. Isso também pode acontecer quando um alias associado a uma chave do KMS é incluído em uma instrução de política de negação. Adicionar um alias relacionado a uma política a uma chave do KMS também pode permitir acesso a entidades principais que não devem ter esse acesso a uma chave do KMS.

Por exemplo, a seguinte instrução de política do IAM usa a chave de condição kms:ResourceAliases para permitir o acesso a chaves do KMS em diferentes regiões da conta com qualquer um dos aliases especificados.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AliasBasedIAMPolicy", "Effect": "Allow", "Action": [ "kms:List*", "kms:Describe*", "kms:Decrypt" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "ForAnyValue:StringEquals": { "kms:ResourceAliases": [ "alias/ProjectAlpha", "alias/ProjectAlpha_Test", "alias/ProjectAlpha_Dev" ] } } } ] }

Para rastrear a alteração de alias, reveja seus logs do CloudTrail em busca de entradas CreateAlias, UpdateAlias e DeleteAlias.

Para restaurar o acesso sem atualizar a política, modifique o alias associado à chave do KMS. Como cada alias pode ser associado a apenas uma chave do KMS em uma conta e região, o gerenciamento de aliases é um pouco mais difícil que o de etiquetas. Restaurar o acesso a algumas das entidades principais em uma chave do KMS pode negar acesso para as mesmas ou outras entidades principais a uma chave do KMS diferente.

Para evitar esse erro, conceda permissões de gerenciamento de alias somente às entidades principais que precisam dele e limite suas permissões de gerenciamento de alias para aliases que elas precisam gerenciar. Antes de atualizar ou excluir um alias, pesquise políticas para detectar o acesso que depende do alias e localize chaves do KMS em todas as regiões associadas a ele.

Acesso negado devido à cota de aliases

Usuários autorizados a usar uma chave do KMS por uma condição kms:ResourceAliases receberão uma exceção de AccessDenied se a chave do KMS exceder a cota padrão de aliases por chave do KMS para essa conta e região.

Para restaurar o acesso, exclua aliases associados à chave do KMS, para que esta esteja em conformidade com a cota. Outra opção é usar um mecanismo alternativo para conceder aos usuários acesso à chave do KMS.

Alteração de autorização atrasadas

Alterações feitas em etiquetas e aliases podem levar até cinco minutos para afetar a autorização de chaves do KMS. Como resultado, uma alteração de etiqueta ou alias pode ser refletida nas respostas das operações da API antes que estas afetem a autorização. Esse atraso provavelmente será maior que o breve atraso de consistência final que afeta a maioria das operações do AWS KMS.

Por exemplo, você pode ter uma política do IAM que permita que certas entidades principais utilizem qualquer chave do KMS com uma etiqueta "Purpose"="Test". Em seguida, você adiciona a etiqueta "Purpose"="Test" a uma chave do KMS. Embora a operação TagResource seja concluída e a resposta ListResourceTags confirme que a etiqueta está atribuída à chave do KMS, as entidades principais podem não ter acesso à chave do KMS por até cinco minutos.

Para evitar erros, crie esse atraso esperado no seu código.

Solicitações com falha devido a atualizações de alias

Quando você atualiza um alias, associa um alias existente a uma chave do KMS diferente.

Solicitações Decrypt e ReEncrypt que especificam o nome do alias ou o ARN do alias podem falhar porque o alias agora está associado a uma chave do KMS que não criptografou o texto cifrado. Essa situação geralmente retorna uma IncorrectKeyException ou NotFoundException. Ou, se a solicitação não tiver o parâmetro KeyId ou DestinationKeyId, a operação pode falhar com uma exceção AccessDenied porque o autor da chamada não tem mais acesso à chave do KMS que criptografou o texto cifrado.

É possível rastrear a alteração observando os logs do CloudTrail em busca de entradas de log CreateAlias, UpdateAlias e DeleteAlias. Também é possível usar o valor do campo LastUpdatedDate na resposta ListAliases para detectar uma alteração.

Por exemplo, o seguinte exemplo de ListAliases mostra que o alias ProjectAlpha_Test na condição kms:ResourceAliasesfoi atualizado. Como resultado, as entidades principais que têm acesso com base nesse alias perdem acesso à chave do KMS anteriormente associada. Em vez disso, elas têm acesso à chave do KMS recém-associada.

$ aws kms list-aliases --query 'Aliases[?starts_with(AliasName, `alias/ProjectAlpha`)]' { "Aliases": [ { "AliasName": "alias/ProjectAlpha_Test", "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ProjectAlpha_Test", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": 1566518783.394, "LastUpdatedDate": 1605308931.903 }, { "AliasName": "alias/ProjectAlpha_Restricted", "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ProjectAlpha_Restricted", "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1553410800.010, "LastUpdatedDate": 1553410800.010 } ] }

A solução para essa alteração não é simples. É possível atualizar o alias novamente para associá-lo à chave do KMS original. No entanto, antes de fazer isso, você precisa considerar o efeito dessa alteração na chave do KMS atualmente associada. Se as entidades principais usaram a última chave do KMS em operações de criptografia, talvez elas precisem de acesso contínuo a ela. Nesse caso, convém atualizar a política para garantir que as entidades principais tenham permissão para usar as duas chaves do KMS.

Para evitar um erro como esse, antes de atualizar um alias, pesquise políticas para detectar o acesso que depende do alias. Em seguida, obtenha chaves do KMS em todas as regiões associadas a esse alias. Conceda permissões de gerenciamento de alias somente às entidades principais que precisam dele e limite suas permissões de gerenciamento de alias para aliases que elas precisam gerenciar.