[php] PHP 라이브러리 S3 오브젝트 암호화

Amazon S3(Simple Storage Service)는 객체 스토리지 서비스로, 데이터를 안전하게 저장하고 검색할 수 있게 해줍니다. 하지만 민감한 데이터를 저장할 때, 데이터의 보안과 개인정보 보호가 중요합니다.

이런 상황에서, 민감한 데이터를 암호화하여 저장하는 방법이 필요합니다. PHP에서는 Amazon S3 오브젝트를 암호화하는 방법이 제공되고 있습니다.

PHP 라이브러리를 사용한 S3 오브젝트 암호화하기

1. AWS SDK for PHP 설치

먼저, AWS SDK for PHP를 프로젝트에 설치해야 합니다. Composer를 통해 아래 명령어로 설치할 수 있습니다.

composer require aws/aws-sdk-php

2. 클라이언트 및 키 설정

AWS SDK를 사용하여 S3에 액세스하기 위해 클라이언트를 설정하고 자격 증명을 제공해야 합니다.

use Aws\S3\S3Client;
use Aws\Crypto\KmsMaterialsProvider;
use Aws\Crypto\CryptoClient;
use Aws\Kms\KmsClient;

$client = new S3Client([
    'version' => 'latest',
    'region' => 'your-region',
    'credentials' => [
        'key' => 'your-key',
        'secret' => 'your-secret',
    ],
]);

$kmsClient = new KmsClient([
    'region' => 'your-region',
    'version' => 'latest',
]);
$kms = new KmsMaterialsProvider($kmsClient, 'your-kms-key');

$crypto = new CryptoClient(['region' => 'your-region']);

3. 암호화하여 S3에 객체 저장

이제, 객체를 S3에 업로드하기 전에 데이터를 암호화할 수 있습니다.

$key = 'your-unique-key';

$result = $crypto->encrypt([
    'KeyId' => $kms->getEncryptionKey(),
    'Plaintext' => 'your-sensitive-data',
]);

$client->putObject([
    'Bucket' => 'your-bucket',
    'Key' => $key,
    'Body' => $result['Ciphertext'],
]);

4. 복호화하여 S3 객체 읽기

복호화된 데이터를 읽어오기 위해서는 다음과 같이 합니다.

$result = $client->getObject([
    'Bucket' => 'your-bucket',
    'Key' => 'your-encrypted-key',
]);

$decryptedData = $crypto->decrypt([
    'KeyId' => $kms->getDecryptionKey(),
    'Ciphertext' => $result['Body'],
]);

echo $decryptedData['Plaintext'];

위 코드를 사용하여, PHP에서 Amazon S3에 암호화된 객체를 저장하고 복호화할 수 있습니다. 민감한 데이터를 안전하게 저장하고 읽어올 수 있게 됩니다.

암호화와 복호화하는 과정에서 Key Management Service (KMS)를 사용하여 데이터 보호 및 관리를 할 수 있습니다.

참고 자료: