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

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

이 주제에서는 Amazon Simple Storage Service(Amazon S3)로 업로드하는 객체에 서버 측 암호화를 추가하기 위해 PHP용 AWS SDK 버전 3의 클래스를 사용하는 방법을 보여줍니다. 여기에서는 PHP용 AWS SDK 사용 및 PHP 예제 실행의 지침에 따라 PHP용 AWS SDK가 올바르게 설치되어 있다고 가정합니다.

Amazon S3에 객체를 업로드하려면 Aws\S3\S3Client::putObject() 메서드를 사용합니다. 업로드 요청에 x-amz-server-side-encryption 요청 헤더를 추가하려면 다음 코드 샘플에 나와 있듯이 ServerSideEncryption 파라미터를 AES256 값과 함께 지정합니다. 서버 측 암호화 요청에 대한 자세한 정보는 REST API를 사용하여 서버 측 암호화 지정 단원을 참조하십시오.

<?php require 'vendor/autoload.php'; use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; // $filepath should be an absolute path to a file on disk. $filepath = '*** Your File Path ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Upload a file with server-side encryption. $result = $s3->putObject([ 'Bucket' => $bucket, 'Key' => $keyname, 'SourceFile' => $filepath, 'ServerSideEncryption' => 'AES256', ]);

이에 응답하여 Amazon S3에서 객체 데이터 암호화에 사용된 암호화 알고리즘의 값과 함께 x-amz-server-side-encryption 헤더를 반환합니다.

멀티파트 업로드 API를 사용하여 대용량 객체를 업로드할 때 업로드할 객체에 대해 다음과 같이 서버 측 암호화를 지정할 수 있습니다.

  • 하위 수준의 멀티파트 업로드 API를 사용하는 경우 Aws\S3\S3Client::createMultipartUpload() 메서드를 호출할 때 서버 측 암호화를 지정합니다. 요청에 x-amz-server-side-encryption 요청 헤더를 추가하려면 array 파라미터의 ServerSideEncryption 키를 값 AES256과 함께 지정합니다. 하위 수준 멀티파트 업로드 API에 대한 자세한 내용은 멀티파트 업로드용 AWS PHP SDK(하위 수준 API) 사용 단원을 참조하십시오.

  • 상위 수준 멀티파트 업로드 API를 사용하는 경우 CreateMultipartUpload 메서드의 ServerSideEncryption 파라미터를 사용하여 서버 측 암호화를 지정할 수 있습니다. 상위 수준 멀티파트 업로드 API와 함께 setOption() 메서드를 사용하는 예제는 멀티파트 업로드를 위해 AWS PHP SDK 사용 단원을 참조하십시오.

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

기존 객체의 암호화 상태를 확인하려면 다음 PHP 코드 샘플에 나와 있듯이 Aws\S3\S3Client::headObject() 메서드를 호출하여 객체 메타데이터를 검색하십시오.

<?php require 'vendor/autoload.php'; use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Check which server-side encryption algorithm is used. $result = $s3->headObject([ 'Bucket' => $bucket, 'Key' => $keyname, ]); echo $result['ServerSideEncryption'];

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

기존 객체의 암호화 상태를 변경하려면 Aws\S3\S3Client::copyObject() 메서드를 사용하여 객체를 복사하고 원본 객체를 삭제하십시오. ServerSideEncryption 파라미터를 AES256 값과 함께 사용하여 대상 객체의 서버 측 암호화를 명시적으로 요청하지 않는 한 기본적으로 copyObject()는 대상을 암호화하지 않습니다. 다음 PHP 코드 샘플에서는 객체를 복사하고 복사된 객체에 서버 측 암호화를 추가합니다.

<?php require 'vendor/autoload.php'; use Aws\S3\S3Client; $sourceBucket = '*** Your Source Bucket Name ***'; $sourceKeyname = '*** Your Source Object Key ***'; $targetBucket = '*** Your Target Bucket Name ***'; $targetKeyname = '*** Your Target Object Key ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Copy an object and add server-side encryption. $s3->copyObject([ 'Bucket' => $targetBucket, 'Key' => $targetKeyname, 'CopySource' => "{$sourceBucket}/{$sourceKeyname}", 'ServerSideEncryption' => 'AES256', ]);

관련 리소스