Sovled! Спасибо @Michael - sqlbot. Используя пользовательскую политику, я могу вернуть любые размеры изображения, которые я хочу, включая исходный размер, используя один URL-адрес со знаком. Если у кого-то еще есть эта проблема, вот как я это сделал:
Мой php-код для генерации подписанного URL:
public static function signedImageUrl($resource)
{
// Build Url
$url = self::CLOUDFRONT_BASE . ltrim($resource, '/') . '?w=*&h=*';
// Create a CloudFront Client
$client = new CloudFrontClient([
'version' => '2014-11-06',
'region' => 'us-east-2'
]);
// Set up parameter values for the resource
$expires = time() + 300;
// Policy
$policy = '{
"Statement": [
{
"Resource":"' . $url . '",
"Condition":{
"DateLessThan":{"AWS:EpochTime":' . $expires . '}
}
}
]
}';
// Create a signed URL for the resource using the canned policy
$signedUrlCannedPolicy = $client->getSignedUrl([
'url' => $url,
'policy' => $policy,
'private_key' => env('AWS_CLOUDFRONT_PRIVATE_KEY_PATH'),
'key_pair_id' => env('AWS_CLOUDFRONT_KEY_PAIR_ID')
]);
return $signedUrlCannedPolicy;
}
Где CLOUDFRONT_BASE - это домен .cloudfront.net / для моего дистрибутива облачного фронта, а $ resource - имя файла (например, my_profile_image.png)
В этот момент я получаю свое подписанное изображение и затем могу изменить параметры запроса w и h на клиенте в соответствии с содержанием моего сердца. Моя лямбда-функция запускается по событию Cloudfront ViewerRequest и будет указывать Cloudfront загружать либо изображение с указанными размерами, либо загружать исходное изображение, если w и h оба *.