在存储桶上启用版本控制 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

欢迎使用新的 Amazon S3 用户指南! Amazon S3 用户指南结合了以下三个已停用的指南中的信息和说明:Amazon S3 开发人员指南Amazon S3 控制台用户指南Amazon S3 入门指南

在存储桶上启用版本控制

您可以使用 S3 版本控制在一个存储桶中保留对象的多个版本。本部分提供了如何使用控制台、REST API、AWS 开发工具包和 AWS 命令行界面 (AWS CLI) 在存储桶上启用版本控制的示例。

有关 S3 版本控制的更多信息,请参阅在 S3 存储桶中使用版本控制。有关使用已启用版本控制的存储桶中的对象的信息,请参阅 使用启用版本控制的存储桶中的对象

您创建的每个 S3 存储桶都具有关联的 versioning 子资源。(有关更多信息,请参阅 存储桶配置选项。) 默认情况下,您的存储桶不受版本控制,且 versioning 子资源会存储空的版本控制配置,如下所示。

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

要启用版本控制,您可以向 Amazon S3 发送一个请求,在请求中指定包含状态的版本控制配置。

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

要暂停版本控制,请将状态值设置为 Suspended

存储桶拥有者和所有授权 IAM 用户都可以启用版本控制。存储桶拥有者是创建存储桶的 AWS 账户(根账户)。有关许可的更多信息,请参阅Amazon S3 中的 Identity and Access Management

以下部分提供了有关使用控制台、AWS CLI 和 AWS 开发工具包启用 S3 版本控制的更多详细信息。

请按照以下步骤使用 AWS 管理控制台在 S3 存储桶上启用版本控制。

在 S3 存储桶上启用或禁用版本控制

  1. 登录 AWS 管理控制台,并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Buckets (存储桶) 列表中,选择要为其启用版本控制的存储桶的名称。

  3. 选择属性

  4. Bucket Versioning (存储桶版本控制) 下,选择 Edit (编辑)

  5. 选择 Suspend (暂停)Enable (启用),然后选择 Save changes (保存更改)

注意

您可以将 AWS Multi-Factor Authentication (MFA) 与版本控制结合使用。将 MFA 与版本控制结合使用时,您必须提供 AWS 账户的访问密钥和账户 MFA 设备中的有效代码,才能永久删除对象版本或暂停或重新激活版本控制。

要将 MFA 与版本控制结合使用,请启用 MFA Delete。但是,您无法使用 AWS 管理控制台启用 MFA Delete。您必须使用 AWS 命令行界面 (AWS CLI) 或 API。有关更多信息,请参阅 配置 MFA 删除

以下示例在 S3 存储桶上启用版本控制。

aws s3api put-bucket-versioning --bucket DOC-EXAMPLE-BUCKET1 --versioning-configuration Status=Enabled

以下示例在存储桶上启用版本控制和 Multi-Factor Authentication (MFA) 删除。

aws s3api put-bucket-versioning --bucket DOC-EXAMPLE-BUCKET1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SERIAL 123456"
注意

使用 MFA 删除需要获得批准的物理或虚拟身份验证设备。有关在 Amazon S3 中使用 MFA 删除的更多信息,请参阅配置 MFA 删除

有关使用 AWS CLI 启用版本控制的更多信息,请参阅 AWS CLI 命令参考中的 put-bucket-versioning

以下示例在存储桶上启用版本控制,然后使用适用于 Java 的 AWS 开发工具包和适用于 .NET 的 AWS 开发工具包检索版本控制状态。有关使用其他 AWS 开发工具包的信息,请参阅 AWS 开发人员中心

Java

有关如何创建和测试有效示例的说明,请参阅 测试 Amazon S3 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()); } } }
.NET

有关如何创建和测试有效示例的信息,请参阅 运行 Amazon S3 .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; } } }