[php] PHP 라이브러리 S3 파일 다운로드 시 보안 설정

이번 포스트에서는 PHP 라이브러리를 사용하여 Amazon S3에서 파일을 다운로드 할 때의 보안 설정에 대해 알아보겠습니다.

Amazon S3에 파일 업로드하기

먼저, Amazon S3에 파일을 업로드하는 방법을 확인해보겠습니다. PHP에서 Amazon S3와 상호 작용하려면 aws/aws-sdk-php 라이브러리를 사용할 수 있습니다. 이 라이브러리는 Composer를 통해 설치할 수 있습니다.

composer require aws/aws-sdk-php

다음으로, 다음 코드를 사용하여 S3에 파일을 업로드할 수 있습니다.

require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$bucket = 'your-bucket-name';
$keyName = 'file-to-upload.txt';
$pathToFile = '/path/to/local/file.txt';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1',
]);

try {
    $result = $s3->putObject([
        'Bucket'     => $bucket,
        'Key'        => $keyName,
        'SourceFile' => $pathToFile,
    ]);
    echo "파일이 성공적으로 업로드되었습니다.\n";
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}

다운로드 링크 생성 및 보안 설정

파일이 S3에 업로드되었으므로, 해당 파일을 안전하게 다운로드할 수 있는 링크를 생성해야 합니다. 이를 위해 사전 서명된 URL(pre-signed URL)을 생성하여 파일에 대한 임시 액세스 권한을 부여할 수 있습니다.

$cmd = $s3->getCommand('GetObject', [
    'Bucket' => $bucket,
    'Key'    => $keyName
]);

$request = $s3->createPresignedRequest($cmd, '+20 minutes');

$presignedUrl = (string)$request->getUri();

echo "다운로드 링크: $presignedUrl\n";

위의 코드에서 createPresignedRequest 메서드를 사용하여 파일에 대한 pre-signed URL을 생성할 수 있습니다. 또한, +20 minutes와 같이 유효 기간을 설정하여 보안을 강화할 수 있습니다.

이제 클라이언트에게 생성된 pre-signed URL을 제공하면, 클라이언트는 해당 URL을 사용하여 제한된 시간 동안 파일을 안전하게 다운로드할 수 있습니다.

마치며

이렇게 PHP 라이브러리를 사용하여 Amazon S3에 파일을 다운로드할 때의 보안 설정을 살펴보았습니다. 파일 다운로드에 대한 보안 요구사항에 따라 pre-signed URL의 유효 기간 및 다른 설정을 조정하여 안전한 파일 공유 시스템을 구축할 수 있습니다.