버킷에 버전 관리 사용 설정 - Amazon Simple Storage Service

버킷에 버전 관리 사용 설정

S3 버전 관리를 사용하면 한 버킷 내에 여러 개의 객체 버전을 유지할 수 있습니다. 이 섹션에서는 콘솔, REST API, AWS SDK 및 AWS Command Line Interface(AWS CLI)를 사용하여 버킷의 버전 관리를 사용하는 방법에 대한 예를 제공합니다.

참고

버킷에서 버전 관리를 처음으로 활성화하면 변경 사항이 완전히 전파되는 데 최대 15분이 걸릴 수 있습니다. 버전 관리를 사용 설정하고 나서 15분 정도 기다린 후, 버킷의 객체에 대해 쓰기 작업(PUT 또는 DELETE)을 실행하는 것이 좋습니다. 이 변환이 완료되기 전에 실행된 쓰기 작업은 버전이 지정되지 않은 객체에 적용될 수 있습니다.

S3 버전 관리에 대한 자세한 내용은 S3 버전 관리로 여러 버전의 객체 유지 섹션을 참조하세요. 버전 관리가 사용 설정된 버킷의 객체 작업에 대한 자세한 내용은 버전 관리가 사용 설정된 버킷의 객체 작업 섹션을 참조하세요.

S3 버전 관리를 사용하여 데이터를 보호하는 방법에 대한 자세한 내용은 Tutorial: Protecting data on Amazon S3 against accidental deletion or application bugs using S3 Versioning, S3 Object Lock, and S3 Replication(자습서: S3 버전 관리, S3 객체 잠금, S3 복제를 사용하여 우발적인 삭제나 애플리케이션 버그로부터 Amazon S3의 데이터 보호)을 참조하세요.

생성한 각 S3 버킷에는 버전 관리 하위 리소스가 연결되어 있습니다. (자세한 내용은 버킷 구성 옵션 섹션을 참조하세요.) 기본적으로 버킷은 버전 관리 미사용 상태이며, 버전 관리 하위 리소스는 다음과 같이 빈 버전 관리 구성을 저장합니다.

<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로 설정합니다.

버킷 소유자 및 모든 승인된 사용자는 버전 관리를 사용 설정할 수 있습니다. 버킷 소유자는 버킷을 생성한 AWS 계정(루트 계정)입니다. 권한에 대한 자세한 내용은 Amazon S3의 ID 및 액세스 관리 섹션을 참조하세요.

다음 섹션에서는 콘솔, AWS CLI 및 AWS SDK를 사용하여 S3 버전 관리를 사용하는 방법에 대해 자세히 설명합니다.

다음 단계에 따라 AWS Management Console을 사용하여 S3 버킷의 버전 관리를 사용합니다.

S3 버킷의 버전 관리 사용 설정 또는 사용 중지
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 목록에서 버전 관리를 사용 설정하려는 버킷의 이름을 선택합니다.

  3. 속성을 선택합니다.

  4. 버킷 버전 관리(Bucket Versioning)에서 편집을 선택합니다.

  5. 일시 중지 또는 사용 설정를 선택한 다음 변경 사항 저장을 선택합니다.

참고

버전 관리에 AWS 멀티 팩터 인증(MFA)을 사용할 수 있습니다. 버전 관리에 MFA를 사용하는 경우 객체 버전을 영구적으로 삭제하거나 버전 관리를 일시 중지 또는 다시 사용하려면 계정의 MFA 디바이스에서 유효한 코드와 AWS 계정의 액세스 키를 제공해야 합니다.

버전 관리에 MFA를 사용하려면 MFA Delete를 사용 설정합니다. 그러나 AWS Management Console을 사용하여 MFA Delete를 사용할 수 없습니다. AWS Command Line Interface(AWS CLI) 또는 API를 사용해야 합니다. 자세한 내용은 MFA Delete 구성 섹션을 참조하세요.

다음 예제에서는 S3 버킷의 버전 관리를 사용 설정합니다.

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

다음 예에서는 버킷에서 S3 버전 관리 및 다중 인증(MFA) 삭제를 활성화합니다.

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

MFA Delete를 사용하려면 승인된 물리적 또는 가상 인증 디바이스가 필요합니다. Amazon S3에서 MFA Delete 사용에 대한 자세한 내용은 MFA Delete 구성 섹션을 참조하세요.

AWS CLI를 사용하여 버전 관리를 사용하는 방법에 대한 자세한 내용은 AWS CLI 명령 참조put-bucket-versioning을 참조하세요.

다음 예제에서는 버킷의 버전 관리를 사용한 다음 AWS SDK for Java 및 AWS SDK for .NET을 사용하여 버전 관리 상태를 검색합니다. 다른 AWS SDK 사용에 대한 자세한 내용은 AWS 개발자 센터를 참조하세요.

.NET

코드 예제 설정 및 실행에 대한 자세한 내용은 AWS SDK for .NET 개발자 안내서AWS SDK for .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

실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 AWS SDK for 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

다음 Python 코드 예제는 Amazon S3 버킷을 생성하고 버전 관리를 위해 이를 사용하며 7일 이후 최신이 아닌 객체 버전을 만료하는 수명 주기를 구성합니다.

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