Überprüfen der Bucket-Eigentümerschaft mit Bucket-Eigentümer-Bedingung - Amazon Simple Storage Service

Ü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.

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:

  1. 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 an bea-data-test richtet.

  2. Bea stellt ihre Anwendung bereit, vergisst jedoch, die Anwendung neu zu konfigurieren, um einen Bucket in ihrem Produktions-AWS-Konto zu verwenden.

  3. 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 DOC-EXAMPLE-BUCKET1 hochgeladen, um sicherzustellen, dass sich DOC-EXAMPLE-BUCKET1 im Besitz des AWS-Konto 111122223333 befindet

AWS CLI
aws s3api put-object \ --bucket DOC-EXAMPLE-BUCKET1 --key exampleobject --body example_file.txt \ --expected-bucket-owner 111122223333
AWS SDK for Java 2.x
public void putObjectExample() { S3Client s3Client = S3Client.create();; PutObjectRequest request = PutObjectRequest.builder() .bucket("DOC-EXAMPLE-BUCKET1") .key("exampleobject") .expectedBucketOwner("111122223333") .build(); Path path = Paths.get("example_file.txt"); s3Client.putObject(request, path); }

Beispiel: Kopieren eines Objekts

Im folgenden Beispiel wird das Objekt object1 vom S3-Bucket DOC-EXAMPLE-BUCKET1 in den S3-Bucket DOC-EXAMPLE-BUCKET2 kopiert. Dabei wird die Bucket-Eigentümer-Bedingung verwendet, um sicherzustellen, dass die Buckets den erwarteten Konten gemäß der folgenden Tabelle gehören.

Bucket Erwarteter Eigentümer
DOC-EXAMPLE-BUCKET1 111122223333
DOC-EXAMPLE-BUCKET2 444455556666
AWS CLI
aws s3api copy-object --copy-source DOC-EXAMPLE-BUCKET1/object1 \ --bucket DOC-EXAMPLE-BUCKET2 --key object1copy \ --expected-source-bucket-owner 111122223333 --expected-bucket-owner 444455556666
AWS SDK for Java 2.x
public void copyObjectExample() { S3Client s3Client = S3Client.create(); CopyObjectRequest request = CopyObjectRequest.builder() .copySource("DOC-EXAMPLE-BUCKET1/object1") .destinationBucket("DOC-EXAMPLE-BUCKET2") .destinationKey("object1copy") .expectedSourceBucketOwner("111122223333") .expectedBucketOwner("444455556666") .build(); s3Client.copyObject(request); }

Beispiel: Abrufen einer Bucket-Richtlinie

Im folgenden Beispiel wird die Zugriffsrichtlinie für S3-Bucket DOC-EXAMPLE-BUCKET1 abgerufen, wobei die Bucket-Eigentümerbedingung verwendet wird, um sicherzustellen, dass DOC-EXAMPLE-BUCKET1 dem AWS-Konto 111122223333 gehört.

AWS CLI
aws s3api get-bucket-policy --bucket DOC-EXAMPLE-BUCKET1 --expected-bucket-owner 111122223333
AWS SDK for Java 2.x
public void getBucketPolicyExample() { S3Client s3Client = S3Client.create(); GetBucketPolicyRequest request = GetBucketPolicyRequest.builder() .bucket("DOC-EXAMPLE-BUCKET1") .expectedBucketOwner("111122223333") .build(); try { GetBucketPolicyResponse response = s3Client.getBucketPolicy(request); } catch (S3Exception e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } }

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.