Como posso resolver 400 erros com acesso negado ao texto cifrado do AWS KMS no AWS Glue?

6 minuto de leitura
0

Recebo um erro 400 ao executar um crawler do AWS Glue ou um trabalho de ETL do AWS Glue.

Breve descrição

Ao usar o AWS Glue, você pode receber esse erro ao tentar acessar recursos da AWS, como buckets do Amazon Simple Service Solution (Amazon S3):

"The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access." (O texto cifrado refere-se a uma chave mestra do cliente que não existe, não existe nessa região ou você não tem permissão para acessar.)

Você recebe esse erro ao acessar qualquer serviço da AWS criptografado com chaves do AWS Key Management Service (AWS KMS) usando trabalhos ou crawlers do AWS Glue. É mais provável que o erro ocorra por um dos seguintes motivos:

  • A entidade principal que está tentando acessar a chave criptografada não tem as permissões necessárias do AWS KMS
  • A chave do AWS KMS não existe ou não existe em uma região específica da AWS

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de que esteja usando a versão mais recente da AWS CLI.

Verifique se sua política de perfil do AWS Glue tem as permissões necessárias

Primeiro, verifique se a política de perfil do AWS Glue que você está usando tem as permissões necessárias para acessar a chave do AWS KMS do recurso.

Por exemplo, suponha que você tenha um perfil do AWS Glue chamado AWSGlue-MyGlueCustomRole. Esse perfil está acessando um bucket do S3 criptografado com a chave do AWS KMS arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07. A política de perfil do AWS Glue deve ter o seguinte contexto, além de suas outras permissões:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07"
        }
    ]
}

Verifique se sua política de chaves do AWS KMS permite o perfil do AWS Glue

A política de chaves do AWS KMS deve permitir o perfil do AWS Glue como parte de sua entidade permitida.

Usando o exemplo anterior, a política de chaves do AWS KMS arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 deve ter as seguintes permissões anexadas:

{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::XXXXXXXX9645:role/AWSGlue-MyGlueCustomRole "
        ]
    },
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*"
}

Certifique-se de que a chave do AWS KMS exista na mesma região do seu trabalho no AWS Glue

Para verificar em qual região sua chave do AWS KMS existe, siga estas etapas:

1.    Abra o console do AWS KMS.

2.    Escolha a região na qual você está encontrando o erro.

3.    No painel de navegação, escolha AWS managed keys (Chaves gerenciadas pela AWS) ou Customer managed keys (Chaves gerenciadas pelo cliente). Em seguida, pesquise a chave do AWS KMS que você está usando. Você também pode usar a AWS CLI para pesquisar a chave do AWS KMS. O comando a seguir retornará um erro NotFoundException se a chave não existir na região:

aws kms describe-key --key-id <Key-ID> --region <region-name>

Observação: certifique-se de substituir <Key-ID> e <region-name> neste exemplo pelo ID da chave e pelo nome da região que você estiver usando.

4.    Verifique as chamadas de API do AWS CloudTrail kms:Decrypt e kms:Encrypt para ver se você observa alguma falha. Ou você pode visualizar todos os logs de eventos usando kms.amazonaws.com como a fonte de eventos.

Exemplo de conta cruzada

Se o perfil do AWS Glue e a chave do AWS KMS estiverem em contas diferentes, use a chave gerenciada pelo cliente e não a chave gerenciada pela AWS. As chaves do AWS KMS só podem ser usadas quando os princípios são da mesma conta. Você não pode modificar a política de chaves para chaves gerenciadas pela AWS. Ao acessar a chave do AWS KMS na segunda conta, certifique-se de que as permissões estejam presentes na origem e no destino.

Suponha que você queira permitir que um usuário X do AWS Identity and Access Management (IAM) na conta Y tenha uma chave do AWS KMS na conta Z. Nesse caso, a política do IAM deverá ter as ações necessárias do AWS KMS. As mesmas ações devem ser permitidas pela política de chaves do AWS KMS. Para obter mais informações, consulte Permitir que usuários em outras contas usem uma chave do AWS KMS.

Aqui estão os problemas mais comuns que ocorrem ao acessar uma chave do AWS KMS de uma conta cruzada.

Se a mensagem de erro for causada por uma política de controle de serviços (SCP), verifique todas as SCPs aplicadas à sua conta. Isso ajuda você a identificar a SCP que está restringindo a ação kms:Decrypt. Atualize a SCP afetada e tente sua ação novamente. Para obter mais informações, consulte Listagem de todas as políticas anexadas a uma raiz, UO ou conta e Como atualizar uma SCP. Veja o exemplo a seguir desse erro:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 with an explicit deny in a service control policy"

Se a entidade do IAM tiver um limite de permissão anexado a ela, o limite definirá as permissões máximas que a entidade tem. Verifique o limite de permissões na entidade principal do IAM para garantir que a ação de descriptografia necessária do AWS KMS seja permitida. Em seguida, tente a ação novamente. Veja o exemplo a seguir desse erro:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 because no permissions boundary allows the kms:Decrypt action"

Se você estiver se conectando ao AWS KMS usando um endpoint da VPC, verifique a política de endpoint da VPC aplicada. Certifique-se de que a ação kms:Decrypt seja permitida na política. Veja o exemplo a seguir desse erro:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 because no VPC endpoint policy allows the kms:Decrypt action"

Informações relacionadas

Configurar criptografia no AWS Glue

Políticas de chaves no AWS KMS

AWS OFICIAL
AWS OFICIALAtualizada há um ano