Wie behebe ich die Berechtigungsfehler „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

Abfragefehler vom Typ Zugriff verweigert beziehen sich in der Regel auf Berechtigungsprobleme mit anderen AWS-Services oder AWS-Konten, mit denen Athena interagiert. Zu den Services, mit denen Athena häufig interagiert, gehören AWS Identity and Access Management (IAM), Amazon Simple Storage Service (Amazon S3) und AWS Key Management Service (AWS KMS).

Die folgenden Gründe können zu einem Fehler Zugriff verweigert führen:

  • Die AWS Glue-Datenkatalog-Richtlinie erlaubt dem IAM-Entität (Benutzer oder Rolle) keinen Zugriff.
  • Die IAM-Entität hat keine Berechtigungen, den S3-Quelldaten-Bucket zu lesen oder die Ergebnisse in den Abfrageergebnis-Bucket zu schreiben.
  • Die S3-Bucket-Richtlinien lassen die erforderlichen Berechtigungen für die IAM-Entität nicht zu, wenn sich die Athena-Tabelle und die Buckets in unterschiedlichen Konten befinden.
  • Der Objektbesitzer unterscheidet sich vom Amazon S3-Bucket-Besitzer.
  • Sie haben keinen Zugriff auf den Schlüssel den AWS-KWS-Schlüssel, der zum Lesen oder Schreiben der verschlüsselten Daten verwendet wird.

Behebung

Bestätigen Sie die folgenden Berechtigungen für Ihren Anwendungsfall, um den Fehler Zugriff verweigert zu beheben. Weitere Informationen finden Sie unter Problembehandlung in Athena.

**Hinweis:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Troubleshoot AWS CLI errors. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Stellen Sie sicher, dass die Glue Data Catalog-Richtlinie den Zugriff auf die IAM-Entität zulässt

Wenn Sie eine Glue Data Catalog-Richtlinie verwenden, stellen Sie sicher, dass die Richtlinie den Zugriff auf die IAM-Entität ermöglicht. 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 Richtlinien für AWS Glue.

Wenn die vorherige Richtlinie im Datenkatalog enthalten ist, schlagen die Athena-Abfragen, die der Benutzer ausführt, möglicherweise fehl und es wird die folgende Fehlermeldung angezeigt:

„Ungenügende Berechtigungen zum Ausführen der Abfrage. Benutzer: arn:aws:iam: 1111222233334444:user/athena\ _user ist nicht berechtigt, Folgendes auszuführen: glue:getTable on resource: arn:aws:glue:us-east- 1:1111222233334444:database/doc\ _example\ _database mit einer expliziten Abfragenummer: example\ _query\ _ID“

Stellen Sie sicher, dass die IAM-Entität, 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 unter Von AWS verwaltete Richtlinien: AmazonAthenaFullAccess.

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.

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

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

„Ihre Anfrage hat die folgenden Fehler:com.amazonaws.services.s3.model.amazons3Exception: Zugriff verweigert (Dienst: Amazon S3; Statuscode: 403; Fehlercode: Zugriff verweigert; Anforderungs-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:

„Ihre Abfrage hat die folgenden Fehler: Zugriff verweigert, wenn die Ausgabe in die URL geschrieben wurde: s3://my-athena-result-bucket/Unsaved/2021/05/07/example_query_ID.csv. Bitte stellen Sie sicher, dass Sie auf den S3-Bucket zugreifen dürfen. Wenn Sie Abfrageergebnisse mit einem KMS-Schlüssel verschlüsseln, stellen Sie bitte sicher, dass Sie auf Ihren KMS-Schlüssel zugreifen dürfen“

Der IAM-Benutzer, der die Abfragen ausführt, benötigt Zugriff auf den Quelldaten-Bucket und den Abfrageergebnis-Bucket. Um der IAM-Entität die erforderlichen Berechtigungen zu gewähren, fügen Sie der IAM-Entität eine IAM-Richtlinie hinzu.

Beispiel für eine IAM-Richtlinie:

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

Ersetzen Sie in der vorherigen Richtlinie die folgenden Variablen:

  • 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

Wenn sich Ihre Athena-Tabelle und Ihre S3-Buckets im selben Konto befinden, müssen Sie keine S3-Bucket-Richtlinien anhängen. Wenn Sie jedoch bereits eine Bucket-Richtlinie angehängt haben, überprüfen Sie, ob sie der IAM-Entität, die die Daten abfragt, S3-Berechtigungen gewährt.

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.

Fügen Sie dem Konto, das den S3-Bucket hat, eine S3-Bucket-Richtlinie hinzu, die dem athena\ _user im anderen Konto Zugriff gewährt. Die folgende Beispielrichtlinie ermöglicht einem IAM-Benutzer von Konto A 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/*"
      ]
    }
  ]
}

Ersetzen Sie in der vorherigen Beispielrichtlinie die folgenden Variablen:

  • my-athena-source-bucket durch den Namen Ihres Quelldaten-Buckets
  • my-athena-source-bucket/data/ durch den Speicherort der Quelldaten
  • 1111222233334444 mit der ID für das IAM-Benutzerkonto (Konto A)
  • athena_user durch den Namen des IAM-Benutzers (Konto A)

Um allen Benutzern des anderen Kontos Zugriff auf den Bucket zu gewähren, ersetzen Sie den Prinzipal-Schlüssel durch einen Schlüssel, der root angibt („arn:aws:iam: :1111222233334444:root“).

Hinweis: Diese vorherige 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 unter Kontoübergreifender Zugriff auf Bucket-Objekte.

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 Fehler 403 Access Denied in Amazon S3?

Aktualisieren Sie Ihre AWS-KMS-Schlüsselrichtlinie

Wenn Ihre Quelldaten verschlüsselt sind oder Ihre Athena-Abfrage einen AWS-KMS-Schlüssel verwendet, um verschlüsselte Ergebnisse zu schreiben, bestätigen Sie die folgenden Berechtigungen:

  • Die IAM-Benutzerrichtlinie erlaubt die erforderlichen AWS KMS-Aktionen.
  • Die AWS-KMS-Schlüssel-Richtlinie erlaubt dem Benutzer den Zugriff.

Das folgende Beispiel für eine AWS-KMS-Schlüsselrichtlinie ermöglicht allen Benutzern im Konto 1111222233334444 alle AWS KMS-Aktionen:

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

Hinweis: Ersetzen Sie in der vorherigen Richtlinie die Beispielvariablen durch Ihre Variablen.

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 besitzt das Konto, das ein S3-Objekt in einen Bucket hochlädt, das Objekt. Dies gilt auch dann, wenn ein anderes Konto den Bucket besitzt. Wenn Benutzer in anderen 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. Führen Sie den Befehl GetObjectAcl aus, um den Objekteigentümer zu überprüfen.

Wenn der Besitzer des S3-Buckets und der Objektbesitzer nicht derselbe sind, kann Ihnen der Objektbesitzer die volle Kontrolle über das Objekt gewähren. Dazu führt der Objektbesitzer den Befehl PutObjectAcl mit dem Parameter bucket-owner-full-control aus.

Um den Besitz des Objekts auf das Konto zu ändern, dem der S3-Bucket gehört, führen Sie den AWS-CLI-Befehl cp aus. Stellen Sie sicher, dass Sie den Befehl cp vom Konto des Buckets aus ausführen, um das Objekt über sich selbst zu kopieren.

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?

Ähnliche Informationen

Identitäts- und Zugangsmanagement in Athena

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 10 Monaten