2014-08-30 3 views
1

내 서버가 S3와 통신합니다. 두 가지 가능성까지 내가 이해 있습니다 : 내 서버사용자 별 디스플레이를위한 Amazon S3 파일 보호

에서 인증을 처리하는 동안

1) 단지 내 서버의 IP 2 S3 액세스를 유지, 내 서버에 파일을로드하고 사용자에게 전송) S3로 리디렉션

나는 이해했다 (내가 생각하는) 방법 # 1 출발 수행합니다 Does Amazon S3 support HTTP request with basic authentication

을하지만, # 2를 달성 할 수있는 방법이있다? 먼저 파일을 내 서버에로드 한 다음 사용자에게 전송하는 대기 시간을 피하려고합니다.

# 2의 공개 액세스로부터 S3 URL을 보호하는 방법을 모르겠습니다. 누군가 내 인증을 통해 다운로드 링크를 얻을 수 있지만 해당 링크는 공개적으로 액세스 할 수 있습니다.

나는 일반적으로 S3에 익숙하다. 그래서 나는 오해가 있다면 나에게 책임진다.

편집 : 만료 시간이 표시된 서명 된 링크를 조사했지만 다른 사람이 액세스 할 수 있습니다. 사용자가 로그인 한 상태에서만 링크에 대한 액세스를 허용 할 수 있도록 자체 인증을 사용하는 것도 좋습니다.

답변

1

서버에서 다음과 같은 코드를 시도해보십시오. 예를 들어 60 초 내에 만료되는 URL이 생성됩니다. 사용자가 S3 서버에서 파일을 직접 다운로드 할 수 있습니다.

첫째 : 여기에서 HMAX.php 다운로드 : http://pear.php.net/package/Crypt_HMAC/redirected

<?php 
require_once('Crypt/HMAC.php'); 

echo getS3Redirect("/test.jpg") . "\n"; 

function getS3Redirect($objectName) 
{ 
    $S3_URL = "http://s3.amazonaws.com"; 
    $keyId = "your key"; 
    $secretKey = "your secret"; 
    $expires = time() + 60; 
    $bucketName = "/your bucket"; 

    $stringToSign = "GET\n\n\n$expires\n$bucketName$objectName"; 
    $hasher =&amp; new Crypt_HMAC($secretKey, "sha1"); 
    $sig = urlencode(hex2b64($hasher-&gt;hash($stringToSign))); 

    return "$S3_URL$bucketName$objectName?AWSAccessKeyId=$keyId&amp;Expires=$expires&amp;Signature=$sig"; 
} 

function hex2b64($str) 
{ 
    $raw = "; 
    for ($i=0; $i &lt; strlen($str); $i+=2) 
    { 
     $raw .= chr(hexdec(substr($str, $i, 2))); 
    } 
    return base64_encode($raw); 
} 

?> 

는 시도를 가져 가라.