Por que usuários de várias contas estão recebendo erros de acesso negado quando tentam acessar objetos S3 criptografados por uma chave personalizada do AWS KMS?

5 minuto de leitura
0

Meu bucket do Amazon Simple Storage Service (Amazon S3) é criptografado com uma chave personalizada do AWS Key Management Service (AWS KMS). Quando usuários de outra conta da AWS tentam acessar os objetos no meu bucket, eles recebem um erro de acesso negado. Como corrigir isso?

Breve descrição

Para conceder acesso a um bucket criptografado pelo AWS KMS na Conta A a um usuário na Conta B, você deve ter as seguintes permissões em vigor:

  • A política de bucket na Conta A deve conceder acesso à Conta B.
  • A política de chave do AWS KMS na Conta A deve conceder acesso ao usuário na Conta B.
  • A política do AWS Identity and Access Management (IAM) na Conta B deve conceder ao usuário acesso ao bucket e à chave do AWS KMS na Conta A.

Para solucionar o erro de acesso negado, verifique se essas permissões estão configuradas corretamente.

Aviso: As políticas de chaves do AWS KMS gerenciadas pela AWS não podem ser modificadas porque são somente para leitura. No entanto, você sempre pode visualizar as políticas de chaves do KMS gerenciadas pela AWS e as políticas de chaves do KMS gerenciadas pelo cliente. Como as políticas de chaves do KMS gerenciadas pela AWS não podem ser atualizadas, as permissões entre contas também não podem ser concedidas para essas políticas principais. Além disso, objetos criptografados usando uma chave KMS gerenciada pela AWS não podem ser acessados por outras contas da AWS. Para políticas de chaves do KMS gerenciadas pelo cliente, você pode alterar a política de chave somente na conta da AWS que criou a política.

Se especificar sua própria chave do AWS KMS (chave KMS gerenciada pelo cliente), você deverá usar um ARN de chave do AWS KMS totalmente qualificado para a configuração de criptografia do bucket. Ao usar um alias de chave do AWS KMS, o AWS KMS resolverá a chave somente dentro da conta proprietária do bucket (Conta A).

Use isso:

"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"

Não use:

arn:aws:kms:us-west-2:111122223333:alias/<alias-name>

Resolução

A política de bucket na Conta A deve conceder acesso ao usuário na Conta B

Na Conta A, analise a política de bucket e confirme se há uma declaração que permite o acesso a partir do ID da Conta B.

Por exemplo, essa política de bucket permite que s3:GetObject acesse o ID 111122223333 da conta:

{
  "Id": "ExamplePolicy1",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": [
          "111122223333"
        ]
      }
    }
  ]
}

A política de chave do AWS KMS na Conta A deve conceder acesso ao usuário na Conta B

A política de chave do AWS KMS deve conceder ao usuário na Conta B permissões para a ação kms:Decrypt. Por exemplo, para conceder acesso à chave a somente um usuário ou função do IAM, a declaração de política de chave tem a seguinte aparência:

{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::111122223333:role/role_name"
    ]
  },
  "Action": [
    "kms:Decrypt"
  ],
  "Resource": "*"
}

Na Conta A, analise a política de chave usando a visualização de políticas do Console de Gerenciamento da AWS. Na política de chave, procure por “Sid”: “Permitir o uso da chave”. Em seguida, confirme se o usuário na Conta B está listado como entidade principal nessa declaração.

Se você não vir a declaração “Sid”: “Permitir o uso da chave”, alterne para visualizar a política de chave usando a visualização padrão do console. Em seguida, adicione o ID da conta B como uma conta externa com acesso à chave.

A política de usuário do IAM na Conta B deve conceder ao usuário acesso ao bucket e à chave do AWS KMS na Conta A

Na Conta B, execute as seguintes etapas:

1.    Abra o console do IAM.

2.    Abra o usuário ou função do IAM associado ao usuário na Conta B.

3.    Analise a lista de políticas de permissões aplicadas ao usuário ou função do IAM.

4.    Verifique se há políticas aplicadas que concedem acesso ao bucket e à chave do AWS KMS.

Observação: Se o usuário ou função do IAM na Conta B já tiver acesso de administrador, você não precisará conceder acesso à chave.

O exemplo de política a seguir concede ao usuário do IAM na Conta B acesso a objetos e à chave do AWS KMS (para descriptografar objetos em um bucket):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    },
    {
      "Sid": "ExampleStmt2",
      "Action": [
        "kms:Decrypt"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }
  ]
}

Observação:

  • A política de bucket na Conta A deve conceder acesso à Conta B.
  • A chave do AWS KMS na conta A deve residir na mesma Região do bucket na conta A.
  • A política de chave do AWS KMS na Conta A deve conceder acesso ao usuário na Conta B.
  • A política do IAM na Conta B deve conceder ao usuário acesso ao bucket e à chave do AWS KMS na Conta A.

Para mais informações sobre como adicionar ou corrigir as permissões do usuário do IAM, consulte Alteração de permissões para um usuário do IAM.


Informações relacionadas

AWS Policy Generator

AWS OFICIAL
AWS OFICIALAtualizada há um ano