Да, похоже, что Amazon S3 не предоставляет эту функциональность, и мне пришлось делать это самостоятельно на уровне приложения. Я использовал ZipArchive для чтения файлов из S3 и архивирования их на сервере.
$client->registerStreamWrapper();
$files = $client->getIterator('ListObjects', [
'Bucket' => $bucket,
'Prefix' => $directory_name
]);
$file = get_temp_file();
$zip = new ZipArchive();
$zip->open($file, ZipArchive::CREATE);
foreach ($files as $f) {
$contents = file_get_contents("s3://{$bucket}/{$f['Key']}");
$zip->addFromString($file_name, $contents);
}