Warum erhalte ich die Fehlermeldung „Zugriff verweigert“, wenn ich eine Abfrage in Amazon Athena ausführe?

Lesedauer: 7 Minute
0

Wenn ich eine Amazon Athena Abfrage ausführe, erhalte ich die Fehlermeldung „Zugriff verweigert“.

Kurzbeschreibung

Die Fehlermeldung „Zugriff verweigert“ kann aus den folgenden Gründen auftreten:

  • Der Benutzer von AWS Identity and Access Management (IAM) verfügt nicht über eine oder mehrere der folgenden Berechtigungen:
  • Lesen Sie den Quelldaten-Bucket.
  • Schreiben Sie die Ergebnisse in den Abfrageergebnis-Bucket.
  • Die Bucket-Richtlinien von Amazon Simple Storage Service (Amazon S3) gewähren dem IAM-Benutzer nicht die erforderlichen Berechtigungen.
  • Der Objektbesitzer unterscheidet sich vom Amazon S3-Bucket-Besitzer.
  • Sie haben keinen Zugriff auf den Schlüssel des AWS Key Management Service (AWS KMS), der zum Lesen oder Schreiben der verschlüsselten Daten verwendet wird.
  • Die AWS Glue-Datenkatalog-Richtlinie erlaubt dem IAM-Benutzer keinen Zugriff.

Lösung

Überprüfen Sie die folgenden Punkte, um den Fehler „Zugriff verweigert“ zu beheben. Weitere Informationen finden Sie unter Problembehandlung in Athena.

Stellen Sie sicher, dass der IAM-Benutzer über die erforderlichen Berechtigungen für den Zugriff auf den Quelldaten-Bucket und den Abfrageergebnis-Bucket verfügt

Sie erhalten eine Fehlermeldung ähnlich der folgenden, wenn Sie keinen Zugriff auf den Quelldaten-Bucket haben:

Your query has the following errors:com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 72VA5FB0ASWCQFPD; S3 Extended Request ID: cykX1CZ/KfxpL/h8/DOQoCBJ88qFGYqt6J52Jqh87qBfyN8c2P2azRiYjjJE1HL7i0Mg9xxxxxx=; Proxy: null), S3 Extended Request ID: cykX1CZ/KfxpL/h8/DOQoCBJ88qFGYqt6J52Jqh87qBfyN8c2P2azRiYjjJE1HL7i0Mg9xxxxxx= (Path: s3://my-athena-source-bucket/athena_data.csv)

Sie erhalten eine Fehlermeldung ähnlich der folgenden, wenn Sie keinen Zugriff auf den Abfrageergebnis-Bucket haben:

Your query has the following errors:Access denied when writing output to url: s3://my-athena-result-bucket/Unsaved/2021/05/07/example_query_ID.csv . Please ensure you are allowed to access the S3 bucket. If you are encrypting query results with KMS key, please ensure you are allowed to access your KMS key

Der IAM-Benutzer, der die Abfragen ausführt, benötigt Zugriff auf den Quelldaten-Bucket und den Abfrageergebnis-Bucket. Sie können dem IAM-Benutzer die erforderliche Berechtigung erteilen, indem Sie dem IAM-Benutzer/der IAM-Rolle eine IAM-Richtlinie zuordnen. Die folgende IAM-Richtlinie gewährt Mindestberechtigungen für den Quelldaten-Bucket und den Abfrageergebnis-Bucket:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-athena-source-bucket"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::my-athena-source-bucket/data/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:AbortMultipartUpload",
        "s3:PutObject",
        "s3:ListMultipartUploadParts"
      ],
      "Resource": [
        "arn:aws:s3:::my-athena-result-bucket",
        "arn:aws:s3:::my-athena-result-bucket/*"
      ]
    }
  ]
}

Stellen Sie sicher, dass Sie in dieser Beispielrichtlinie Folgendes ersetzen:

  • my-athena-source-bucket durch den Namen Ihres Quelldaten-Buckets
  • my-athena-source-bucket/data/ durch den Speicherort der Quelldaten
  • my-athena-result-bucket durch den Namen Ihres Abfrageergebnis-Buckets

Die vollständige Liste der Richtlinien finden Sie unter Verwaltete AWS-Richtlinien für Amazon Athena.

Fügen Sie die Amazon S3-Bucket-Richtlinie mit den erforderlichen Berechtigungen für kontoübergreifende Abfragen hinzu

Sie müssen keine S3-Bucket-Richtlinien anhängen, wenn sich Ihre Athena-Tabelle und Ihre S3-Buckets im selben Konto befinden. Wenn Sie jedoch über S3-Bucket-Richtlinien verfügen, stellen Sie sicher, dass diese dem IAM-Benutzer/der IAM-Rolle die erforderlichen S3-Aktionen gewähren. Wenn sich Ihre Athena-Tabelle und Ihre S3-Buckets in unterschiedlichen Konten befinden, müssen Sie die S3-Bucket-Richtlinien anhängen, die dem IAM-Benutzer den erforderlichen Zugriff gewähren.

Sie können in Konto B eine S3-Bucket-Richtlinie anhängen, die der folgenden ähnelt, um dem IAM-Benutzer athena_user in Konto A Zugriff zu gewähren. Diese Beispielrichtlinie ermöglicht dem IAM-Benutzer explizit den Zugriff auf den S3-Bucket my-athena-source-bucket in Konto B.

{
  "Version": "2012-10-17",
  "Id": "Policy1620692934647",
  "Statement": [
    {
      "Sid": "Stmt1620692932186",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::1111222233334444:user/athena_user"
      },
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::my-athena-source-bucket",
        "arn:aws:s3:::my-athena-source-bucket/data/*"
      ]
    }
  ]
}

Stellen Sie sicher, dass Sie in dieser Beispielrichtlinie Folgendes ersetzen:

  • my-athena-source-bucket durch den Namen Ihres Quelldaten-Buckets
  • my-athena-source-bucket/data/ durch den Speicherort der Quelldaten
  • 1111222233334444 durch die Konto-ID für Konto A
  • athena_user durch den Namen des IAM-Benutzers in Konto A

Um allen Benutzern in Konto A Zugriff auf den Bucket zu gewähren, ersetzen Sie den Principal-Schlüssel durch einen Schlüssel, der root angibt. Zum Beispiel „arn:aws:iam::1111222233334444:root“.

Hinweis: Diese Richtlinie erlaubt alle S3-Aktionen für my-athena-source-bucket. Sie können die S3-Aktionen aktualisieren, je nachdem, ob der S3-Bucket der Quell-Bucket oder der Abfrageergebnis-Bucket ist. Weitere Informationen finden Sie im Abschnitt Bucket-Richtlinie oder IAM-Benutzerrichtlinien unter Kontoübergreifender Zugriff auf Amazon S3-Buckets in Athena.

Stellen Sie sicher, dass die S3-Bucket-Richtlinie keine Anweisungen enthält, die Konto A oder seinen IAM-Benutzern ausdrücklich den Zugriff verweigern. Stellen Sie außerdem sicher, dass Ihre Richtlinie keine Bedingungen enthält, die die Anfragen ablehnen könnten. Weitere Informationen finden Sie unter Wie behebe ich 403 Access Denied-Fehler in Amazon S3? Informationen zur Definition Berechtigungen mit geringsten Rechten für den S3-Bucket finden Sie unter So definieren Sie Berechtigungen mit geringsten Rechten für Aktionen, die von AWS-Services aufgerufen werden.

Aktualisieren Sie Ihre AWS-KMS-Schlüsselrichtlinie

Wenn Ihre Quelldaten verschlüsselt sind oder Ihre Athena-Abfrage verschlüsselte Ergebnisse mithilfe eines AWS-KMS-Schlüssels schreibt, stellen Sie Folgendes sicher:

Hier ein Beispiel für eine AWS-KMS-Schlüsselrichtlinie, die allen Benutzern unter der Konto-ID 1111222233334444 alle AWS-KMS-Aktionen ermöglicht:

{
  "Sid": "Enable IAM policies",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::1111222233334444:root"
   },
  "Action": "kms:*",
  "Resource": "*"
}

Achten Sie darauf, diese Richtlinie Ihrem Anwendungsfall entsprechend zu aktualisieren. Weitere Informationen finden Sie unter Schlüsselrichtlinien in AWS KMS und Berechtigungen für verschlüsselte Daten in Amazon S3.

Stellen Sie sicher, dass der S3-Bucket-Besitzer Zugriff auf Objekte hat

Standardmäßig gehört ein S3-Objekt dem AWS-Konto, das es hochgeladen hat. Dies gilt auch dann, wenn der Bucket einem anderen Konto gehört. Wenn andere Konten Objekte in Ihren Bucket hochladen können, überprüfen Sie das Konto, dem die Objekte gehören, auf die Ihre Benutzer nicht zugreifen können. Sie können den Objektbesitzer überprüfen, indem Sie den Befehl GetObjectAcl ausführen.

Wenn der Besitzer des S3-Buckets und der Objektbesitzer nicht derselbe sind, kann Ihnen der Objektbesitzer die volle Kontrolle über das Objekt gewähren. Der Objektbesitzer kann dies tun, indem er den Befehl PutObjectAcl mit dem Parameter bucket-owner-full-control ausführt. Um den Besitz am Objekt zu dem Konto zu übertragen, dem der S3-Bucket gehört, führen Sie vom Konto des Buckets aus den Befehl cp der AWS Command Line Interface (AWS CLI) aus, um das Objekt über sich selbst zu kopieren.

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

Weitere Informationen finden Sie unter Warum kann ich nicht auf ein Objekt zugreifen, das von einem anderen AWS-Konto in meinen Amazon S3-Bucket hochgeladen wurde?

Stellen Sie sicher, dass die AWS Glue-Datenkatalog-Richtlinie den Zugriff auf den IAM-Benutzer/die IAM-Rolle zulässt

Wenn Sie über eine bestehende AWS Glue-Datenkatalog-Richtlinie verfügen, stellen Sie sicher, dass die Richtlinie den Zugriff auf den IAM-Benutzer/die IAM-Rolle erlaubt. Wenn Sie beispielsweise die folgende Richtlinie in Ihrem Datenkatalog haben, wird dem IAM-Benutzer athena_user der Zugriff auf den Datenkatalog verweigert:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:user/athena_user"
        ]
      },
      "Effect": "Deny",
      "Action": [
        "glue:*"
      ],
      "Resource": [
        "arn:aws:glue:us-east-1:1111222233334444:*"
      ]
    }
  ]
}

Beispiele für Richtlinien finden Sie unter Beispiele für ressourcenbasierte Zugriffskontrollrichtlinien für AWS Glue.

Mit dieser Richtlinie im Datenkatalog schlagen die vom Benutzer ausgeführten Athena-Abfragen möglicherweise fehl und es wird der folgende Fehler angezeigt:

Insufficient permissions to execute the query. User: arn:aws:iam:: 1111222233334444:user/athena_user is not authorized to perform: glue:GetTable on resource: arn:aws:glue:us-east-1:1111222233334444:database/doc_example_database with an explicit deny Query Id: example_query_ID

Stellen Sie außerdem sicher, dass der IAM-Benutzer/die IAM-Rolle, der/die die Abfragen ausführt, über die erforderlichen Berechtigungen für den Zugriff auf die AWS Glue-Ressourcen verfügt. Eine vollständige Liste der erforderlichen AWS Glue-Berechtigungen finden Sie in der verwalteten AmazonAthenaFullAccess-Richtlinie. Stellen Sie sicher, dass die erforderlichen AWS Glue-Aktionen nicht durch die Datenkatalog-Ressourcenrichtlinie verweigert werden. Weitere Informationen finden Sie unter Detaillierter Zugriff auf Datenbanken und Tabellen im AWS Glue-Datenkatalog.


Ähnliche Informationen

Identitäts- und Zugangsmanagement in Athena

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr