only in patch2:
unchanged:
--- a/flysystem_s3.module
+++ b/flysystem_s3.module
@@ -5,6 +5,10 @@
  * Contains flysystem_s3.module.
  */
 
+use Drupal\Core\Cache\CacheableMetadata;
+use Drupal\Core\Site\Settings;
+use Drupal\Core\StreamWrapper\StreamWrapperManager;
+use Drupal\file\FileInterface;
 use Drupal\flysystem_s3\S3CorsManagedFileHelper;
 
 /**
@@ -13,3 +17,19 @@ use Drupal\flysystem_s3\S3CorsManagedFileHelper;
 function flysystem_s3_element_info_alter(array &$types) {
   S3CorsManagedFileHelper::alterInfo($types);
 }
+
+/**
+ * Implements hook_ENTITY_TYPE_load().
+ */
+function flysystem_s3_file_load(array $entities) {
+  foreach ($entities as $entity) {
+    assert($entity instanceof FileInterface);
+    $settings = Settings::get('flysystem');
+    $scheme = StreamWrapperManager::getScheme($entity->get('uri')->value);
+    if (isset($settings[$scheme]) && isset($settings[$scheme]['config']['expires'])) {
+      $entity->addCacheableDependency(
+        (new CacheableMetadata())->setCacheMaxAge((int)$settings[$scheme]['config']['expires'])
+      );
+    }
+  }
+}
