Wie behebe ich KMSAccessDeniedException-Fehler von AWS Lambda?

Letzte Aktualisierung: 15.11.2021

Meine AWS Lambda-Funktion gibt einen KMSAccessDeniedException-Fehler zurück. Wie kann dieses Problem behoben werden?

Kurzbeschreibung

Aktualisieren Sie die Berechtigungen von AWS Key Management Service (AWS KMS) Ihrer IAM-Identität (AWS Identity and Access Management) basierend auf der Fehlermeldung.

Wichtig: 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 KMS-Schlüsselrichtlinie aktualisiert werden.

Weitere Informationen zu AWS KMS-Schlüsseln und zur Richtlinienverwaltung finden Sie unter AWS-verwaltete KMS-Schlüssel und von Kunden verwaltete Schlüssel.

Auflösung

Hinweis: Wenn Sie beim Ausführen von AWS-Command-Line-Interface(AWS CLI)-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.

So beheben Sie Fehler des Typs „KMS-Ausnahme: UncognizedClientExceptionKMS-Nachricht“

Der folgende Fehler tritt normalerweise auf, wenn die Ausführungsrolle einer Funktion gelöscht und dann unter demselben Namen, jedoch 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 KMS key settings. KMS Exception: UnrecognizedClientExceptionKMS Message: The security token included in the request is invalid.

Um den Fehler zu beheben, müssen Sie den AWS-KMS-Zuschuss für die Ausführungsrolle der Funktion wie folgt zurücksetzen:

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

1.    Rufen Sie den Amazon Resource Name (ARN) der aktuellen Ausführungsrolle und des KMS-Schlüssels der Funktion ab, indem Sie den folgenden AWS-CLI-Befehl ausführen:

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

2.    Setzen Sie die AWS-KMS-Gewährung zurück, indem Sie einen der folgenden Schritte ausführen:

Aktualisieren Sie die Ausführungsrolle der Funktion auf einen anderen, temporären Wert, indem Sie den folgenden Befehl update-function-configuration ausführen:

Wichtig: Ersetzen Sie temporaryValue durch den ARN der temporären Ausführungsrolle.

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

Aktualisieren Sie dann die Ausführungsrolle der Funktion wieder auf die ursprüngliche Ausführungsrolle, indem Sie den folgenden Befehl ausführen:

Wichtig: Ersetzen Sie originalValue durch den ARN der ursprünglichen Ausführungsrolle.

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

-oder-

Aktualisieren Sie den AWS-KMS-Schlüssel der Funktion auf einen anderen, temporären Wert, indem Sie den folgenden Befehl zur Aktualisierung der Funktionskonfiguration ausführen:

Wichtig: Ersetzen Sie temporaryValue durch einen temporären KMS-Schlüssel-ARN. Um einen Standardserviceschlüssel zu verwenden, setzen Sie den Parameter kms-key-arn auf "".

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

Aktualisieren Sie dann den KMS-Schlüssel der Funktion wieder auf den ARN des ursprünglichen KMS-Schlüssels, indem Sie den folgenden Befehl ausführen:

Wichtig: Ersetzen Sie originalValue durch den ARN des ursprünglichen KMS-Schlüssels.

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

Weitere Informationen finden Sie unter Wichtige Richtlinien in AWS KMS.

So beheben Sie Fehler des Typs „KMS-Ausnahme: AccessDeniedException KMS-Nachricht“

Der folgende Fehler weist darauf hin, dass Ihre IAM-Identität nicht über die erforderlichen Berechtigungen verfügt, um die API-Aktion KMS:Decrypt durchzufü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ügen Sie Ihrem IAM-Benutzer oder Ihrer IAM-Rolle die folgende Richtlinienanweisung hinzu:

Wichtig: Ersetzen Sie "your-KMS-key-arn" durch Ihren KMS-Schlüssel-ARN.

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

So beheben Sie Fehler des Typs „Sie sind nicht zur Ausführung berechtigt“

Die folgenden Fehler weisen darauf hin, dass Ihre IAM-Identität nicht über eine der Berechtigungen verfügt, die für den Zugriff auf den 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: KMS-Berechtigungen sind für Ihre IAM-Identität oder die Ausführungsrolle der Funktion nicht erforderlich, wenn Sie die Standardschlüsselrichtlinie verwenden.

Um diese Art von Fehlern zu beheben, stellen Sie sicher, dass Ihr IAM-Benutzer oder Ihre IAM-Rolle über die erforderlichen Berechtigungen verfügt, um die folgenden Aktionen durchzuführen:

Anweisungen finden Sie unter Hinzufügen von Berechtigungen zu einem Benutzer (Konsole) oder Ändern einer Rollenberechtigungsrichtlinie (Konsole) basierend auf Ihrem Anwendungsfall.

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

Wichtig: Der Ressourcenwert muss "*" lauten. Die Aktion kms:ListAliases unterstützt keine Berechtigungen auf niedriger Ebene. Stellen Sie außerdem sicher, dass Sie "your-kms-key-arn" durch den ARN Ihres KMS-Schlüssels ersetzen.

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

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?