Wie behebe ich 403-Access-Denied-Fehler bei Amazon S3?

Letzte Aktualisierung: 08.01.2021

Meine Benutzer versuchen, auf Objekte in meinem Amazon-Simple-Storage-Service-Bucket (Amazon S3) zuzugreifen, aber Amazon S3 gibt den Fehler „403 Access Denied“ (Zugriff verweigert) zurück. Wie kann ich dieses Problem beheben?

Kurzbeschreibung

Um Access-Denied-Fehler von Amazon S3 zu beheben, überprüfen Sie Folgendes:

  • Bucket- und Objekt-Besitzer
  • Bucket-Richtlinie oder AWS-Identity-and-Access-Management-Benutzerrichtlinien (IAM)
  • IAM-Berechtigungsgrenzen
  • Sperrung der öffentlichen Amazon-S3-Zugriffseinstellungen
  • Anmeldeinformationen für den Zugriff auf Amazon S3
  • Temporäre Sicherheitsanmeldeinformationen
  • Amazon-Virtual-Private-Cloud-Endpunktrichtlinie (Amazon VPC)
  • Amazon-S3-Zugriffspunktrichtlinie
  • Fehlendes Objekt oder Objekt mit einem Sonderzeichen
  • AWS-Key-Management-Service(AMS KMS)-Verschlüsselung
  • Zahlung durch den Anforderer für Bucket aktiviert
  • Service-Kontrollrichtlinie von AWS Organizations

Hinweis: Sie können auch das Automatisierungsdokument AWSSupport-TroubleshootS3PublicRead in AWS Systems Manager verwenden. Dieses Automatisierungsdokument hilft Ihnen bei der Diagnose von Problemen beim Lesen von Objekten aus einem von Ihnen angegebenen öffentlichen S3-Bucket.

Auflösung

Bucket- und Objekt-Besitzer

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, prüfen Sie, welchem Konto die Objekte gehören, auf die Ihre Benutzer nicht zugreifen können:

1.    Führen Sie den Befehl list-buckets in der AWS Command Line Interface (AWS-CLI) aus, um die kanonische Amazon-S3-ID für Ihr Konto abzurufen:

aws s3api list-buckets --query Owner.ID

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

2.    Führen Sie den Befehl list-objects aus, um die kanonische Amazon-S3-ID des Kontos abzurufen, das das Objekt besitzt, auf das Benutzer nicht zugreifen können:

aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix exampleprefix

Tipp: Sie können den list-objects-Befehl verwenden, um mehrere Objekte zu überprüfen.

3.    Wenn die kanonischen IDs nicht übereinstimmen, besitzen Sie (der Bucket-Eigentümer) das Objekt nicht. Der Objektbesitzer kann Ihnen die volle Kontrolle über das Objekt gewähren, indem er den put-object-acl-Befehl ausführt:

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg --acl bucket-owner-full-control

4.    Nachdem der Objektbesitzer die ACL des Objekts in bucket-owner-full-control geändert hat, kann der Bucket-Eigentümer auf das Objekt zugreifen. Die ACL-Änderung allein ändert jedoch nicht den Besitz des Objekts. Um den Objektinhaber in das Bucket-Konto zu ändern, führen Sie den cp-Befehl im Bucket-Konto aus, um das Objekt über sich selbst zu kopieren.

Wenn Sie alle neuen Objekte in einen Bucket in ein anderes Konto kopieren möchten, legen Sie eine Bucket-Richtlinie fest, die erfordert, dass Objekte mit der Bucket-Owner-Full-Control-ACL hochgeladen werden. Aktivieren Sie dann S3-Objekt-Ownership. Dadurch wird der Besitzer des Objekts automatisch zum Bucket-Besitzer, wenn das Objekt mit der Bucket-Owner-Full-Control-ACL hochgeladen wird.

Erstellen Sie für fortlaufende kontoübergreifende Berechtigungen eine IAM-Rolle in Ihrem Konto mit Berechtigungen für den Bucket. Erteilen Sie dann einem anderen AWS-Konto die Berechtigung, diese IAM-Rolle zu übernehmen. Weitere Informationen finden Sie unter Tutorial: Zugriff auf mehreren AWS-Konten mittels IAM-Rollen übertragen.

Bucket-Richtlinie oder IAM-Benutzerrichtlinien

Überprüfen Sie die Bucket-Richtlinie oder die zugehörigen IAM-Nutzerrichtlinien auf Aussagen, die möglicherweise den Zugriff fälschlicherweise verweigern. Suchen Sie nach falschen Ablehnungsanweisungen, fehlenden Aktionen oder falschen Abständen in einer Richtlinie:

1.    Überprüfen Sie die Zugriffsverweigerungs-Anweisungen auf Bedingungen, die den Zugriff basierend auf Multi-Faktor-Authentifizierung (MFA), Verschlüsselungsschlüsseln, einer bestimmten IP-Adresse oder einem bestimmten VPC-Endpunkt blockieren. Stellen Sie sicher, dass die Anforderungen an Ihren Bucket alle Bedingungen in der Bucket-Richtlinie oder den IAM-Richtlinien erfüllen. Andernfalls wird erwartet, dass der Zugriff verweigert wird.

Hinweis: Wenn Sie MFA benötigen und Benutzer Anfragen über die AWS-CLI senden, stellen Sie sicher, dass die Benutzer die AWS-CLI für die Verwendung von MFA konfigurieren .

In der folgenden Bucket-Richtlinie ermöglicht Statement1 beispielsweise den öffentlichen Zugriff auf das Herunterladen von Objekten (s3:GetObject) von DOC-EXAMPLE-BUCKET. Statement2 verweigert jedoch jedem ausdrücklich den Zugriff auf das Herunterladen von Objekten von DOC-EXAMPLE-BUCKET , es sei denn, die Anfrage stammt vom VPC-Endpunkt vpce-1a2b3c4d. In diesem Fall hat die Zugriffsverweigerungs-Anweisung Vorrang. Das bedeutet, dass Benutzern, die versuchen, Objekte von außerhalb von vpce-1a2b3c4d herunterzuladen, der Zugriff verweigert wird.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": "*"
    },
    {
      "Sid": "Statement2",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-1a2b3c4d"
        }
      },
      "Principal": "*"
    }
  ]
}

2.    Überprüfen Sie, ob die Bucket-Richtlinie oder die IAM-Richtlinien die Amazon-S3-Aktionen zulassen, die Ihre Benutzer benötigen. Die folgende Bucket-Richtlinie enthält beispielsweise keine Berechtigung für die Aktion s3:PutObjectAcl. Wenn der IAM-Benutzer versucht, die Zugriffskontrollliste (ACL) eines Objekts zu ändern, erhält der Benutzer einen Access-Denied-Fehler.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/Dave"
        ]
      }
    }
  ]
}

3.    Stellen Sie sicher, dass die Bucket-Richtlinie oder die IAM-Benutzerrichtlinien keine zusätzlichen Leerzeichen enthalten. Die folgende IAM-Richtlinie hat beispielsweise ein zusätzliches Leerzeichen im Amazon-Ressourcennamen (ARN) arn:aws:s3::: DOC-EXAMPLE-BUCKET/*. Aus Platzgründen wird die ARN fälschlicherweise als arn:aws:s3:::%20DOC-EXAMPLE-BUCKET/* ausgewertet. Dies bedeutet, dass der IAM-Benutzer keine Berechtigungen für die richtigen Objekte hat.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3::: DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Grenzen von IAM-Berechtigungen

Überprüfen Sie die IAM-Berechtigungsgrenzen, die für die IAM-Identitäten festgelegt sind, die versuchen, auf den Bucket zuzugreifen. Bestätigen Sie, dass die IAM-Berechtigungsgrenzen den Zugriff auf Amazon S3 zulassen.

Amazon S3 Einstellungen zur Sperrung des öffentlichen Zugriffs

Wenn Ihre Nutzer Access-Denied-Fehler bei öffentlichen Leseanfragen erhalten, die zugelassen werden sollten, überprüfen Sie die Amazon-S3-Einstellungen für die Sperrung des öffentlichen Zugriffs des Buckets. Diese Einstellungen können Berechtigungen außer Kraft setzen, die öffentlichen Lesezugriff ermöglichen. Die Sperrung des öffentlichen Amazon-S3-Zugriffs können auf einzelne Buckets oder AWS-Konten angewendet werden.

Anmeldeinformationen für den Zugriff auf Amazon S3

Überprüfen Sie die Anmeldeinformationen, die Ihre Benutzer für den Zugriff auf Amazon S3 konfiguriert haben. AWS-SDKs und die AWS-CLI müssen so konfiguriert werden, dass sie die Anmeldeinformationen des IAM-Benutzers oder der IAM-Rolle mit Zugriff auf Ihren Bucket verwenden.

Führen Sie für die AWS-CLI den Befehl configure aus, um die konfigurierten Zugangsdaten zu überprüfen:

aws configure list

Wenn Benutzer über eine Amazon-Elastic-Compute-Cloud-Instance (Amazon EC2) auf Ihren Bucket zugreifen, überprüfen Sie, ob die Instance die richtige Rolle verwendet. Stellen Sie eine Verbindung zur Instance her und führen Sie dann den get-caller-identity-Befehl aus:

aws sts get-caller-identity

Temporäre Anmeldeinformationen

Wenn Benutzer Access-Denied-Fehler von temporären Sicherheits-Anmeldeinformationen erhalten, die mit dem AWS Security Token Service (AWS STS) gewährt wurden, überprüfen Sie die zugehörige Richtlinie.

Wenn ein Administrator temporäre Sicherheits-Anmeldeinformationen mit dem AssumeRole-API-Aufruf oder dem Befehl accept-role erstellt, können sie optional sitzungsspezifische Richtlinien übergeben.

Um die Sitzungsrichtlinien zu finden, die mit den Access-Denied-Fehlern von Amazon S3 verknüpft sind, suchen Sie im AWS-CloudTrail-Ereignisverlauf nach AssumeRole-Ereignissen. Stellen Sie sicher, dass Sie nach AssumeRole-Ereignissen im selben Zeitrahmen wie die fehlgeschlagenen Anforderungen für den Zugriff auf Amazon S3 suchen. Überprüfen Sie dann das Feld requestParameters in den entsprechenden CloudTrail-Protokollen auf alle policy- oder PolicyArns-Parameter. Bestätigen Sie, dass die zugehörige Richtlinie oder der zugehörige Richtlinien-ARN die erforderlichen Amazon-S3-Berechtigungen gewährt.

Der folgende Ausschnitt eines CloudTrail-Protokolls zeigt beispielsweise, dass die temporären Anmeldeinformationen eine Inline-Sitzungsrichtlinie enthalten, die s3:GetObject Berechtigungen für DOC-EXAMPLE-BUCKET gewährt:

"requestParameters": {
        "roleArn": "arn:aws:iam::123412341234:role/S3AdminAccess",
        "roleSessionName": "s3rolesession",
        "policy": "{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n  {\n  \"Effect\": \"Allow\",\n           
         \"Action\": [\n   \"s3:GetObject\"\n ],\n    \"Resource\": [\n \"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*\"\n  ]\n   }  }\n    ]\n}\n"
    }

Amazon-VPC-Endpunktrichtlinie

Wenn Nutzer mit einer EC2-Instance, die über einen VPC-Endpunkt geleitet wird, auf Ihren Bucket zugreifen, überprüfen Sie die VPC-Endpunktrichtlinie. Stellen Sie sicher, dass die VPC-Endpunktrichtlinie die richtigen Berechtigungen für den Zugriff auf Ihre S3-Buckets und -Objekte enthält.

Die folgende VPC-Endpunktrichtlinie lässt beispielsweise nur den Zugriff auf DOC-EXAMPLE-BUCKET zu. Benutzer, die Anfragen über diesen VPC-Endpunkt senden, können auf keinen anderen Bucket zugreifen.

{
  "Id": "Policy1234567890123",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234567890123",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Principal": "*"
    }
  ]
}

Amazon-S3-Zugriffspunktrichtlinie

Wenn Sie einen Amazon-S3-Zugriffspunkt verwenden, um den Zugriff auf Ihren Bucket zu verwalten, überprüfen Sie die IAM-Richtlinie des Zugriffspunkts. Bestätigen Sie, dass die Richtlinie die richtigen Berechtigungen gewährt.

Fehlendes Objekt oder Objekt mit Sonderzeichen

Prüfen Sie, ob das angeforderte Objekt im Bucket vorhanden ist. Beachten Sie auch, dass ein Objekt mit einem Sonderzeichen (wie einem Leerzeichen) eine besondere Behandlung erfordert, um das Objekt abzurufen. Andernfalls findet die Anforderung das Objekt nicht und Amazon S3 geht davon aus, dass das Objekt nicht vorhanden ist. Als Ergebnis erhalten Sie einen Access-Denied-Fehler (anstelle von 404-Not-Found-Fehlern), wenn Sie nicht über die richtigen s3:ListBucket Berechtigungen verfügen.

Führen Sie den head-object-AWS-CLI-Befehl aus, um zu prüfen, ob ein Objekt im Bucket vorhanden ist:

aws s3api head-object --bucket DOC-EXAMPLE-BUCKET --key exampleobject.jpg

Wenn das Objekt im Bucket vorhanden ist, maskiert der Access-Denied-Fehler nicht den 404-Not-Found-Fehler. Überprüfen Sie andere Konfigurations-Anforderungen, um den Access-Denied-Fehler zu beheben.

Wenn sich das Objekt nicht im Bucket befindet, maskiert der Access-Denied-Fehler den 404-Not-Found-Fehler. Beheben Sie das Problem im Zusammenhang mit dem fehlenden Objekt.

AWS-KMS-Verschlüsselung

Wenn ein IAM-Benutzer nicht auf ein Objekt zugreifen kann, für das der Benutzer volle Berechtigungen hat, prüfen Sie, ob das Objekt von AWS-KMS verschlüsselt ist. Sie können die Amazon-S3-Konsole verwenden, um die Eigenschaften des Objekts anzuzeigen, einschließlich der Verschlüsselungsinformationen des Objekts.

Wenn das Objekt KMS-verschlüsselt ist, stellen Sie sicher, dass die KMS-Schlüsselrichtliniedem IAM-Benutzer Berechtigungen für die folgenden Aktionen gewährt:

"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
]

Wenn der IAM-Benutzer zu einem anderen Konto gehört als der AWS-KMS-Schlüssel, müssen diese Berechtigungen auch in der IAM-Richtlinie erteilt werden.

Zahlung durch den Anforderer für Bucket aktiviert

Wenn in Ihrem Bucket die Zahlung durch den Anforderer aktiviert ist, müssen Nutzer aus anderen Konten den Parameter request-payer angeben, wenn sie Anfragen an Ihren Bucket senden. Andernfalls erhalten diese Benutzer einen Access-Denied-Fehler. Um zu überprüfen, ob die Zahlung durch den Anforderer aktiviert ist, können Sie die Amazon-S3-Konsole verwenden, um die Eigenschaften Ihres Buckets anzuzeigen.

Der folgende AWS-CLI-Beispielbefehl enthält den richtigen Parameter für den Zugriff auf einen Bucket mit der Zahlung durch den Anforderer:

aws s3 cp exampleobject.jpg s3://DOC-EXAMPLE-BUCKET/exampleobject.jpg --request-payer requester

AWS-Organizations-Service-Kontrollrichtlinien

Wenn Sie AWS Organizations verwenden, überprüfen Sie die Service-Kontrollrichtlinien, um sicherzustellen, dass der Zugriff auf Amazon S3 erlaubt ist. Die folgende Richtlinie verweigert beispielsweise explizit den Zugriff auf Amazon S3 und führt zu einem Access-Denied-Fehler.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

Weitere Informationen zu den Funktionen von AWS Organizations finden Sie unter Aktivieren aller Funktionen in Ihrer Organisation.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Rechnungsstellung oder technischen Support?