Solucionar problemas de acesso à chave - AWS Key Management Service

Solucionar problemas de acesso à chave

Ao autorizar o acesso a uma chave do KMS, o AWS KMS avalia o seguinte:

  • A política de chaves associada à chave do KMS. A política de chaves é sempre definida na Conta da AWS e na região proprietária da chave do KMS.

  • Todas as políticas do IAM que são anexadas ao usuário ou à função do IAM que está fazendo a solicitação. As políticas do IAM do que controlam o uso de uma chave do KMS pela entidade principal sempre são definidas naConta da AWS da entidade principal.

  • Todas as concessões que se aplicam à chave do KMS.

  • Outros tipos de políticas que podem se aplicar à solicitação para usar a chave do KMS, como políticas de controle de serviço do AWS Organizations e políticas de endpoint da VPC. Essas políticas são opcionais e permitem todas as ações por padrão, mas é possível usá-las para restringir permissões concedidas de outra forma às entidades principais.

O AWS KMS avalia esses mecanismos de política juntos para determinar se o acesso à chave do KMS é permitido ou negado. Para fazer isso, o AWS KMS usa um processo parecido com o descrito no fluxograma a seguir. O fluxograma a seguir fornece uma representação visual do processo de avaliação de política.


      Fluxograma que descreve o processo de avaliação de política

Esse fluxograma está dividido em duas partes. As partes parecem ser sequenciais, mas geralmente são avaliadas ao mesmo tempo.

  • A autorização de uso determina se você tem permissão para usar uma chave do KMS com base em sua política de chaves, políticas do IAM, concessões e outras políticas aplicáveis.

  • A confiança de chave determina se você deve confiar em uma chave do KMS que tem autorização para usar. Em geral, você confia nos recursos na sua da Conta da AWS. Porém, você também pode se sentir seguro em relação ao uso de chaves do KMS em outra Conta da AWS se uma concessão ou política do IAM na sua conta permitir que você use a chave do KMS.

Use esse fluxograma para descobrir por que um autor da chamada recebeu ou não permissão para usar uma chave do KMS. Ou use-o para avaliar suas políticas e concessões. Por exemplo, o fluxograma mostra que um autor de chamada pode ter acesso negado por uma instrução DENY explícita ou pela ausência de uma instrução ALLOW explícita na política de chaves, política do IAM ou concessão.

O fluxograma consegue explicar alguns cenários comuns de permissão.

Exemplo 1: é negado ao usuário o acesso a uma chave do KMS em sua Conta da AWS

Alice é um usuário do IAM na Conta da AWS 111122223333. Ela teve o acesso negado a uma chave do KMS na mesma Conta da AWS. Por que Alice não pode usar a chave do KMS?

Nesse caso, Alice teve o acesso negado à chave do KMS porque não há uma política de chaves, política do IAM ou concessão que dê a ela as permissões necessárias. A política de chaves do KMS permite que a Conta da AWS use políticas do IAM para controlar o acesso à chave do KMS, mas nenhuma política do IAM concede à Alice permissão para usar a chave do KMS.


               Fluxograma que descreve o processo de avaliação de política

Considere as políticas relevantes para este exemplo.

  • A chave do KMS que Alice deseja usar tem a política de chaves padrão. Essa política permite que a Conta da AWS que possui a chave do KMS use as políticas do IAM para controlar o acesso à chave do KMS. Esta política de chaves atende à condiçãoA política de chaves PERMITE que a conta dos chamadores usem políticas do IAM para controlar o acesso à chave? no fluxograma.

    { "Version" : "2012-10-17", "Id" : "key-test-1", "Statement" : [ { "Sid" : "Delegate to IAM policies", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : "kms:*", "Resource" : "*" } ] }
  • No entanto, nenhuma política de chaves, política do IAM ou concessão permite que Alice use a chave do KMS. Portanto, é negada à Alice a permissão para usar a chave do KMS.

Exemplo 2: o usuário assume uma função com permissão para usar uma chave do KMS em outra Conta da AWS

Bob é um usuário na conta 1 (111122223333). Ele tem permissão para usar uma chave do KMS na conta 2 (444455556666) em operações de criptografia. Como isso é possível?

dica

Ao avaliar permissões entre contas, lembre-se de que a política de chaves é especificada na conta da chave do KMS. A política do IAM é especificada na conta do autor da chamada, mesmo quando ele está em uma conta diferente. Para obter detalhes sobre como fornecer acesso entre contas a chaves do KMS, consulte Permitir que usuários de outras contas usem uma chave do KMS.

  • A política de chaves da chave do KMS permite que a conta 2 use políticas do IAM para controlar o acesso à chave do KMS.

  • A política de chaves da chave do KMS na conta 2 permite que a conta 1 use a chave do KMS em operações de criptografia. No entanto, a conta 1 deve usar políticas do IAM para conceder às suas entidades principais acesso à chave do KMS.

  • Uma política do IAM na conta 1 permite que a função Engineering use a chave do KMS na conta 2 para operações de criptografia.

  • Bob, um usuário na conta 1, tem permissão para assumir a função Engineering.

  • Bob pode confiar nessa chave do KMS, pois, mesmo que ela não esteja na conta dele, uma política do IAM na conta dele concede uma permissão explícita para usar essa chave do KMS.


               Fluxograma que descreve o processo de avaliação de política

Considere as políticas que permitem que Bob, um usuário na conta 1, use a chave do KMS na conta 2.

  • A política de chaves da chave do KMS permite que a conta 2 (444455556666, a conta que possui a chave do KMS) use políticas do IAM para controlar o acesso à chave do KMS. Essa política de chaves também permite que a conta 1 (111122223333) use a chave do KMS em operações de criptografia (especificadas no elemento Action da instrução de política). No entanto, ninguém na conta 1 pode usar a chave do KMS na conta 2 até que conta 1 defina políticas do IAM que concedam às entidades principais acesso à chave do KMS.

    No fluxograma, essa política de chaves na conta 2 atende à condição A política de chaves PERMITE que a conta do autor da chamada use políticas do IAM para controlar o acesso à chave?.

    { "Id": "key-policy-acct-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to use IAM policies", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow account 1 to use this KMS key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncryptFrom", "kms:ReEncryptTo", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:DescribeKey" ], "Resource": "*" } ] }
  • Uma política do IAM na Conta da AWS (conta 1, 111122223333) do autor da chamada concede à entidade principal a permissão para realizar operações de criptografia usando a chave do KMS na conta 2 (444455556666). O elemento Action concede à entidade principal as mesmas permissões que a política de chaves na conta 2 concedeu à conta 1. Para dar essas permissões à função Engineering na conta 1, essa política em linha está incorporada na função Engineering.

    Políticas do IAM entre contas como essa são efetivas somente quando a política de chaves para a chave do KMS na conta 2 concede à conta 1 permissão para usar a chave do KMS. Além disso, a conta 1 só pode conceder aos seus principais permissão para executar as ações que a política de chaves atribuiu à conta.

    No fluxograma, isso atende à condição Uma política do IAM permite que o autor da chamada realize essa ação?.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncryptFrom", "kms:ReEncryptTo", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:DescribeKey" ], "Resource": [ "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab" ] } ] }
  • O último elemento exigido é a definição da função Engineering na conta 1. O AssumeRolePolicyDocument na função permite que Bob assuma a função Engineering.

    { "Role": { "Arn": "arn:aws:iam::111122223333:role/Engineering", "CreateDate": "2019-05-16T00:09:25Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": { "Principal": { "AWS": "arn:aws:iam::111122223333:user/bob" }, "Effect": "Allow", "Action": "sts:AssumeRole" } }, "Path": "/", "RoleName": "Engineering", "RoleId": "AROA4KJY2TU23Y7NK62MV" } }