Wie behebe ich KMSAccessDeniedException-Fehler von AWS Lambda?

Lesedauer: 5 Minute
0

Meine AWS-Lambda-Funktion gab einen KMSAccessDeniedException-Fehler zurück.

Kurzbeschreibung

Aktualisieren Sie die AWS Key Management Service (AWS KMS)-Berechtigungen Ihrer AWS Identity and Access Management (IAM)-Identität 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 AWS-KMS-Schlüsselrichtlinie aktualisiert werden.

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

Lö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: UnrecognizedClientExceptionKMS-Nachricht“

Der folgende Fehler tritt normalerweise auf, wenn die Ausführungsrolle einer Lambda-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 AWS 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 AWS-KMS-Schlüssel zu verwenden.

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

Hinweis: Ersetzen Sie yourFunctionName durch den Namen Ihrer Funktion.

$ 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 AWS-KMS-Schlüssel-ARN. Um einen Standard-Serviceschlü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 AWS-KMS-Schlüssel der Funktion wieder auf den ARN des ursprünglichen AWS-KMS-Schlüssels, indem Sie den folgenden Befehl ausführen:

Wichtig: Ersetzen Sie originalValue durch den ARN des ursprünglichen AWS-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 den ARN Ihres AWS-KMS-Schlüssels.

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

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

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 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 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 AWS-KMS-API-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 AWS-KMS-Schlüssel erforderlichen Berechtigungen gewährt

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

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

Um Fehler wie „Zugriff auf KMS ist nicht zulässig“ zu beheben

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

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

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

Weitere Informationen finden Sie unter Wie kann ich Probleme beim Zugriff auf ein verschlüsseltes Geheimnis von AWS Secrets Manager lösen?


Ähnliche Informationen

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

Wie behebe ich Fehler in einer Lambda-Funktion?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr