Abilitazione della funzione Controllo delle versioni sui bucket - Amazon Simple Storage Service

Abilitazione della funzione Controllo delle versioni sui bucket

È possibile utilizzare la funzione Controllo delle versioni S3 per mantenere più versioni di un oggetto in un bucket. In questa sezione sono forniti esempi su come attivare il controllo della funzione su un bucket utilizzando la console, REST API, gli SDK AWS e la AWS Command Line Interface (AWS CLI).

Nota

Dopo aver abilitato il controllo delle versioni in un bucket per la prima volta, potrebbero essere necessari fino a 15 minuti per la propagazione completa della modifica nel sistema S3. Durante questo periodo, le richieste GET per oggetti creati o aggiornati dopo aver abilitato il controllo delle versioni possono causare errori HTTP 404 NoSuchKey. È consigliabile attendere 15 minuti dopo aver abilitato il controllo delle versioni prima di eseguire operazioni di scrittura (PUT o DELETE) sugli oggetti nel bucket. Questo periodo di attesa consente di evitare potenziali problemi con la visibilità degli oggetti e il controllo delle versioni.

Per ulteriori informazioni sulla funzione Controllo delle versioni S3, consulta Conservazione di più versioni degli oggetti con Controllo delle versioni S3. Per informazioni sull'utilizzo di oggetti che si trovano in bucket con la funzione Controllo delle versioni abilitata, consulta Utilizzo di oggetti in un bucket che supporta la funzione Controllo delle versioni.

Per ulteriori informazioni su come utilizzare la funzionalità S3 di controllo delle versioni per proteggere i dati, consulta Tutorial: Protezione dei dati su Amazon S3 da eliminazioni accidentali o bug delle applicazioni mediante le funzionalità S3 di controllo delle versioni, blocco degli oggetti e replica.

A ogni bucket S3 creato è associata una sottorisorsa per la funzione Controllo delle versioni. (Per ulteriori informazioni, consulta Opzioni di configurazione dei bucket per uso generico.) Per impostazione predefinita, il bucket è senza versione, di conseguenza la sottorisorsa per la funzione Controllo delle versioni archivia una configurazione vuota della funzione Controllo delle versioni.

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

Per abilitare la funzione Controllo delle versioni, è possibile inviare una richiesta ad Amazon S3 con una configurazione della funzione che include lo stato.

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

Per sospendere la funzione Controllo delle versioni, si imposterà il valore dello stato su Suspended.

Il proprietario del bucket e tutti gli utenti autorizzati possono abilitare il controllo delle versioni. Il proprietario del bucket è l'Account AWS che ha creato il bucket (l'account root). Per ulteriori informazioni sulle autorizzazioni, consultare Identity and Access Management per Amazon S3.

Nelle sezioni seguenti vengono forniti maggiori dettagli sull'abilitazione del controllo delle versioni S3 utilizzando la console, AWS CLI e gli SDK AWS.

Attieniti alla seguente procedura per utilizzare la Console di gestione AWS per abilitare il controllo delle versioni su un bucket S3.

Come abilitare o disabilitare il controllo delle versioni su un bucket per uso generico S3
  1. Accedi alla Console di gestione AWS e apri la console Amazon S3 all’indirizzo https://console.aws.amazon.com/s3/.

  2. Nel riquadro di navigazione sinistro, scegli Bucket per uso generico.

  3. Nell’elenco dei bucket scegli il nome del bucket per il quale desideri abilitare il controllo delle versioni.

  4. Scegliere Properties (Proprietà).

  5. In Bucket Versioning (Funzione Controllo delle versioni del bucket) scegliere Edit (Modifica).

  6. Scegliere Suspend (Sospendi) o Enable (Abilita), quindi scegliere Save changes (Salva modifiche).

Nota

Puoi utilizzare l'autenticazione a più fattori (Multi-Factor Authentication, MFA) AWS con il controllo delle versioni. Se utilizzi l'autenticazione MFA con il controllo delle versioni, è necessario fornire le chiavi di accesso del tuo Account AWS e un codice valido del dispositivo MFA dell'account per eliminare definitivamente una versione dell'oggetto o sospendere o riattivare il controllo delle versioni.

Per utilizzare l'autenticazione MFA con la funzione Controllo delle versioni, abilita MFA Delete. Non è possibile abilitare MFA Delete utilizzando la Console di gestione AWS. È necessario utilizzare la AWS Command Line Interface (AWS CLI) o l'API. Per ulteriori informazioni, consulta Configurazione dell'eliminazione di MFA.

L’esempio seguente abilita il controllo delle versioni su un bucket per uso generico S3.

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

L’esempio seguente abilita il controllo delle versioni S3 e l’eliminazione dell’autenticazione a più fattori (MFA) su un bucket per un dispositivo MFA fisico. Per i dispositivi MFA fisici, nel parametro --mfa, inserisci una concatenazione del numero di serie del dispositivo MFA, uno spazio e il valore visualizzato sul dispositivo di autenticazione.

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

L’esempio seguente abilita il controllo delle versioni S3 e l’eliminazione dell’autenticazione a più fattori (MFA) su un bucket per un dispositivo MFA virtuale. Per i dispositivi MFA virtuali, nel parametro --mfa, inserisci una concatenazione dell’ARN del dispositivo MFA, uno spazio e il valore visualizzato sul dispositivo di autenticazione.

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"
Nota

L'utilizzo dell'eliminazione di MFA richiede un dispositivo di autenticazione fisico o virtuale approvato. Per ulteriori informazioni sull'utilizzo dell'eliminazione di MFA in Amazon S3, consulta Configurazione dell'eliminazione di MFA.

Per ulteriori informazioni sull'abilitazione del controllo delle versioni utilizzando la AWS CLI, consulta put-bucket-versioning nel Riferimento ai comandi di AWS CLI.

Negli esempi seguenti viene abilitato il controllo delle versioni su un bucket e quindi ne viene recuperato lo stato utilizzando la AWS SDK per Java e la AWS SDK per .NET. Per informazioni sull'utilizzo di altri SDK AWS, consulta il Centro Developer di AWS.

.NET

Per informazioni sulla configurazione e l'esecuzione degli esempi di codice, consulta Nozioni di base sull'SDK AWS per .NET nella Guida per gli sviluppatori di SDK AWS per .NET.

using System; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.rproxy.govskope.ca.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

Per istruzioni su come creare e testare un campione funzionante, consulta Nozioni di base nella Guida per gli sviluppatori di AWS SDK per Java.

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

Nel seguente codice Python di esempio viene creato un bucket Amazon S3, viene abilitato per il controllo delle versioni e viene configurato un ciclo di vita che fa scadere le versioni degli oggetti non simultanee dopo 7 giorni.

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