Como resolver erros “KMSAccessDeniedException” do AWS Lambda?

6 minuto de leitura
0

Minha função do AWS Lambda retornou um erro “KMSAccessDeniedException”.

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 o perfil do IAM pertencerem a contas da AWS diferentes, a política do IAM e a política de chave do AWS KMS deverão ser atualizadas.

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

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 do Lambda é 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 AWS 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 AWS KMS.

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

Observação: substitua yourFunctionName pelo nome da sua função.

$ 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 o perfil de execução da função de volta para o perfil de execução original, executando o seguinte comando:

Importante: Substitua originalValue pelo ARN do perfil 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 AWS 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 AWS KMS da função de volta para o ARN original da chave do AWS KMS, executando o seguinte comando:

Importante: Substitua originalValue pelo ARN original da chave do AWS KMS.

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

Para obter mais informações, consulte Políticas de chave 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 perfil do IAM:

Importante: Substitua “your-KMS-key-arn” pelo ARN da chave do AWS KMS.

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

Para obter instruções, consulte Adicionar 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.

Para resolver erros do tipo “You are not authorized to perform” (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 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: permissões do AWS 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 de API do AWS KMS:

Para obter instruções, consulte Adicionar 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 AWS KMS gerenciada pelo cliente

Importante: o valor deResource (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.

{
  "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": "*"
    }
  ]
}

Para resolver erros de “Acesso ao KMS não permitido”

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 posso resolver problemas para acessar um segredo do AWS Secrets Manager criptografado?


Informações relacionadas

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

Como solucionar falhas da função do Lambda?

AWS OFICIAL
AWS OFICIALAtualizada há um ano