繁体   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