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

Letzte Aktualisierung: 19.11.2021

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

Kurzbeschreibung

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

  • Bucket- und Objekt-Besitzer
  • Bucket-Richtlinie oder AWS Identity and Access Management (IAM) -Benutzerrichtlinien
  • Grenzen von IAM-Berechtigungen
  • Amazon S3 Einstellungen zur Sperrung des öffentlichen Zugriffs
  • Anmeldeinformationen für den Zugriff auf Amazon S3
  • Temporäre Anmeldeinformationen
  • Amazon Virtual Private Cloud (Amazon VPC) Endpunktrichtlinie
  • Amazon-S3-Zugriffspunktrichtlinie
  • Fehlendes Objekt oder Objekt mit Sonderzeichen
  • AWS Key Management Service (AWS KMS) Verschlüsselung
  • Zahlung durch den Anforderer für Bucket aktiviert
  • Service-Kontrollrichtlinien für 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.

Lösung

Bucket- und Objekt-Besitzer

Prüfen Sie bei AccessDenied-Fehlern aus GetObject- oder HeadObject-Anforderungen, ob das Objekt auch dem Bucket-Besitzer gehört. Prüfen Sie außerdem, ob der Bucket-Eigentümer über Lese- oder Vollzugriffskontrolllisten (ACL) verfügt.

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 AWS Command Line Interface (AWS CLI)-Befehl list-buckets aus, um die kanonische ID von Amazon S3 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, dem das Objekt gehört, 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 Befehl put-object-acl 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 Objektbesitzer in das Konto des Buckets zu ändern, führen Sie den Befehl cp vom Konto des Buckets aus, um das Objekt über sich selbst zu kopieren.

Um alle neuen Objekte in einen Bucket in einem anderen Konto zu kopieren, legen Sie eine Bucket-Richtlinie fest, die erfordert, dass Objekte mit der bucket-owner-full-control-ACL hochgeladen werden. Aktivieren und setzen Sie anschließend den Besitz von S3-Objekten auf den in der AWS-Managementkonsole bevorzugten Bucket-Eigentümer. Dadurch wird der Besitzer des Objekts automatisch in den Bucket-Eigentümer geändert, 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 Ihren Bucket. Erteilen Sie dann einem anderen AWS-Konto die Berechtigung, diese IAM-Rolle zu übernehmen. Weitere Informationen finden Sie im 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-Benutzerrichtlinien auf Anweisungen, die den Zugriff möglicherweise fälschlicherweise verweigern. Suchen Sie nach falschen Ablehnungsanweisungen, fehlenden Aktionen oder falschen Abständen in einer Richtlinie:

1.    Prüfen Sie Zugriffsverweigerungen auf Bedingungen, die basierend auf den folgenden Kriterien den Zugriff blockieren:
Multi-Faktor Authentifizierung (MFA)
Verschlüsselungsschlüssel
spezifische IP-Adresse
bestimmte VPCs oder VPC-Endpunkte
bestimmte IAM-Benutzer oder -Rollen

Stellen Sie sicher, dass die Anforderungen an Ihren Bucket alle Bedingungen in der Bucket-Richtlinie oder den IAM-Richtlinien erfüllen. Andernfalls wird Ihr Zugriff verweigert.

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) aus 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 oder falsche ARNs 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 Benutzer den Access-Denied-Fehler bei öffentlichen Leseanforderungen erhalten, die erlaubt sein sollten, überprüfen Sie die Amazon-S3-Block-Einstellungen für den öffentlichen Zugriff des Buckets. Überprüfen Sie die S3-Block-Einstellungen für den öffentlichen Zugriff sowohl auf Konto- als auch auf Bucket-Ebene. 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 sein, 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 Anmeldeinformationen zu überprüfen:

aws configure list

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

aws sts get-caller-identity

Temporäre Sicherheitsanmeldeinformationen

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

Wenn ein Administrator mithilfe des API-Aufrufs AssumeRole oder dem Befehl assume-role temporäre Sicherheitsanmeldeinformationen erstellt, kann er optional sitzungsspezifische Richtlinien übergeben. Die Berechtigungen für eine Sitzung sind der Schnittpunkt von Sitzungsrichtlinien und identitätsbasierten Richtlinien für die IAM-Entität (Benutzer oder Rolle), die zum Erstellen der Sitzung verwendet wird. Weitere Informationen zu Sitzungsrichtlinien finden Sie unter Richtlinientypen.

Um die Sitzungsrichtlinien zu finden, die mit den Fehlern „Zugriff verweigert“ 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. Vergewissern Sie sich, dass die zugehörige Richtlinie oder Richtlinie ARN die erforderlichen Amazon S3-Berechtigungen erteilt.

Das folgende Snippet eines CloudTrail-Protokolls zeigt beispielsweise, dass die temporären Anmeldeinformationen eine Inline-Sitzungsrichtlinie enthalten, die DOC-EXAMPLE-BUCKET S3:GetObject-Berechtigungen 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 Benutzer mit einer EC2-Instance auf Ihren Bucket zugreifen, die über einen VPC-Endpunkt geroutet wird, ü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.

Beispielsweise erlaubt die folgende VPC-Endpunktrichtlinie nur Zugriff auf DOC-EXAMPLE-BUCKET. 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-Zugangspunkt verwenden, um den Zugriff auf Ihren Bucket zu verwalten, überprüfen Sie die IAM-Richtlinie des Access Points. In einer Zugriffspunkt-Richtlinie erteilte Berechtigungen sind nur wirksam, wenn die zugrunde liegende Bucket-Richtlinie denselben Zugriff zulässt. Stellen Sie sicher, dass die Bucket-Richtlinie und die Zugriffspunktrichtlinie die richtigen Berechtigungen gewähren.

Fehlendes Objekt oder Objekt mit Sonderzeichen

Prüfen Sie, ob das angeforderte Objekt im Bucket vorhanden ist. Beachten Sie auch, dass ein Objekt, das ein Sonderzeichen hat (z. B. ein Leerzeichen), eine spezielle Handhabung erfordert, um das Objekt abzurufen. Andernfalls findet die Anforderung das Objekt nicht und Amazon S3 geht davon aus, dass das Objekt nicht vorhanden ist. Infolgedessen 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 AWS-CLI-Befehl head-object aus, um zu überprüfen, ob ein Objekt im Bucket existiert:

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 Konfigurationsanforderungen, um den Access-Denied-Fehler zu beheben.

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

AWS-KMS-Verschlüsselung

Beachten Sie Folgendes zur AWS KMS (SSE-KMS)-Verschlüsselung:

Zahlung durch den Anforderer für Bucket aktiviert

Wenn in Ihrem Bucket Zahlung durch den Anforderer aktiviert ist, müssen Benutzer anderer Konten den Parameter des Anforderungszahlers angeben, wenn sie Anfragen an Ihren Bucket senden. Andernfalls erhalten diese Benutzer einen Access-Denied-Fehler. Um zu überprüfen, ob „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 „Zahlung durch den Anforderer“:

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

Service-Kontrollrichtlinien für AWS Organizations

Wenn Sie AWS Organizations verwenden, überprüfen Sie die Service-Kontrollrichtlinien, um sicherzustellen, dass der Zugriff auf Amazon S3 erlaubt ist. Service-Kontrollrichtlinien legen die maximalen Berechtigungen für die betroffenen Konten fest. 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 Fakturierung oder technischen Support?