Wie behebe ich 403-Zugriff verweigert-Fehler von Amazon S3?

Lesedauer: 10 Minute
0

Meine Benutzer versuchen, auf Objekte in meinem Amazon-Simple-Storage-Service-Bucket (Amazon S3) zuzugreifen, aber Amazon S3 reagiert mit dem Fehler 403 Zugriff verweigert.

Lösung

AWS-Systems-Manager-Automatisierungsdokument verwenden

Verwenden Sie das Automatisierungsdokument AWSSupport-TroubleshootS3PublicRead im AWS Systems Manager. Dieses Automatisierungsdokument hilft Ihnen bei der Diagnose von Problemen beim Lesen von Objekten aus einem von Ihnen angegebenen öffentlichen S3-Bucket.

Bucket- und Objektbesitz überprüfen

Prüfen Sie bei AccessDenied-Fehlern von GetObject - oder HeadObject-Anfragen, ob das Objekt auch dem Bucket-Besitzer gehört. Überprüfen Sie außerdem, ob der Bucket-Besitzer über Lese- oder Vollzugriff auf die Zugriffskontrollliste (ACL) verfügt.

Bestätigen Sie das Konto, dem die Objekte gehören

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.

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

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

aws s3api list-buckets --query "Owner.ID"

2.    Führen Sie den Befehl list-objects aus, um die Amazon-S3-ID des Kontos abzurufen, dem das Objekt gehört, auf das Benutzer nicht zugreifen können. Ersetzen Sie DOC-EXAMPLE-BUCKET durch den Namen Ihres Buckets und exampleprefix durch Ihren Präfixwert.

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

**Tipp:**Verwenden Sie den Befehl list-objects, um mehrere Objekte zu überprüfen.

3.    Wenn die kanonischen IDs nicht übereinstimmen, gehört Ihnen das Objekt nicht. Der Objektbesitzer kann Ihnen die volle Kontrolle über das Objekt gewähren, indem er den Befehl put-object-acl ausführt. Ersetzen Sie DOC-EXAMPLE-BUCKET durch den Namen des Buckets, der die Objekte enthält. Ersetzen Sie exampleobject.jpg durch Ihren Schlüsselnamen.

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

4.    Nachdem der Objekteigentümer die ACL des Objekts in bucket-owner-full-control geändert hat, kann der Bucket-Besitzer auf das Objekt zugreifen. Die ACL-Änderung allein ändert jedoch nicht den Besitz des Objekts. Um den Objektbesitzer auf 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.

Kopiert alle neuen Objekte in einen Bucket in einem anderen Konto

1.    Legen Sie eine Bucket-Richtlinie fest, nach der Objekte mit der Bucket-Owner-Full-Control-ACL hochgeladen werden müssen.

2.    Aktivieren Sie S3 Object Ownership und legen Sie in der AWS-Managementkonsole den bevorzugten Bucket-Besitzer fest.

Der Besitzer des Objekts wird dann automatisch auf den Bucket-Besitzer aktualisiert, wenn das Objekt mit der Bucket-owner-full-control ACL hochgeladen wird.

Erstellen Sie eine IAM-Rolle mit Berechtigungen für Ihren Bucket

Für fortlaufende kontoübergreifende Berechtigungen erstellen Sie in Ihrem Konto eine IAM-Rolle mit Berechtigungen für Ihren Bucket. Erteilen Sie dann einem anderen AWS-Konto die Erlaubnis, diese IAM-Rolle zu übernehmen. Weitere Informationen finden Sie im Tutorial: Delegieren Sie mithilfe von IAM-Rollen den Zugriff auf mehrere AWS-Konten.

Bucket-Richtlinie oder IAM-Benutzerrichtlinien überprüfen

Überprüfen Sie die Bucket-Richtlinie oder die zugehörigen IAM-Benutzerrichtlinien auf Anweisungen, die möglicherweise den Zugriff verweigern. Stellen Sie sicher, dass die Anfragen an Ihren Bucket alle Bedingungen der Bucket-Richtlinie oder der IAM-Richtlinien erfüllen. Suchen Sie nach falschen Ablehnungsanweisungen, fehlenden Aktionen oder falschen Leerzeichen in einer Richtlinie.

Bedingungen für die Ablehnung einer Aussage

Überprüfen Sie die Ablehnungsanweisungen auf Bedingungen, die den Zugriff aus folgenden Gründen blockieren:

  • Multi-Faktor-Authentifizierung (MFA)
  • Verschlüsselungsschlüssel
  • spezifische IP-Adresse
  • spezifische VPCs oder VPC-Endpunkte
  • spezifische IAM-Benutzer oder -Rollen

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

Beispielsweise ermöglicht in der folgenden Bucket-Richtlinie Statement1 den öffentlichen Zugriff zum Herunterladen von Objekten (s3:GetObject) von DOC-EXAMPLE-BUCKET. Statement2 verweigert jedoch ausdrücklich allen Benutzern den Zugriff auf das Herunterladen von Objekten aus DOC-EXAMPLE-BUCKET, es sei denn, die Anfrage stammt vom VPC-Endpunkt vpce-1a2b3c4d. In diesem Fall hat die Ablehnungsanweisung 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": "*"
    }
  ]
}

Bucket-Richtlinien oder IAM-Richtlinien

Stellen Sie sicher, dass die Bucket-Richtlinie oder die IAM-Richtlinien die Amazon-S3-Aktionen zulassen, die Ihre Benutzer benötigen. Die folgende Bucket-Richtlinie beinhaltet beispielsweise keine Berechtigung für die Aktion s3:PutObjectAcl . Wenn der IAM-Benutzer versucht, die Zugriffskontrollliste (ACL) eines Objekts zu ändern, wird dem Benutzer der Fehler Zugriff verweigert angezeigt.

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

Andere Richtlinien-Fehler

Stellen Sie sicher, dass die Bucket-Richtlinie oder die IAM-Benutzerrichtlinien keine zusätzlichen Leerzeichen oder falschen ARNs enthalten.

Wenn eine IAM-Richtlinie beispielsweise ein zusätzliches Leerzeichen im Amazon-Ressourcennamen (ARN) wie folgt enthält: arn:aws:s3::: DOC-EXAMPLE-BUCKET/*. In diesem Fall wird der ARN dann fälschlicherweise als arn:aws:s3: ::%20DOC-EXAMPLE-BUCKET/ ausgewertet und gibt dem IAM-Benutzer den Fehler „Zugriff verweigert“ aus.

Bestätigen Sie, dass die IAM-Berechtigungsgrenzen den Zugriff auf Amazon S3 ermöglichen

Überprüfen Sie die IAM-Berechtigungsgrenzen , die für die IAM-Identitäten festgelegt sind, die versuchen, auf den Bucket zuzugreifen. Vergewissern Sie sich, dass die IAM-Berechtigungsgrenzen den Zugriff auf Amazon S3 ermöglichen.

Amazon-S3-Block-Public-Access-Einstellungen des Buckets überprüfen

Wenn Sie bei öffentlichen Leseanforderungen, die zulässig sind, die Fehlermeldung „Zugriff verweigert“ erhalten, überprüfen Sie die Amazon-S3-Block-Public-Access-Einstellungen des Buckets.

Überprüfen Sie die S3-Block-Public-Access-Einstellungen sowohl auf Konto- als auch auf Bucket-Ebene. Diese Einstellungen können Berechtigungen außer Kraft setzen, die öffentlichen Lesezugriff ermöglichen. Amazon S3 Block Public Access kann für einzelne Buckets oder AWS-Konten gelten.

Benutzeranmeldeinformationen überprüfen

Ü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 Befehlconfigure aus, um die konfigurierten Anmeldeinformationen zu überprüfen:

aws configure list

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

aws sts get-caller-identity

Temporäre Sicherheitsanmeldeinformationen überprüfen

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 AssumeRole API-Aufrufs oder des Befehlsassume-role temporäre Sicherheitsanmeldeinformationen erstellt, kann er sitzungsspezifische Richtlinien übergeben.

Um die Sitzungsrichtlinien zu finden, die mit den Access-Denied-Fehlern von Amazon S3 verknüpft sind, suchen Sie nach AssumeRole-Ereignissen imAWS-CloudTrail-Ereignisverlauf. Achten Sie darauf, im gleichen Zeitraum wie die fehlgeschlagenen Anforderungen für den Zugriff auf Amazon S3 nach AssumeRole-Ereignissen zu suchen. Überprüfen Sie dann das Feld requestParameters in den entsprechenden CloudTrail-Protokollen auf Richtlinien oder policyArns-Parameter. Vergewissern Sie sich, dass die zugehörige Richtlinie oder der Richtlinien-ARN die erforderlichen Amazon-S3-Berechtigungen erteilt.

Der folgende Ausschnitt 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": "{
	"Version": "2012-10-17",
	"Statement": [{
			"Effect": "Allow",
			"Action": [
				"s3:GetObject"
			],
			"Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"]
		}
	}
]
}
"
}

Vergewissern Sie sich, dass die Amazon-VPC-Endpunktrichtlinie die richtigen Berechtigungen für den Zugriff auf Ihre S3-Buckets und -Objekte enthält

Wenn Benutzer mit einer EC2-Instance, die über einen VPC-Endpunkt geleitet wird, auf Ihren Bucket zugreifen, überprüfen Sie die VPC-Endpunktrichtlinie.

Die folgende VPC-Endpunktrichtlinie ermöglicht beispielsweise den 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": "*"
    }
  ]
}

IAM-Richtlinie Ihres Amazon-S3-Zugriffspunkts überprüfen

Wenn Sie einen Amazon-S3-Zugriffspunkt verwenden, um den Zugriff auf Ihren Bucket zu verwalten, überprüfen Sie dieIAM-Richtlinie des Zugriffspunkts.

In einer Zugriffspunktrichtlinie erteilte Berechtigungen sind nur wirksam, wenn die zugrunde liegende Bucket-Richtlinie denselben Zugriff ebenfalls zulässt. Vergewissern Sie sich, dass die Bucket-Richtlinie und die Zugriffspunkt-Richtlinie die richtigen Berechtigungen gewähren.

Vergewissern Sie sich, dass dem Objekt kein Objekt fehlt oder dass es Sonderzeichen enthält

Prüfen Sie, ob das angeforderte Objekt im Bucket existiert. Andernfalls findet die Anfrage das Objekt nicht und Amazon S3 geht davon aus, dass das Objekt nicht existiert. Sie erhalten einen Fehler „Zugriff verweigert“ (anstelle der Fehler 404 Not Found), wenn Sie nicht über die richtigen s3:ListBucket-Berechtigungen verfügen.

Ein Objekt mit einem Sonderzeichen (z. B. einem Leerzeichen) erfordert eine besondere Behandlung, um das Objekt abzurufen.

Führen Sie den AWS-CLI-Befehl head-object aus, um zu überprüfen, ob ein Objekt im Bucket vorhanden ist. Ersetzen Sie DOC-EXAMPLE-BUCKET durch den Namen des Buckets, den Sie überprüfen möchten.

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

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

AWS-KMS-Verschlüsselungskonfiguration überprüfen

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

  • Wenn ein IAM-Benutzer nicht auf ein Objekt zugreifen kann, für das der Benutzer über vollständige Berechtigungen verfügt, überprüfen Sie, ob das Objekt durch SSE-KMS verschlüsselt ist. Sie können die Amazon-S3-Konsole verwenden, um die Eigenschaften des Objekts anzuzeigen, zu denen auch die serverseitigen Verschlüsselungsinformationen des Objekts gehören.
  • Wenn das Objekt SSE-KMS-verschlüsselt ist, stellen Sie sicher, dass die KMS-Schlüsselrichtlinie dem IAM-Benutzer die mindestens erforderlichenBerechtigungen für die Verwendung des Schlüssels gewährt. Wenn der IAM-Benutzer den Schlüssel beispielsweise nur zum Herunterladen eines S3-Objekts verwendet, muss der IAM-Benutzer über die kms:Decrypt-Berechtigungen verfügen. Weitere Informationen finden Sie unter Erlaubt den Zugriff auf das AWS-Konto und aktiviert IAM-Richtlinien.
  • Wenn sich die IAM-Identität und der Schlüssel im selben Konto befinden, sollten die kms:Decrypt-Berechtigungen mithilfe der Schlüsselrichtlinie erteilt werden. Die Schlüsselrichtlinie muss auf dieselbe IAM-Identität verweisen wie die IAM-Richtlinie.
  • Wenn der IAM-Benutzer einem anderen Konto als dem AWS-KMS-Schlüssel angehört, müssen diese Berechtigungen auch in der IAM-Richtlinie gewährt werden. Um beispielsweise die mit SSE-KMS verschlüsselten Objekte herunterzuladen, müssen die kms:Decrypt-Berechtigungen sowohl in der Schlüsselrichtlinie als auch in der IAM-Richtlinie angegeben werden. Weitere Informationen zum kontoübergreifenden Zugriff zwischen dem IAM-Benutzer und dem KMS-Schlüssel finden Sie unter Zulassen der Verwendung eines KMS-Schlüssels durch Benutzer in anderen Konten.

Vergewissern Sie sich, dass der request-payer-Parameter von Benutzern angegeben wurde (wenn Sie Zahlung durch den Anforderer verwenden)

Wenn in Ihrem Bucket Requester Pays aktiviert ist, müssen Benutzer anderer Konten den request-Payer-Parameter angeben, wenn sie Anfragen an Ihren Bucket senden. Um zu überprüfen, ob Requester Pays aktiviert ist, verwenden Sie die Amazon-S3-Konsole, um die Eigenschaften Ihres Buckets anzuzeigen.

Das folgende Beispiel für einen AWS-CLI-Befehl enthält den richtigen Parameter für den Zugriff auf einen kontoübergreifenden Bucket mit Requester Pays:

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

Service-Kontrollrichtlinie in AWS Organizations überprüfen

Wenn Sie AWS Organizationsverwenden, überprüfen Sie die Richtlinien zur Servicekontrolle, um sicherzustellen, dass der Zugriff auf Amazon S3 zulässig 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 Alle Funktionen in Ihrer Organisation aktivieren.

Weitere Informationen

Problembehandlung bei Amazon S3

Amazon-S3-Anforderungs-IDs für den AWS-Support abrufen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren