Direkt zum Inhalt

Wie behebe ich Berechtigungsfehler der Lambda-Funktion „KMS Exception“?

Lesedauer: 5 Minute
0

Meine AWS Lambda-Funktion hat die Fehler „KMS Exception“, „You are not authorized to perform“ oder „Access to KMS is not allowed“ zurückgegeben.

Lösung

Aktualisiere die AWS Key Management Service (AWS KMS)-Berechtigungen der AWS Identity and Access Management (IAM)-Identität auf der Grundlage der Fehlermeldung. Wenn der AWS-KMS-Schlüssel und die IAM-Rolle zu verschiedenen AWS-Konten gehören, müssen sowohl die IAM-Richtlinie als auch die AWS-KMS-Schlüsselrichtlinie aktualisiert werden.

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI-Version verwendest.

So behebst du den Fehler „KMS Exception: UnrecognizedClientExceptionKMS Message“

Der folgende Fehler tritt auf, wenn die Ausführungsrolle einer Lambda-Funktion gelöscht und dann mit demselben Namen, aber mit einem anderen Prinzipal, neu erstellt wird:

„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.“

Um den Fehler zu beheben, musst du die AWS KMS-Erteilung für die Ausführungsrolle der Funktion zurücksetzen.

Hinweis: Der IAM-Benutzer, der die Lambda-Funktion erstellt und aktualisiert, muss die Berechtigung haben, den AWS-KMS-Schlüssel zu verwenden.

  1. Um den Amazon-Ressourcennamen (ARN) der aktuellen Ausführungsrolle der Funktion und den AWS-KMS-Schlüssel abzurufen, führe den folgenden Befehl get-function-configuration aus:
    aws lambda get-function-configuration --function-name your-function-name
    Hinweis: Ersetze yourFunctionName durch den Namen der Funktion.
  2. Um die AWS KMS-Erteilung zurückzusetzen, führe einen der folgenden Schritte aus:
    Um die Ausführungsrolle der Funktion auf einen anderen, temporären Wert zu aktualisieren, führe den folgenden Befehl update-function-configuration aus:
    aws lambda update-function-configuration --function-name yourFunctionName --role temporaryValue
    Hinweis: Ersetze temporaryValue durch den ARN der temporären Ausführungsrolle.
    Um die Ausführungsrolle der Funktion wieder auf die ursprüngliche Ausführungsrolle zu aktualisieren, führe den folgenden Befehl update-function-configuration aus:
    aws lambda update-function-configuration --function-name yourFunctionName --role originalValue
    Hinweis: Ersetze originalValue durch den ARN der ursprünglichen Ausführungsrolle.
    -oder-
    Um den AWS-KMS-Schlüssel der Funktion auf einen anderen, temporären Wert zu aktualisieren, führe den folgenden Befehl update-function-configuration aus:
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue
    Hinweis: Ersetze temporaryValue durch den ARN des temporären AWS KMS-Schlüssels. Um einen Standard-Serviceschlüssel zu verwenden, setze den Parameter kms-key-arn auf "".
    Um den AWS-KMS-Schlüssel der Funktion wieder auf den ursprünglichen AWS-KMS-Schlüssel-ARN zu aktualisieren, führe den folgenden Befehl update-function-configuration aus:
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue
    
    Hinweis: Ersetze originalValue durch den ARN des ursprünglichen AWS-KMS-Schlüssels.

So behebst du den Fehler „KMS Exception: AccessDeniedException KMS Message“

Der folgende Fehler weist darauf hin, dass deine IAM-Identität nicht über die erforderlichen Berechtigungen verfügt, um die API-Aktion kms:Decrypt auszuführen:

„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.“

Um den Fehler zu beheben, füge dem IAM-Benutzer oder der IAM-Rolle die folgende Richtlinienanweisung hinzu:

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

Hinweis: Ersetze your-KMS-key-arn durch den ARN deines AWS-KMS-Schlüssels.

Eine Anleitung findest du unter Hinzufügen von Berechtigungen zu einem Benutzer (Konsole).

So behebst du die Fehler „You are not authorized to perform“

Die folgenden Fehler deuten darauf hin, dass die IAM-Identität nicht die Berechtigungen verfügt, die für den Zugriff auf den AWS-KMS-Schlüssel erforderlich sind:

„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.“

Hinweis: AWS KMS-Berechtigungen sind für die IAM-Identität oder die Ausführungsrolle der Funktion nicht erforderlich, wenn du die Standardschlüsselrichtlinie verwendest.

Um diese Art von Fehlern zu beheben, stelle sicher, dass der IAM-Benutzer oder die IAM-Rolle über die erforderlichen Berechtigungen verfügt, um die folgenden AWS KMS-API-Aktionen auszuführen:

Eine Anleitung findest du unter Hinzufügen von Berechtigungen zu einem Benutzer (Konsole).

Beispiel für eine IAM-Richtlinienanweisung, die für den Zugriff auf einen vom Kunden verwalteten AWS-KMS-Schlüssel erforderlichen Berechtigungen gewährt

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

Hinweis: Der Ressourcenwert muss "*" sein. Die Aktion kms:ListAliases unterstützt keine Berechtigungen auf niedriger Ebene. Stelle außerdem sicher, dass du "your-kms-key-arn" durch deinen AWS KMS-Schlüssel-ARN ersetzt.

So behebst du die Fehler „Access to KMS is not allowed“

Der folgende Fehler weist darauf hin, dass eine IAM-Entität keine Berechtigungen zum Abrufen von AWS Secrets Manager-Secrets hat:

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

Stelle sicher, dass der IAM-Benutzer oder die IAM-Rolle über die erforderlichen Berechtigungen verfügt, um die folgenden AWS KMS-API-Aktionen durchzuführen:

Weitere Informationen findest du unter Wie behebe ich Fehler beim Zugriff auf AWS-KMS-Schlüssel, nachdem ich versucht habe, ein verschlüsseltes Secrets Manager-Secret abzurufen?

Ähnliche Informationen

Wie behebe ich HTTP 502- und HTTP 500-Statuscode-Fehler (serverseitig) von AWS Lambda?

Wie behebe ich Lambda-Funktionsfehler?

AWS OFFICIALAktualisiert vor 7 Monaten