Aktivieren des Versioning für Buckets - Amazon Simple Storage Service

Aktivieren des Versioning für Buckets

Sie können Amazon-S3-Versioning nutzen, um mehrere Versionen eines Objekts in einem Bucket aufzubewahren. Dieser Abschnitt enthält Beispiele, wie Sie das Versioning für einen Bucket mithilfe der Konsole, der REST-API, AWS-SDKs und AWS Command Line Interface (AWS CLI) aktivieren können.

Anmerkung

Nach der erstmaligen Aktivierung der Versionsverwaltung für einen Bucket kann es bis zu 15 Minuten dauern, bis sich die Änderung vollständig im S3-System verbreitet. Während dieser Zeit können GET-Anfragen nach Objekten, die nach der Aktivierung der Versionsverwaltung erstellt oder aktualisiert wurden, zu Fehlern HTTP 404 NoSuchKey führen. Wir empfehlen, dass Sie nach dem Aktivieren der Versionsverwaltung 15 Minuten warten, bevor Sie Schreibvorgänge (PUT oder DELETE) für Objekte im Bucket ausführen. Diese Wartezeit trägt dazu bei, potenzielle Probleme mit der Sichtbarkeit von Objekten und der Versionsverfolgung zu vermeiden.

Weitere Informationen über das S3-Versioning finden Sie unter Beibehalten mehrerer Versionen von Objekten mit der S3-Versionsverwaltung. Informationen zum Arbeiten mit Objekten, die sich in einem versioning-fähigen Bucket befinden, finden Sie unter Arbeiten mit Objekten in einem versioning-fähigen Bucket.

Weitere Informationen zur Verwendung von S3 Versioning zum Schutz von Daten finden Sie im Tutorial: Schutz von Daten in Amazon S3 vor versehentlichem Löschen oder Anwendungsfehlern mithilfe von S3 Versioning, S3 Object Lock und S3 Replication.

Jedem von Ihnen erstellten S3-Bucket ist eine Versioning-Subressource zugeordnet. (Weitere Informationen finden Sie unter Konfigurationsoptionen für Allzweck-Buckets.) Standardmäßig ist Ihr Bucket nicht versioning-fähig, und dementsprechend speichert die Versioning-Subressource eine leere Versioning-Konfiguration wie folgt.

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> </VersioningConfiguration>

Um das Versioning zu aktivieren, können Sie eine Anfrage an Amazon S3 mit einer Versionskonfiguration senden, die einen Status enthält.

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Status>Enabled</Status> </VersioningConfiguration>

Um das Versioning auszusetzen, setzen Sie den Statuswert auf Suspended.

Der Bucket-Eigentümer und alle autorisierten Benutzer können das Versioning aktivieren. Der Bucket-Eigentümer ist das AWS-Konto, das den Bucket erstellt hat (das Root-Konto). Weitere Informationen zu Berechtigungen finden Sie unter Identitäts- und Zugriffsverwaltung für Amazon S3.

In den folgenden Abschnitten finden Sie weitere Informationen zum Aktivieren des S3-Versioning mithilfe der Konsole, AWS CLI und AWS-SDKs.

Befolgen Sie diese Schritte, um die AWS-Managementkonsole zu verwenden, um das Versioning auf einem S3-Bucket zu aktivieren.

Aktivieren und Deaktivieren der Versionsverwaltung für einen S3-Allzweck-Buckets
  1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon-S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie im linken Navigationsbereich Allzweck-Buckets aus.

  3. Wählen Sie in der Liste Buckets den Namen des Buckets aus, für den Sie die Versionsverwaltung aktivieren möchten.

  4. Wählen Sie Properties (Eigenschaften).

  5. Wählen Sie unter Bucket Versioning (Bucket-Versioning) die Option Edit (Bearbeiten).

  6. Wählen Sie Suspend (Anhalten) oder Enable (Aktivieren) und dann Save changes (Änderungen speichern).

Anmerkung

Sie können die AWS-Multi-Faktor-Authentifizierung (MFA) mit Versioning verwenden. Wenn Sie MFA mit Versioning verwenden, müssen Sie die Zugriffsschlüssel Ihres AWS-Konto und einen gültigen Code vom MFA-Gerät des Kontos angeben, um eine Objektversion dauerhaft zu löschen oder die Versioning zu unterbrechen oder zu reaktivieren.

Um MFA mit Versioning zu verwenden, aktivieren Sie MFA Delete. Sie können jedoch MFA Delete nicht mit der AWS-Managementkonsole aktivieren. Sie müssen die AWS Command Line Interface (AWS CLI) oder die API verwenden. Weitere Informationen finden Sie unter Konfigurieren von MFA Delete.

Im folgenden Beispiel wird die Versionsverwaltung auf einem allgemeinen S3-Allzweck-Buckets aktiviert.

aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled

Das folgende Beispiel ermöglicht das Löschen der S3-Versionsverwaltung und Multi-Faktor-Authentifizierung (MFA) für einen Bucket. Für physische MFA-Geräte übergeben Sie im --mfa Parameter eine Verkettung der Seriennummer des MFA-Geräts, ein Leerzeichen und den Wert, der auf Ihrem Authentifizierungsgerät angezeigt wird.

aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SerialNumber 123456"

Das folgende Beispiel ermöglicht das Löschen der S3-Versionsverwaltung und Multi-Faktor-Authentifizierung (MFA) für einen Bucket. Für virtuelle MFA-Geräte übergeben Sie im --mfa Parameter eine Verkettung des MFA-Geräte-ARN, ein Leerzeichen und den Wert, der auf Ihrem Authentifizierungsgerät angezeigt wird.

aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "arn:aws:iam::account-id:mfa/root-account-mfa-device 123789"
Anmerkung

Die Verwendung von MFA Delete erfordert ein genehmigtes physisches oder virtuelles Authentifizierungsgerät. Weitere Informationen zur Verwendung von MFA Delete in Amazon S3 finden Sie unter Konfigurieren von MFA Delete.

Weitere Informationen zum Aktivieren des Versioning mit der AWS CLI finden Sie unter put-bucket-versioning in der AWS CLI-Befehlsreferenz.

Die folgenden Beispiele ermöglichen das Versioning für einen Bucket und rufen dann den Versionsstatus mit dem AWS SDK für Java und dem AWS SDK für .NET ab. Informationen zur Verwendung anderer AWS-SDKs finden Sie im AWS-Entwicklerzentrum.

.NET

Informationen zum Einrichten und Ausführen der Codebeispiele finden Sie unter Erste Schritte mit dem AWS SDK für .NET im Entwicklerbuch für AWS SDK für .NET.

using System; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.docsamples { class BucketVersioningConfiguration { static string bucketName = "*** bucket name ***"; public static void Main(string[] args) { using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) { try { EnableVersioningOnBucket(client); string bucketVersioningStatus = RetrieveBucketVersioningConfiguration(client); } catch (AmazonS3Exception amazonS3Exception) { if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) { Console.WriteLine("Check the provided AWS Credentials."); Console.WriteLine( "To sign up for service, go to http://aws.amazon.com/s3"); } else { Console.WriteLine( "Error occurred. Message:'{0}' when listing objects", amazonS3Exception.Message); } } } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } static void EnableVersioningOnBucket(IAmazonS3 client) { PutBucketVersioningRequest request = new PutBucketVersioningRequest { BucketName = bucketName, VersioningConfig = new S3BucketVersioningConfig { Status = VersionStatus.Enabled } }; PutBucketVersioningResponse response = client.PutBucketVersioning(request); } static string RetrieveBucketVersioningConfiguration(IAmazonS3 client) { GetBucketVersioningRequest request = new GetBucketVersioningRequest { BucketName = bucketName }; GetBucketVersioningResponse response = client.GetBucketVersioning(request); return response.VersioningConfig.Status; } } }
Java

Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Erste Schritte im AWS SDK für Java-Entwicklerhandbuch.

import java.io.IOException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.AmazonS3Exception; import com.amazonaws.services.s3.model.BucketVersioningConfiguration; import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest; public class BucketVersioningConfigurationExample { public static String bucketName = "*** bucket name ***"; public static AmazonS3Client s3Client; public static void main(String[] args) throws IOException { s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); s3Client.setRegion(Region.getRegion(Regions.US_EAST_1)); try { // 1. Enable versioning on the bucket. BucketVersioningConfiguration configuration = new BucketVersioningConfiguration().withStatus("Enabled"); SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest = new SetBucketVersioningConfigurationRequest(bucketName,configuration); s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest); // 2. Get bucket versioning configuration information. BucketVersioningConfiguration conf = s3Client.getBucketVersioningConfiguration(bucketName); System.out.println("bucket versioning configuration status: " + conf.getStatus()); } catch (AmazonS3Exception amazonS3Exception) { System.out.format("An Amazon S3 error occurred. Exception: %s", amazonS3Exception.toString()); } catch (Exception ex) { System.out.format("Exception: %s", ex.toString()); } } }
Python

Das folgende Python-Beispiel erstellt einen Amazon-S3-Bucket, aktiviert ihn für das Versioning und konfiguriert einen Lebenszyklus, der nicht-aktuelle Objektversionen nach 7 Tagen ablaufen lässt.

def create_versioned_bucket(bucket_name, prefix): """ Creates an Amazon S3 bucket, enables it for versioning, and configures a lifecycle that expires noncurrent object versions after 7 days. Adding a lifecycle configuration to a versioned bucket is a best practice. It helps prevent objects in the bucket from accumulating a large number of noncurrent versions, which can slow down request performance. Usage is shown in the usage_demo_single_object function at the end of this module. :param bucket_name: The name of the bucket to create. :param prefix: Identifies which objects are automatically expired under the configured lifecycle rules. :return: The newly created bucket. """ try: bucket = s3.create_bucket( Bucket=bucket_name, CreateBucketConfiguration={ "LocationConstraint": s3.meta.client.meta.region_name }, ) logger.info("Created bucket %s.", bucket.name) except ClientError as error: if error.response["Error"]["Code"] == "BucketAlreadyOwnedByYou": logger.warning("Bucket %s already exists! Using it.", bucket_name) bucket = s3.Bucket(bucket_name) else: logger.exception("Couldn't create bucket %s.", bucket_name) raise try: bucket.Versioning().enable() logger.info("Enabled versioning on bucket %s.", bucket.name) except ClientError: logger.exception("Couldn't enable versioning on bucket %s.", bucket.name) raise try: expiration = 7 bucket.LifecycleConfiguration().put( LifecycleConfiguration={ "Rules": [ { "Status": "Enabled", "Prefix": prefix, "NoncurrentVersionExpiration": {"NoncurrentDays": expiration}, } ] } ) logger.info( "Configured lifecycle to expire noncurrent versions after %s days " "on bucket %s.", expiration, bucket.name, ) except ClientError as error: logger.warning( "Couldn't configure lifecycle on bucket %s because %s. " "Continuing anyway.", bucket.name, error, ) return bucket