Ir para o conteúdo

Como resolvo os erros de permissão “KMS Exception” da função do Lambda?

5 minuto de leitura
0

Minha função do AWS Lambda retornou um erro de “KMS Exception”, “You are not authorized to perform” ou “Access to KMS is not allowed”.

Resolução

Atualize as permissões do AWS Key Management Service (AWS KMS) da sua identidade do AWS Identity and Access Management (AWS IAM) com base na mensagem de erro. Se a chave do AWS KMS e o perfil do IAM pertencerem a contas diferentes da AWS, a política do IAM e a política de chave do AWS KMS deverão ser atualizadas.

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Para resolver erros “KMS Exception: UnrecognizedClientExceptionKMS Message”

O erro a seguir geralmente ocorre quando a função do perfil de execução do Lambda é excluída e 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 AWS KMS key settings. KMS Exception: UnrecognizedClientExceptionKMS Message: The security token included in the request is invalid.”

Para resolver o erro, você deve redefinir a concessão do AWS KMS para o perfil de execução da função.

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 AWS KMS.

  1. Para obter o nome do recurso da Amazon (ARN) do perfil de execução atual da função e a chave do AWS KMS, execute o seguinte comando get-function-configuration:
    aws lambda get-function-configuration --function-name your-function-name
    Observação: substitua yourFunctionName pelo nome da sua função.
  2. Para redefinir a concessão do AWS KMS, faça o seguinte:
    Atualize a função do perfil de execução para um valor temporário diferente executando o seguinte comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --role temporaryValue
    Observação: substitua temporaryValue pelo perfil de execução temporário ARN.
    Para atualizar o perfil de execução da função de volta ao perfil de execução original, execute o seguinte comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --role originalValue
    Observação: substitua originalValue pelo ARN do perfil de execução original.
    -ou-
    Para atualizar a chave do AWS KMS da função para um valor diferente e temporário, execute o seguinte comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue
    Observação: substitua temporaryValue por uma chave temporária do AWS KMS ARN. Para usar uma chave de serviço padrão, defina o parâmetro kms-key-arn como "".
    Para atualizar a chave do AWS KMS da função de volta para o ARN original da chave do AWS KMS, execute o seguinte comando update-function-configuration:
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue
    
    Observação: substitua originalValue pelo ARN da chave original do 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 realizar 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 perfil do IAM:

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

Observação: substitua your-KMS-key-arn pelo ARN da sua chave do AWS KMS.

Para obter instruções, consulte Adicionar permissões a um usuário (console).

Para resolver erros do tipo “You are not authorized to perform”

Os erros a seguir indicam que sua identidade do IAM não tem uma das permissões necessárias para acessar a chave do AWS 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: as permissões do AWS KMS não são necessárias para sua identidade do IAM ou para a função do perfil de execução se você usar a política de chaves padrão.

Para resolver esses tipos de erros, verifique se seu usuário ou perfil do IAM tem as permissões necessárias para realizar as seguintes ações de API do AWS KMS:

Para obter instruções, consulte Adicionar permissões a um usuário (console).

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

{
    "Version": "2012-10-17",
    "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": "*"
        }
    ]
}

Observação: o valor do Recurso 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 AWS KMS.

Para resolver os erros “Access to KMS is not allowed”

O erro a seguir indica que uma entidade do IAM não tem permissões para obter segredos do AWS Secrets Manager:

“Access to KMS is not allowed (Service: AWSSecretsManager; Status Code: 400; Error Code: AccessDeniedException; Request ID: 123a4bcd-56e7-89fg-hij0-1kl2m3456n78)”

Certifique-se de que seu usuário ou perfil do IAM tenha as permissões necessárias para realizar as seguintes ações de API do AWS KMS:

Para obter mais informações, consulte Como resolvo erros de acesso à chave do AWS KMS depois de tentar recuperar um segredo criptografado do Secrets Manager?

Informações relacionadas

Como soluciono erros de código de status HTTP 502 e HTTP 500 (lado do servidor) no AWS Lambda?

Como soluciono falhas de funções do Lambda?

AWS OFICIALAtualizada há 7 meses