메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

AWS SDK for Java를 사용하여 서버 측 암호화 지정

AWS SDK for Java를 사용하여 객체를 업로드할 때 PutObjectRequestObjectMetadata 속성을 사용하여 x-amz-server-side-encryption 요청 헤더를 설정할 수 있습니다(REST API를 사용하여 서버 측 암호화 지정 참조). 다음 Java 코드 예제와 같이 AmazonS3 클라이언트의 PutObject 메서드를 호출하면 Amazon S3가 데이터를 암호화하여 저장합니다.

Copy
File file = new File(uploadFileName); PutObjectRequest putRequest = new PutObjectRequest( bucketName, keyName, file); // Request server-side encryption. ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); putRequest.setMetadata(objectMetadata); PutObjectResult response = s3client.putObject(putRequest); System.out.println("Uploaded object encryption status is " + response.getSSEAlgorithm());

이에 대한 응답으로 Amazon S3는 객체 데이터 암호화에 사용되는 알고리즘을 반환하며, getSSEAlgorithm 메서드를 사용하여 이 알고리즘을 확인할 수 있습니다.

AWS SDK for Java를 사용하여 객체 업로드에서 객체를 업로드하는 방법에 대한 실제 예제를 참조할 수 있습니다. 서버 측 암호화를 위해 요청에 ObjectMetadata 속성을 추가합니다.

멀티파트 업로드 API를 사용하여 대형 객체를 업로드할 때 업로드할 객체에 대해 서버 측 암호화를 요청할 수 있습니다.

  • 하위 수준의 멀티파트 업로드 API(파일 업로드 참조)를 사용하여 대형 객체를 업로드할 경우 멀티파트 업로드를 시작할 때 서버 측 암호화를 지정할 수 있습니다. 즉, InitiateMultipartUploadRequest.setObjectMetadata 메서드를 호출하여 ObjectMetadata 속성을 추가합니다.

  • 상위 수준의 멀티파트 업로드 API(멀티파트 업로드용 AWS Java SDK(상위 수준 API) 사용 참조)를 사용할 경우 TransferManager 클래스는 객체 업로드 메서드를 제공합니다. ObjectMetadata를 파라미터로 사용하는 모든 업로드 메서드를 호출할 수 있습니다.

사용된 암호화 알고리즘 확인

기존 객체의 암호화 상태를 확인하기 위해 다음 Java 코드 예제와 같이 객체 메타데이터를 검색할 수 있습니다.

Copy
GetObjectMetadataRequest request2 = new GetObjectMetadataRequest(bucketName, keyName); ObjectMetadata metadata = s3client.getObjectMetadata(request2); System.out.println("Encryption algorithm used: " + metadata.getSSEAlgorithm());

Amazon S3에 저장된 객체에 서버 측 암호화가 사용되지 않은 경우 메서드는 null을 반환합니다.

기존 객체의 서버 측 암호화 변경(복사 작업)

기존 객체의 암호화 상태를 변경하기 위해서는 객체를 복사한 다음 원본 객체를 삭제합니다. 기본적으로 복사 API는 대상을 암호화하지 않으며, 암호화하려면 서버 측 암호화를 명시적으로 요청해야 합니다. 다음 Java 코드 예제와 같이 ObjectMetadata 속성을 통해 CopyObjectRequest에서 서버 측 암호화를 지정하여 대상 객체의 암호화를 요청할 수 있습니다.

Copy
CopyObjectRequest copyObjRequest = new CopyObjectRequest( sourceBucket, sourceKey, targetBucket, targetKey); // Request server-side encryption. ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); copyObjRequest.setNewObjectMetadata(objectMetadata); CopyObjectResult response = s3client.copyObject(copyObjRequest); System.out.println("Copied object encryption status is " + response.getSSEAlgorithm());

AWS SDK for Java를 사용하여 객체 복사에서 객체를 복사하는 방법에 대한 실제 예제를 참조할 수 있습니다. 위에 나온 코드 예제와 같이 CopyObjectRequest 객체에 서버 측 암호화를 지정할 수 있습니다.