Wie kann ich 400-Fehler beheben, bei denen der Zugriff auf AWS-KMS-Geheimtext in AWS Glue verweigert wurde?

Lesedauer: 5 Minute
0

Ich erhalte einen 400-Fehler, wenn ich einen AWS-Glue-Crawler oder eine AWS-Glue ETL-Aufgabe ausführe.

Kurzbeschreibung

Wenn Sie AWS Glue verwenden, erhalten Sie möglicherweise diesen Fehler, wenn Sie versuchen, auf AWS-Ressourcen wie Buckets von Amazon Simple Service Solution (Amazon S3) zuzugreifen:

„Der Geheimtext bezieht sich auf einen Kunden-Masterschlüssel, der in dieser Region nicht existiert oder auf den Sie nicht zugreifen dürfen.“

Sie erhalten diesen Fehler, wenn Sie mithilfe von AWS-Glue-Aufgaben oder-Crawlern auf einen AWS-Service zugreifen, der mit Schlüsseln von AWS Key Management Service (AWS KMS) verschlüsselt ist. Der Fehler tritt höchstwahrscheinlich aus einem der folgenden Gründe auf:

  • Der Prinzipal, der versucht, auf den verschlüsselten Schlüssel zuzugreifen, verfügt nicht über die erforderlichen AWS-KMS-Berechtigungen
  • Der AWS-KMS-Schlüssel existiert nicht oder ist in einer bestimmten AWS-Region nicht vorhanden

Lösung

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

Prüfen Sie, ob Ihre AWS-Glue-Rollenrichtlinie über die erforderlichen Berechtigungen verfügt

Überprüfen Sie zunächst, ob die von Ihnen verwendete AWS-Glue-Rollenrichtlinie über die erforderlichen Berechtigungen für den Zugriff auf den AWS-KMS-Schlüssel der Ressource verfügt.

Nehmen wir zum Beispiel an, dass Sie eine AWS-Glue-Rolle namens AWSGlue-MyGlueCustomRole haben. Diese Rolle greift auf einen S3-Bucket zu, der mit dem AWS-KMS-Schlüssel arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 verschlüsselt ist. Die AWS-Glue-Rollenrichtlinie muss zusätzlich zu ihren anderen Berechtigungen den folgenden Kontext haben:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07"
        }
    ]
}

Prüfen Sie, ob Ihre AWS-KMS-Schlüsselrichtlinie die AWS-Glue-Rolle zulässt

Die AWS-KMS-Schlüsselrichtlinie muss die AWS-Glue-Rolle als Teil der zulässigen Entität zulassen.

Im vorherigen Beispiel müssen an die AWS-KMS-Schlüsselrichtlinie arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 die folgenden Berechtigungen angehängt sein:

{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::XXXXXXXX9645:role/AWSGlue-MyGlueCustomRole "
        ]
    },
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*"
}

Stellen Sie sicher, dass der AWS-KMS-Schlüssel in derselben Region wie Ihre AWS-Glue-Aufgabe existiert

Gehen Sie wie folgt vor, um zu überprüfen, in welcher Region Ihr AWS-KMS-Schlüssel existiert:

1.    Öffnen Sie die AWS-KMS-Konsole.

2.    Wählen Sie die Region aus, in der der Fehler aufgetreten ist.

3.    Wählen Sie im Navigationsbereich entweder von AWS verwaltete Schlüssel oder Kundenseitig verwaltete Schlüssel aus. Suchen Sie dann nach dem AWS-KMS-Schlüssel, den Sie verwenden. Sie können auch die AWS CLI verwenden, um nach dem AWS-KMS-Schlüssel zu suchen. Der folgende Befehl gibt einen NotFoundException-Fehler zurück, wenn der Schlüssel in der Region nicht existiert:

aws kms describe-key --key-id <Key-ID> --region <region-name>

Hinweis: Stellen Sie sicher, dass Sie <Key-ID> und <region-name> in diesem Beispiel durch die Schlüssel-ID und den Namen der Region, die Sie verwenden, ersetzen.

4.    Überprüfen Sie die AWS-CloudTrail-API-Aufrufe kms:Decrypt und kms:Encrypt, um festzustellen, ob Sie Fehler feststellen. Sie können auch alle Ereignisprotokolle einsehen, indem Sie kms.amazonaws.com als Ereignisquelle verwenden.

Kontenübergreifendes Beispiel

Wenn sich die AWS-Glue-Rolle und der AWS-KMS-Schlüssel in unterschiedlichen Konten befinden, verwenden Sie den vom Kunden verwalteten Schlüssel und nicht den von AWS verwalteten Schlüssel. AWS-KMS-Schlüssel können nur verwendet werden, wenn die Prinzipien von demselben Konto stammen. Sie können die Schlüsselrichtlinie für von AWS verwaltete Schlüssel nicht ändern. Wenn Sie im zweiten Konto auf den AWS-KMS-Schlüssel zugreifen, stellen Sie sicher, dass die Berechtigungen sowohl für die Quelle als auch für das Ziel vorhanden sind.

Angenommen, Sie möchten einem AWS Identity and Access Management (IAM)-Benutzer X in Konto Y einen AWS-KMS-Schlüssel in Konto Z gewähren. In diesem Fall muss die IAM-Richtlinie die erforderlichen AWS-KMS-Aktionen enthalten. Dieselben Aktionen müssen gemäß der AWS-KMS-Schlüsselrichtlinie zulässig sein. Weitere Informationen finden Sie unter Erlauben von Benutzern in anderen Konten, einen AWS-KMS-Schlüssel zu verwenden.

Hier sind die häufigsten Probleme aufgeführt, die beim kontoübergreifenden Zugriff auf einen AWS-KMS-Schlüssel auftreten.

Wenn die Fehlermeldung durch eine Service-Kontrollrichtlinie (SCP) verursacht wird, überprüfen Sie alle angewendeten SCPs in Ihrem Konto. Das hilft Ihnen dabei, den SCP zu identifizieren, der die kms:Decrypt-Aktion einschränkt. Aktualisieren Sie das betreffende SCP und versuchen Sie Ihre Aktion erneut. Weitere Informationen finden Sie unter Aufführen der Richtlinien, die an ein Root, OE oder Konto angehängt sind und unter Aktualisieren eines SCPs. Sehen Sie sich das folgende Beispiel für diesen Fehler an:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 with an explicit deny in a service control policy"

Wenn der IAM-Entität eine Berechtigungsgrenze zugeordnet ist, legt die Grenze die maximalen Berechtigungen fest, über die die Entität verfügt. Überprüfen Sie die Berechtigungsgrenze auf dem IAM-Prinzipal, um sicherzustellen, dass die erforderliche AWS-KMS-Entschlüsselungsaktion zulässig ist. Versuchen Sie die Aktion dann erneut. Sehen Sie sich das folgende Beispiel für diesen Fehler an:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 because no permissions boundary allows the kms:Decrypt action"

Wenn Sie über einen VPC-Endpunkt eine Verbindung zu AWS KMS herstellen, überprüfen Sie die angewandte VPC-Endpunktrichtlinie. Stellen Sie sicher, dass die Aktion kms:Decrypt in der Richtlinie zulässig ist. Sehen Sie sich das folgende Beispiel für diesen Fehler an:

User: arn:aws:iam::XXXXXXXX9645:user/KMSDemO is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:XXXXXXXX9645:key/64d3e826-1a87-4cbc-95b8-fb386730a07 because no VPC endpoint policy allows the kms:Decrypt action"

Ähnliche Informationen

Verschlüsselung in AWS Glue einrichten

Schlüsselrichtlinien in AWS KMS

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr