Como resolvo erros KmsAccessDeniedException do AWS Lambda?

Última atualização em: 2021-11-15

Minha função do AWS Lambda retorna um erro KmsAccessDeniedException. Como solucionar o problema?

Breve descrição

Atualize as permissões do AWS Key Management Service (AWS KMS) da sua identidade do AWS Identity and Access Management (IAM) com base na mensagem de erro.

Importante: se a chave do AWS KMS e a função do IAM pertencerem a contas da AWS diferentes, a política do IAM e a política de chaves do KMS deverão ser atualizadas.

Para obter mais informações sobre o gerenciamento de políticas e chaves do AWS KMS, consulte Chaves do KMS gerenciadas pela AWS e chaves gerenciadas pelo cliente.

Resolução

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

Para resolver erros "KMS Exception: UnrecognizedClientExceptionKMS Message"

O erro a seguir geralmente ocorre quando a opção de execução de uma função é excluída e depois recriada usando o mesmo nome, mas com uma entidade principal diferente:

Calling the invoke API action failed with this message: Lambda was unable to decrypt the environment variables because KMS access was denied. Please check the function's KMS key settings. KMS Exception: UnrecognizedClientExceptionKMS Message: The security token included in the request is invalid.

Para resolver esse erro, você deve redefinir a concessão do AWS KMS para a opção de execução de função, fazendo o seguinte:

Observação: o usuário do IAM que cria e atualiza a função do Lambda deve ter permissão para usar a chave do KMS.

1.    Obtenha o nome do recurso da Amazon (ARN) da função de execução atual da função e da chave do KMS, executando o seguinte comando da AWS CLI:

$ aws lambda get-function-configuration --function-name yourFunctionName

2.    Redefina a concessão do AWS KMS executando um dos seguintes procedimentos:

Atualize a opção de execução de função para um valor temporário diferente, executando o seguinte comando update-function-configuration:

Importante: Substitua temporaryValue pelo ARN da opção de execução temporária.

$ aws lambda update-function-configuration --function-name yourFunctionName --role temporaryValue

Em seguida, atualize a opção de execução da função de volta para a opção de execução original, executando o seguinte comando:

Importante: substituaoriginalValue pelo ARN da opção de execução original.

$ aws lambda update-function-configuration --function-name yourFunctionName --role originalValue

-ou-

Atualize a chave do AWS KMS da função para um valor temporário diferente, executando o seguinte comando update-function-configuration:

Importante: substitua temporaryValue por um ARN de chave do KMS temporária. Para usar uma chave de serviço padrão, defina o parâmetro kms-key-arn como "".

$ aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue

Em seguida, atualize a chave do KMS da função de volta para o ARN da chave KMS original, executando o seguinte comando:

Importante: substituaoriginalValue pelo ARN da chave do KMS original

$ aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue

Para obter mais informações, consulte Políticas de chaves no AWS KMS.

Para resolver erros "KMS Exception: AccessDeniedException KMS Message"

O erro a seguir indica que sua identidade do IAM não tem as permissões necessárias para executar a ação da API kms:Decrypt:

Lambda was unable to decrypt your environment variables because the KMS access was denied. Please check your KMS permissions. KMS Exception: AccessDeniedException KMS Message: 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.

Para resolver o erro, adicione a seguinte declaração de política ao seu usuário ou função do IAM:

Importante: substitua"your-KMS-key-arn" pelo ARN da chave do KMS.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "your-KMS-key-arn"
        }
    ]
}

Para resolver erros do tipo “Você não tem autorização para realizar”

Os erros a seguir indicam que sua identidade do IAM não tem uma das permissões necessárias para acessar a chave do KMS:

You are not authorized to perform: kms:Encrypt.
You are not authorized to perform: kms:CreateGrant.
User: user-arn is not authorized to perform: kms:ListAliases on resource: * with an explicit deny.

Observação: permissões do KMS não serão necessárias para sua identidade do IAM ou para a opção de execução da função se você usar a política de chaves padrão.

Para resolver esses tipos de erros, verifique se o usuário ou a função do IAM tem as permissões necessárias para executar as seguintes ações:

Para obter instruções, consulteAdicionar permissões a um usuário (console) ou Modificar uma política de permissões de função (console), com base no seu caso de uso.

Exemplo de declaração de política do IAM que concede as permissões necessárias para acessar uma chave do KMS gerenciada pelo cliente

Importante: o valor deResource deve ser "*". A ação kms:ListAliases não oferece suporte a permissões de baixo nível. Além disso, certifique-se de substituir “your-kms-key-arn” pelo ARN da sua chave do KMS.

"Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:CreateGrant",
            ],
            "Resource": "your-kms-key-arn"
        },
        {
            "Sid": "statement2",
            "Effect": "Allow",
            "Action": "kms:ListAliases",
            "Resource": "*"
        }
    ]

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?