Überprüfen der Bucket-Eigentümerschaft mit Bucket-Eigentümer-Bedingung
Die Bedingung des Amazon-S3-Bucket-Eigentümers stellt sicher, dass die Buckets, die Sie in Ihren S3-Vorgängen verwenden, zu den von Ihnen erwarteten AWS-Konten gehören.
Die meisten S3-Vorgänge lesen oder schreiben in bestimmte S3-Buckets. Zu diesen Vorgängen gehören das Hochladen, Kopieren und Herunterladen von Objekten, das Abrufen oder Ändern von Bucket-Konfigurationen und das Abrufen oder Ändern von Objektkonfigurationen. Wenn Sie diese Vorgänge ausführen, geben Sie den Bucket an, den Sie verwenden möchten, indem Sie seinen Namen in die Anforderung einbeziehen. Um beispielsweise ein Objekt aus S3 abzurufen, stellen Sie eine Anforderung, die den Namen eines Buckets und den Objektschlüssel angibt, der aus diesem Bucket abgerufen werden soll.
Da Amazon S3 Buckets anhand ihrer Namen identifiziert, könnte eine Anwendung, die einen falschen Bucket-Namen in einer Anforderung verwendet, versehentlich Vorgänge gegen einen anderen Bucket als erwartet ausführen. Um unbeabsichtigte Bucket-Interaktionen in solchen Situationen zu vermeiden, können Sie die Bucket-Eigentümer-Bedingung verwenden. Die Bucket-Eigentümer-Bedingung ermöglicht es Ihnen, zu überprüfen, ob der Ziel-Bucket im Besitz des erwarteten AWS-Konto ist, und bietet eine zusätzliche Gewissheit dafür, dass Ihre S3-Vorgänge die von Ihnen beabsichtigten Auswirkungen haben.
Themen
Wann die Bucket-Eigentümer-Bedingung verwendet werden sollte
Wir empfehlen, die Bucket-Eigentümer-Bedingung zu verwenden, wenn Sie einen unterstützten S3-Vorgang ausführen und die Konto-ID des erwarteten Bucket-Eigentümers kennen. Die Bucket-Eigentümer-Bedingung ist für alle S3-Objekt-Vorgänge und die meisten S3-Bucketvorgänge verfügbar. Eine Liste der S3-Vorgänge, die die Bucket-Eigentümerbedingung nicht unterstützen, finden Sie unter Beschränkungen und Einschränkungen.
Um die Vorteile der Verwendung der Bucket-Eigentümerbedingung zu nutzen, sollten Sie das folgende Szenario berücksichtigen, das AWS-Kundin Bea betrifft:
-
Bea entwickelt eine Anwendung, die Amazon S3 verwendet. Während der Entwicklung verwendet Bea ihr Test-AWS-Konto, um einen Bucket namens
bea-data-test
zu erstellen, und konfiguriert ihre Anwendung so, dass sie Anforderungen anbea-data-test
richtet. -
Bea stellt ihre Anwendung bereit, vergisst jedoch, die Anwendung neu zu konfigurieren, um einen Bucket in ihrem Produktions-AWS-Konto zu verwenden.
-
In der Produktion stellt Beas Anwendung Anforderungen an
bea-data-test
, die erfolgreich sind. Dies führt dazu, dass Produktionsdaten in den Bucket im Testkonto von Bea geschrieben werden.
Bea kann sich vor solchen Situationen schützen, indem sie die Bucket-Eigentümer-Bedingung verwendet. Mit der Bucket-Eigentümer-Bedingung kann Bea die AWS-Konto-ID des erwarteten Bucket-Eigentümers in ihre Anforderungen aufnehmen. Amazon S3 überprüft dann die Konto-ID des Bucket-Eigentümers, bevor es eine Anforderung bearbeitet. Wenn der tatsächliche Bucket-Eigentümer nicht mit dem erwarteten Bucket-Eigentümer übereinstimmt, schlägt die Anforderung fehl.
Wenn Bea die Bucket-Eigentümer-Bedingung verwendet, führt das zuvor beschriebene Szenario nicht dazu, dass die Anwendung von Bea versehentlich in einen Test-Bucket schreibt. Stattdessen schlagen die Anforderungen, die ihre Anwendung in Schritt 3 stellt, mit einer Fehlermeldung Access Denied
fehl. Durch die Verwendung der Bucket-Eigentümer-Bedingung trägt Bea dazu bei, das Risiko einer versehentlichen Interaktion mit Buckets im falschen AWS-Konto zu eliminieren.
Verifizieren eines Bucket-Eigentümers
Um die Bucket-Eigentümer-Bedingung zu verwenden, schließen Sie in ihre Anforderung einen Parameter ein, der den erwarteten Bucket-Eigentümer angibt. Die meisten S3-Vorgänge betreffen nur einen einzelnen Bucket und erfordern nur diesen einzelnen Parameter, um die Bucket-Eigentümer-Bedingung zu verwenden. Für CopyObject
-Vorgänge gibt dieser erste Parameter den erwarteten Eigentümer des Ziel-Buckets an, und Sie schließen einen zweiten Parameter ein, um den erwarteten Eigentümer des Quell-Buckets anzugeben.
Wenn Sie eine Anforderung stellen, die einen Bucket-Eigentümer-Bedingungsparameter enthält, überprüft S3 vor der Verarbeitung der Anforderung die Konto-ID des Bucket-Eigentümers mit dem angegebenen Parameter. Wenn der Parameter mit der Konto-ID des Bucket-Eigentümers übereinstimmt, verarbeitet S3 die Anforderung. Wenn der Parameter nicht mit der Konto-ID des Bucket-Eigentümers übereinstimmt, schlägt die Anforderung mit einer Fehlermeldung Access Denied
fehl.
Sie können die Bucket-Eigentümer-Bedingung mit der AWS Command Line Interface-Befehlszeilenschnittstelle (AWS CLI- CLI), den AWS-SDKs und den Amazon-S3-REST-APIs verwenden. Wenn Sie die Bucket-Eigentümer-Bedingung mit der AWS CLI und den Amazon-S3-REST-APIs verwenden, verwenden Sie die folgenden Parameternamen.
Zugriffsmethode | Parameter für Nicht-Kopiervorgänge | Quellparameter für Kopiervorgang | Zielparameter für Kopiervorgang |
---|---|---|---|
AWS CLI | --expected-bucket-owner |
--expected-source-bucket-owner |
--expected-bucket-owner |
Amazon-S3-REST-APIs | x-amz-expected-bucket-owner -Header |
x-amz-source-expected-bucket-owner -Header |
x-amz-expected-bucket-owner -Header |
Die Parameternamen, die erforderlich sind, um die Bucket-Eigentümerbedingung mit den AWS-SDKs zu verwenden, variieren je nach Sprache. Informationen zum Ermitteln der erforderlichen Parameter finden Sie in der SDK-Dokumentation für Ihre gewünschte Sprache. Die SDK-Dokumentation finden Sie unter Erstellungstools auf AWS
Beispiele
Die folgenden Beispiele zeigen, wie Sie die Bucket-Eigentümer-Bedingung in Amazon S3 mithilfe der AWS CLI oder des AWS SDK for Java 2.x implementieren können.
Beispiel: Ein Objekt hochladen
Im folgenden Beispiel wird ein Objekt unter Verwendung der Bucket-Eigentümer-Bedingung in S3-Bucket
hochgeladen, um sicherzustellen, dass sich DOC-EXAMPLE-BUCKET1
im Besitz des AWS-Konto DOC-EXAMPLE-BUCKET1
111122223333
befindet
Beispiel: Kopieren eines Objekts
Im folgenden Beispiel wird das Objekt object1
vom S3-Bucket
in den S3-Bucket DOC-EXAMPLE-BUCKET1
kopiert. Dabei wird die Bucket-Eigentümer-Bedingung verwendet, um sicherzustellen, dass die Buckets den erwarteten Konten gemäß der folgenden Tabelle gehören. DOC-EXAMPLE-BUCKET2
Bucket | Erwarteter Eigentümer |
---|---|
|
111122223333 |
|
444455556666 |
Beispiel: Abrufen einer Bucket-Richtlinie
Im folgenden Beispiel wird die Zugriffsrichtlinie für S3-Bucket
abgerufen, wobei die Bucket-Eigentümerbedingung verwendet wird, um sicherzustellen, dass DOC-EXAMPLE-BUCKET1
dem AWS-Konto DOC-EXAMPLE-BUCKET1
111122223333
gehört.
Beschränkungen und Einschränkungen
Die Amazon-S3-Bucket-Eigentümer-Bedingung hat die folgenden Einschränkungen und Grenzen:
-
Der Wert des Bucket-Eigentümer-Bedingungsparameters muss eine AWS-Konto-ID (12-stellige alphanumerische Zeichenfolge) sein. Service-Prinzipale werden nicht unterstützt.
-
Die Bucket-Eigentümer-Bedingung ist für CreateBucket, ListBuckets oder einen der in AWS S3 Control enthaltenen Vorgänge nicht verfügbar. Amazon S3 ignoriert alle Bucket-Eigentümer-Bedingungsparameter, die in Anfragen für diese Vorgänge enthalten sind
-
Die Bucket-Eigentümer-Bedingung überprüft nur, dass das im Verifizierungsparameter angegebene Konto den Bucket besitzt. Die Bucket-Eigentümer-Bedingung überprüft nicht die Konfiguration des Buckets. Sie garantiert auch nicht, dass die Konfiguration des Buckets bestimmte Bedingungen erfüllt oder mit einem früheren Zustand übereinstimmt.