簡體   English   中英

用於投放圖片的臨時S3存儲桶URL

[英]Temporary S3 Bucket URL for serving Images

使用“ aws / aws-sdk-php”:“ ^ 3.0@dev”

我正在創建一個圖像共享網站,但不希望人們將我的URL復制到另一個網站上來竊取我的內容/帶寬。

我最初將對象存儲為

return $s3->putObject([
        'Bucket' => $bucket,
        'Key'    => $key,
        'Body'   => $file,
        'ACL'    => 'public-read',
    ]);

但是我已經刪除了“公開閱讀”,因此下面的網址不再有效

 https://mybucket-images.s3.us-west-1.amazonaws.com/' . $key);

我需要做些什么來創建一個仍可以被客戶端緩存以訪問該對象的臨時URL?

我當時想的一件事是每周或每月更改一次密鑰,但這需要我用cronjob更新所有對象。 必須有一種創建臨時訪問URL的方法嗎?

使用您的服務器為存儲桶中的密鑰生成預簽名的url。

//Creating a presigned request
$s3Client = new Aws\S3\S3Client([
    'profile' => 'default',
    'region'  => 'us-east-2',
    'version' => '2006-03-01',
]);

$cmd = $s3Client->getCommand('GetObject', [
    'Bucket' => 'my-bucket',
    'Key'    => 'testKey'
]);

$request = $s3Client->createPresignedRequest($cmd, '+20 minutes');
$presignedUrl = (string) $request->getUri();

取自https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-presigned-url.html

但是,每當頁面有請求時,您都必須這樣做。 鏈接將在任何地方都有效。 您只需最小化其有效期。

如果您的網站是基於API的,並且您通過API檢索了網址 ,則可能與您有關:

  • 如果您的網站具有登錄功能,則可以在提供預簽名的URL之前檢查auth邏輯。

  • 如果沒有,則可以使用Http Referrer(可以被欺騙)。 或api鍵(例如API Gateway中的鍵)

如果您的目的是僅通過發布在您網站上的URL來使您的內容可讀-而不是讓同一個Web客戶端使用從另一個站點訪問的同一個URL不起作用,那么我認為您可能會發現這很困難。 我想到的大多數方式都是可惡的。

我會看一下,看看它是否對您足夠好:

限制對特定HTTP引薦來源網址的訪問

您可以使用以下代碼:

 // initiate connection to your S3 bucket
    $client = new S3Client(['credentials' => ['key' => 's3 key', 'secret' =>'s3 secrete'], 'region' => 's3 region', 'version' => 'latest']);

        $object = $client->getCommand('GetObject', [
            'Bucket' => 's3 bucket',
            'Key' => 'images/image.png' // file
        ]);

        $presignedRequest = $client->createPresignedRequest($object, '+20 minutes');
        $presignedUrl = (string)$presignedRequest->getUri();
        if ($presignedUrl) {
            return $presignedUrl;//presigned URL
        } else {
            throw new FileNotFoundException();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM