Magento Open Source Amazon S3 remote storage for multi-server stores
The supported way to store media and generated files for a Magento Open Source store in Amazon S3 is the remote storage module, available from release 2.4.2 and configured through the command line after database media storage has been disabled. This section is for stores that keep product images, uploaded files and generated files on local disk or in the database and now run more than one web node. On a single local disk, each node sees only its own copy, so a file uploaded through one node can be missing on another. Shared, durable storage gives every node the same source of truth. Exact commands, option names and module names change between releases, so confirm them against Adobe's documentation for your release line before you script anything.
At a high level, the integration moves reads and writes of media and generated files from each web node's disk to an S3 bucket that all nodes reach through the same configuration. The application flow stays the same, but the storage layer points at the bucket. The work splits into a few parts: the bucket and its access policy in the client's AWS account, the credentials the store uses to reach it, the database media setting that must be turned off first, the command line configuration, and a copy of existing media and generated files into the bucket. Each part has an owner. The platform or cloud team usually owns the bucket and identity setup, while the store team owns the Magento settings and the file copy. Agree on the order before anyone runs a command, because enabling the module while files exist only on one node can leave gaps in what the storefront serves.
Multi-node behavior is where most of the risk sits. Every web node, and any worker or cron host that writes generated files, must carry the same remote storage settings, or some nodes will write to one location and read from another. Confirm with Adobe's documentation which generated paths and file types the module covers, because anything outside that scope may still write to local disk. Custom extensions and themes that call PHP file functions directly, such as reading, writing or checking files by path, can bypass the storage layer. Adobe notes caveats for some of these functions, so review your custom code and third-party extensions against that guidance. Test uploads, image generation and export files on a staging environment that matches your node count. If a content delivery network sits in front of the bucket or the store, plan cache purge steps as part of the change.
Decisions to settle before the work is quoted include the AWS region and bucket layout, whether the bucket is dedicated to one store or shared across several, how credentials are issued and rotated, and whether a CDN will serve media from the bucket. Cost has several parts. The client pays AWS for storage, requests and data transfer in its own account. The implementation partner is paid for the agreed scope, such as design, configuration, migration of existing files, testing and handover. Configuration and migration are one-time costs, while storage and transfer charges recur and grow with the catalog. Ask any partner for a written scope that lists the bucket and IAM setup, the node count covered, the file migration method, the test cases and the Magento Open Source release line the work targets.
What you need before you configure Amazon S3 storage
The remote storage module moves media and generated files out of the local filesystem, so most preparation sits outside Magento itself: the release line you run, the AWS account, the network path from every web node and your recovery plan. Work through these six items before any configuration command runs. Each one is a gate, and skipping one usually surfaces later as an outage.
Supported release line and version floor
Confirm that your store runs Magento Open Source 2.4.2 or later, the version floor for the remote storage module. Adobe's released versions page lists 2.4.9 and 2.4.8-p5 as released on May 12, 2026, and Adobe's lifecycle policy gives 2.4.9 regular support through May 31, 2029. Check the module's compatibility against your exact patch level and the system requirements for that release line before you schedule any upgrade or configuration work.
AWS account and bucket
Decide which AWS account owns the bucket, which region it sits in and how it is named, tagged and encrypted before configuration begins. The region affects latency from your web nodes and any data residency obligations, so confirm both with your compliance owner. Ask whether versioning and default encryption are enabled, and record the bucket name, region and account ID in the configuration plan. Changing these later usually means moving stored objects.
IAM identity with scoped permissions
Create a dedicated IAM identity for Magento's storage calls and grant it only the object actions the module needs on that bucket, such as reading, writing and listing objects under the configured prefix. Do not reuse a personal user, a root key or an administrator role. Confirm the exact action list against the module documentation for your release line, and keep the access credentials in your secrets manager rather than in plain configuration files.
Network paths to S3 endpoints
Every web node that serves storefront or admin requests needs an outbound path to the regional S3 endpoint for your bucket. Check egress rules on security groups, firewalls, proxies and NAT gateways, along with DNS resolution from each node, including nodes added by autoscaling. Test from every node, not from a single bastion host, because a node with a missing route shows intermittent media errors that look like application faults.
Tested backup of media and database
Take a full backup of the database and the media directory, then restore both into a separate environment and confirm the store loads and product images resolve. A backup that has never been restored is an assumption, not a recovery plan. Record the backup timestamp, the restore duration you measured and the person who signed off, so the rollback plan rests on evidence your team has already seen work.
Non-production environment for rehearsal
Rehearse the change in a non-production environment built from a recent copy of production data, with matching PHP, database, search and cache versions and the same web tier layout. Run the database media storage disablement, the configuration commands and a full media sync there first. Keep the rehearsal log so the production runbook reflects what actually happened, including errors, retries and timings.
How the remote storage module moves media and generated files
The remote storage module moves a defined set of file categories from the web server's local disk to an Amazon S3 bucket. Everything outside those categories stays on local disk. Before you plan the bucket layout, you need a clear list of what moves and what does not. The two groups Adobe describes are media files and generated files. Media files are the images and documents that enter the store through the admin, such as product and category images. Generated files are the derived copies Magento creates from those sources, such as resized image variants. Adobe defines the exact categories for each release line, so confirm that list in Adobe's documentation for your version before you assign prefixes or set lifecycle rules in the bucket.
The part that stays on local disk matters as much as the part that moves. Application code, compiled output, configuration and any directory the module does not list remain on each node's filesystem. In a multi-node web tier, that means every node still needs its own copy of the code and must agree on the same configuration. Build a mapping table with one row for each directory your store writes to. For each row, record the owning component, whether Adobe lists it as a moved category for your release, and who approved the decision. Include directories written by custom modules and third-party extensions, because those writes are easy to miss in a standard installation review.
After the switch, the storefront and admin still request media by URL, so the visible behavior of the catalog should not change for shoppers. What changes is where the bytes come from and how writes get there. Confirm with Adobe how the media base URL is set for your module version, and whether that URL points directly at the bucket or at a content delivery network placed in front of it. Adobe also notes PHP file function caveats. Any custom code that reads or writes media with local filesystem functions, or that assumes a file exists at a local path, must be reviewed and tested against the remote storage behavior before go-live. A file written to local disk on one node will not be visible to the other nodes, so treat any local write path as a defect to fix.
Plan the review as a test exercise, not a configuration step. Run admin uploads, product image regeneration, category image changes, a cache flush, and any scheduled jobs that create files, and confirm each result on every web node and in the browser. Include custom code paths in the test list, along with the extensions that generate invoices, exports or catalog feeds. Ask your implementation partner or your own developers to produce a written list of every custom path that touches media or generated files, with a pass or fail result for each. Keep that list with the rollback plan, because the decision about which categories move will shape your backup scope, your bucket permissions and your restore steps later.
How to configure S3 remote storage in the right order
This sequence moves media and generated files from the local filesystem or database into Amazon S3 without losing images or breaking the storefront. Each step closes with a check, so a failure is caught before the next change is made. Command syntax must come from Adobe's documentation for your target version.
Inventory media and generated files
The store team and the platform engineer list everything the store writes to the media and generated directories: product and category images, WYSIWYG uploads, the generated image cache, static view files and any custom code that writes to the filesystem. Record the current media storage setting and the size and file count of each directory so the migration can be scoped. The output is a written inventory that the team signs off before any configuration changes. Check: someone outside the project can reproduce the file counts for each directory.
Take and verify a full backup
The platform engineer takes a database dump and a copy of the media and generated directories, stored outside the web tier. A backup is only proven by restoring it, so run a test restore to a separate non-production environment and confirm the store boots and a sample product page renders. Do not start configuration until the restore has succeeded and the backup location is recorded in the change ticket. Check: a documented restore that completed on a non-production host.
Disable database media storage first
Before the remote module is enabled, switch media storage back to the file system so that no files are read from or written to the database during the change. This order matters because the store stays in a known state while existing media is moved out of the database, and only then is the remote target configured. Confirm the current media storage value with the configuration command documented for your version. Check: the setting reads as the file system value and a test upload lands in the media directory.
Create the bucket and IAM identity
The cloud or security team creates the S3 bucket in the region the store will use, enables the access controls and encryption the organization requires, and creates an IAM identity limited to the actions the module needs on that bucket. Use a dedicated identity and avoid shared administrator keys, and store its credentials in your secrets manager. Confirm the required actions in Adobe's documentation for your release, because the policy must match the module version. Check: the identity can write, read and delete a test object in the bucket and is denied access to other buckets.
Run the CLI configuration
The platform engineer runs the Magento CLI commands that set the remote storage driver, bucket, region and credential reference, using the syntax in Adobe's documentation for the exact version in use. Apply the configuration in staging first and capture the resulting config values for the change record. Keep credentials out of shell history and version control. Check: the config values read back as expected on every web node, and the cache is flushed so the new settings take effect.
Migrate existing files to the bucket
Copy the media and generated files from the inventoried directories to the bucket, using the migration method Adobe documents for your version, and leave the original directories untouched until verification passes. Run the copy against staging first, compare object counts and sampled checksums with the inventory from the first step, then repeat the run on production during an agreed change window. Check: object counts match the inventory and sampled checksums match the source files.
Verify storefront and admin image rendering
Test the result from the outside in. Load a sample product image on the storefront and confirm the URL points to the bucket or to the CDN in front of it. Check a category page, a CMS page with a WYSIWYG image, and images in the admin product grid and product edit form. Confirm that every web node serves the same image. Check: each image renders with no broken requests in the browser console, and the team records the test results before sign-off.
What changes on multi-node web tiers
Remote storage matters on a multi-node web tier because every web node must read and write the same media location. Once two or more nodes serve one store, an image uploaded through the admin on one node has to resolve on every other node, and any file generated by one node, such as a resized product image or a cached asset, has to be visible to the rest. With local media directories, each node holds its own copy, and the store shows broken images or stale files depending on which node answers a request. Moving media and generated files to Amazon S3 with the remote storage module gives all nodes one shared target, but only if every node is configured identically.
The main failure mode is partial configuration. A node that was built before the remote storage settings were applied, or a node restored from an older image, may still write to local disk while its neighbors write to the bucket. Cache and deployment steps make this worse. A static content deploy or a configuration cache refresh run on one node does not automatically correct another node's environment settings. Before you roll out changes, decide the order in which nodes receive the new code and environment values, and keep one node out of rotation until it has passed the checks below. Confirm the sequence in your own deployment tooling, because the exact commands depend on how your nodes are built and whether they share an env.php source.
To confirm that all nodes share one configuration, compare the effective settings on each node rather than trusting the change log. Check the remote storage driver and bucket values through the CLI on every node, and compare the resulting configuration output across nodes, including the storage driver and the path prefix. Confirm that the database media storage setting has been disabled before the cutover, since a node that still reads media from the database will behave differently from one that reads from S3. Record the comparison as part of the release evidence so that the next person can see what was verified and when.
After a node is added, replaced or scaled, repeat the comparison before it receives traffic, then run a short functional check. Upload a test image in the admin, load a storefront page that uses it from the new node, and confirm that the file resolves through the expected URL. Check that generated images are written to the bucket rather than to the local media directory, and that the new node does not hold a divergent copy. Autoscaled or rebuilt nodes are the most common source of drift, so treat the node image or provisioning template as part of the configuration baseline. Ask your partner or internal team to confirm how the bucket credentials reach new instances, whether through instance roles or stored secrets, because a missing credential on one node can appear as intermittent media failures rather than a clear error.
Plan for the cost and operational side as well. Running several nodes against one bucket adds request volume, and the IAM policy must allow every node to read, write and delete only the paths it needs. Decide who owns the bucket policy, who rotates credentials, and who approves a change to the storage settings, since a single misconfigured value affects every node at once. Ask any implementation partner to state in the written scope which node rollout steps, verification checks and rollback actions are included, and which remain with your platform team.
Which settings map to which AWS resources
This table maps each value you set for the remote storage module to the AWS object it refers to, the team that should own it, and how to name it across staging and production. Decide the names before any environment is built, since they are hard to change later. Items marked to confirm depend on options the module exposes, so check them in Adobe's configuration reference before you assume a setting exists.
| Setting | AWS object it refers to | Who owns it | Naming across staging and production |
|---|---|---|---|
| Bucket name | The S3 bucket that holds media and generated files | Cloud platform team | Include the environment in the name, and plan the suffix early because bucket names must be unique in AWS |
| Region | The AWS region where the bucket is created | Cloud platform team | One region per environment, kept close to the web tier. Confirm accepted region values in Adobe's reference |
| Path prefix | The key prefix inside the bucket that acts as a folder-style namespace | Store engineering team | Use a distinct prefix per environment so staging writes never touch production keys. Confirm whether one prefix covers both media and generated files |
| Credential source (confirm in Adobe reference) | The IAM role, instance profile or access keys the web nodes use to call S3 | Security or IAM team | One identity per environment, with role-based credentials preferred on servers. Confirm which credential methods the module accepts |
| Endpoint (confirm in Adobe reference) | A custom S3 endpoint for a VPC endpoint or an S3-compatible service | Cloud network team | Leave at the AWS default unless you use a VPC endpoint or compatible service. Confirm the module exposes this setting |
| Object access (confirm in Adobe reference) | Bucket public access settings and how object visibility is applied | Security team | Keep the bucket private and serve public files through the CDN. Confirm how the module sets object permissions |
| CDN origin (confirm in Adobe reference) | The CloudFront or other CDN origin that points at the bucket | Platform or CDN owner | One distribution or origin per environment, with the media base URL set in Magento configuration. Confirm the base URL setting |
Security controls for S3-backed media
Media and generated files in S3 are governed by three things at once: the bucket policy, the credentials the store uses, and the URLs shoppers load. These controls only protect the store when they are designed and tested together. Confirm which credential mechanisms the module accepts for your Magento Open Source release before you choose an access pattern.
Least-privilege IAM policy
Scope the IAM identity to the one bucket and, where your design allows, to the key prefix the store uses for catalog media and generated files. Grant only the object actions the module performs, such as reading, writing and deleting objects, plus listing the bucket if the module requires it. Confirm the exact action list for your release in the module documentation, then test the policy in staging with normal media workflows, including image regeneration and cleanup of old files.
Credential storage outside web-readable files
Keep access keys out of env.php, version-controlled files and any path reachable through the web server. Where the module accepts it, prefer an instance or workload role, or a secrets store that supplies values at runtime. If static keys are unavoidable, restrict who can read the deployment configuration, rotate keys on a documented schedule, and confirm how the module stores credentials in configuration or the database.
Bucket public access settings
Keep block public access enabled at the account and bucket level unless your design requires anonymous reads. Decide whether shoppers load media directly from the bucket, through signed URLs, or through a CDN that is the only principal allowed to read the origin. Record that choice before go-live, then confirm that a direct object URL is refused when your design says it should be.
Signed or CDN-fronted delivery paths
Choose how shoppers reach media: public objects, time-limited signed URLs, or a CDN in front of a locked origin. Each option determines how long a copied link works and who can fetch an image without a session. Set cache lifetimes and invalidation rules for replaced product images, and confirm with the module documentation how generated URLs are built for your storage and CDN hostnames.
Encryption at rest and in transit
Enable default server-side encryption on the bucket and decide, based on your key custody policy, whether the cloud provider or your own key service manages the keys. Add a bucket policy that denies requests not made over HTTPS, and confirm the module connects to TLS endpoints. Check that CDN-to-origin traffic and any administrative tools that read the bucket also use encrypted connections.
Logging of bucket access
Enable server access logging or data event logging for the media bucket and send those logs to a separate bucket that the security team controls. Logs show which principal read, wrote or deleted objects, which matters when product media is altered or a credential is misused. Agree retention periods, who may read the logs, and how alerts reach the operations team, and confirm which events your cloud account plan captures.
How CDN delivery and PHP file function limits shape the design
The first design decision is which cache sits in front of the media files. Adobe documents Varnish as the full-page cache for self-managed installations, and it documents Fastly for cloud-hosted Adobe Commerce. A CDN in front of Amazon S3 is a separate layer from both, so you need to decide how it fits your own edge setup before you change where media is stored. Confirm with your edge team whether your CDN can use the S3 bucket or a web-tier origin, which hostname shoppers will request, and how Varnish will treat responses for product images. Check the Varnish version you plan to run against the system requirements for your Magento Open Source release line.
The CDN and the media base URL settings must agree. If shoppers request images from the bucket, a CDN hostname and the store domain at different times, you can get mixed content warnings, broken images in cached pages, or old images after a catalog update. Plan a test in staging that replaces one product image, confirms the new file is served through the CDN, and records each purge or invalidation step in the runbook. Ask your CDN provider how it handles cache expiry for objects that keep the same file name, since regenerated image cache files often do.
Adobe also notes caveats for PHP file functions in general terms. Some functions behave differently or are restricted in a managed application environment, and the code that calls them assumes a local filesystem. With remote storage, media reads and writes can pass through a storage adapter instead of the local disk. Code that calls file functions directly on paths under the media directory may therefore find no file, write to the wrong place, or delete only a local copy. Review the exact function list and any module-specific limits in the official documentation before anyone writes custom code that touches media, because the list can change between releases.
Start with an inventory of custom modules, theme code, import scripts, cron jobs and third-party extensions that read, write, delete or build paths under the media directory. Classify each touchpoint and ask the team that wrote it, or the extension vendor, whether it uses the framework's storage abstraction. The number of touchpoints is one of the main drivers of effort and of any quote for this work, so ask for each item to be estimated separately. Test every item in staging with the same storage configuration as production, including the CDN path, before the change goes live.
Common S3 remote storage failures and their fixes
This table lists the failures teams most often meet after moving Magento Open Source media and generated files to Amazon S3, with the likely cause, a way to confirm it and the fix for each. Work through the rows during cutover checks, and confirm every setting change against Adobe's remote storage guidance for your release. Most failures trace back to paths, permissions or node configuration.
| Failure | Likely cause | How to confirm | Fix and where to check Adobe |
|---|---|---|---|
| Broken images after cutover | Media paths or base URLs still point to the old local media location after the storage driver changed. | Image URLs in the page source return 404 or point to the old host. Compare them with the object keys in the bucket. | Align the base URL and media prefix with the bucket layout, then flush caches. Check Adobe's remote storage guide before editing base URL settings. |
| Missing generated files | Resized images or other generated files were never written to S3 because write access or the storage driver was not set during deployment. | Generated paths return 404 after a cache flush. Check the bucket for the expected generated prefixes and the application log for write errors. | Grant write access to the generated prefixes, then regenerate images and redeploy. Confirm which directories Adobe's module moves to remote storage. |
| Nodes serving different assets | Some web nodes still hold local media or static files, or keep cache entries from before the change. | Request the same asset from each node behind the load balancer. Different file versions or missing files confirm the mismatch. | Give every node the same storage configuration and deployment artifacts, then clear caches on all nodes. Review Adobe's guidance for multi-node setups. |
| Permission denied from the bucket | The IAM role or bucket policy lacks the object actions the module needs, or application servers use the wrong credentials or region. | The logs show AccessDenied (403) responses. Run an S3 request from the same host with the same role to reproduce the error. | Add only the object actions the module requires on the needed prefixes, and confirm the bucket region. Check Adobe's module requirements before changing the policy. |
| Slow page rendering from cross-region reads | The bucket sits in a different AWS region from the web tier, so each asset request crosses regions. | Measure asset response times from the web tier. Compare the bucket region with the region of the instances. | Place the bucket in the same region as the web tier, or serve assets through a CDN. Review Adobe's notes on supported setups and your provider's transfer costs. |
| CDN serving stale or missing objects | The CDN caches old objects after updates, or its origin path does not match the bucket path used by the store. | Request the same object through the CDN and directly from the bucket. Compare the cache status and age headers. | Invalidate the affected paths and align the CDN origin with the storage base URL. Check Adobe's guidance on CDN base URLs before changing them. |
Questions buyers ask before hiring help with S3 storage
What drives the cost of hiring help with Magento S3 storage?
Cost follows the work in your environment, so ask for a quote that itemizes each part. The main drivers are store size and media volume, the number of web nodes that must read the same media, custom code that reads or writes media paths, CDN design, and how much testing the scope includes. Partner fees usually cover scoping, configuration, moving existing media, verification and handover. Some costs are one-time, such as the migration itself, while others recur, including your AWS storage, request and data transfer charges, any CDN fees and the staff time needed to operate it. Ask the partner to show which items are fixed, which depend on measured media volume, and which depend on your choice of CDN.
How long does a Magento S3 media cutover take?
The duration depends on your environment, not on a fixed figure. The biggest factors are how much media must be copied and verified, how many web nodes must switch to the new configuration, how much custom code touches media paths, how the CDN cache will be cleared, and how many test cycles your change window allows. A store with one web node and clean media handling will move faster than a multi-node store with custom modules and a CDN in front. Ask for a timeline that is tied to a written scope and that lists the change windows and sign-offs it depends on.
What must my team provide before S3 storage work starts?
Plan to provide the following before work begins:
- AWS access: an account or role with rights to create or review buckets, IAM policies and keys scoped to the store.
- A staging copy: a recent copy of the store, its database and its media, on infrastructure that matches production as closely as practical.
- Verified backups: current backups of the database and media that have been restored at least once.
- A rollback window: an agreed period in which the previous local media configuration can be restored.
- Environment details: web node list, CLI access, deployment method, custom modules and CDN configuration.
Confirm with your team who approves production changes and when the change window opens.
Can an internal team set up Magento S3 remote storage alone?
Often yes, if the team has working Magento and AWS skills, a staging environment and time to test. The remote storage module is available from Magento Open Source 2.4.2 and is configured through the CLI, so the configuration itself is not the hard part. The effort comes from disabling database media storage first, confirming every web node reads the same settings, checking custom code that touches media paths, and designing the CDN and cache behavior. Teams without a staging copy or without someone who has changed media handling in production should weigh a partner for scoping and testing. Confirm the module version and steps against Adobe's documentation for your release before you begin.
Why does a multi-node Magento store need extra planning for S3?
Every web node has to read and write media in the same way, or customers will see missing images or inconsistent pages. Plan the cutover so all nodes, and any cron or queue workers that generate files, switch to the new configuration together. Check that media generated during the cutover is written to S3 and is not left on one node's local disk. Confirm that deployments, scheduled jobs and any file synchronization tools do not overwrite or duplicate media. Test each node separately, then test the load balancer path. Ask your partner to show the node-by-node checklist and the order of the switch.
Which PHP file functions can break when media moves to S3?
Adobe documents caveats for PHP file functions when media is stored outside the local file system, so review those caveats in its documentation for your release before scoping custom work. In practice, search custom modules and themes for direct file operations on media paths, such as reading, writing, moving or checking the existence of files. Code that assumes a local path can fail silently or return false results. Scope the fixes and the tests for each finding. Ask your partner to include a code search and a list of affected files in the assessment, and to confirm which findings are in scope for the fixed-price work.
How does a CDN change when Magento media is served from S3?
The CDN origin, cache invalidation and URL structure all change, so design them together with the S3 configuration. Self-managed Magento Open Source commonly uses Varnish as its full-page cache accelerator, and Adobe's cloud-hosted Commerce uses Fastly instead, so confirm how your CDN and cache layer will purge changed media. If the store uses Content Security Policy, check that the image sources allow the new media host. Content Security Policy headers are supported from 2.3.5, and from 2.4.7 the policy runs in restrict mode by default on storefront and admin payment pages. Test images on category, product and checkout pages after the change.
How do we roll back if S3 media delivery fails after cutover?
Keep the previous local media and database state until the new configuration has passed verification. Agree on the rollback window before the cutover, and write down who decides to roll back and the steps to revert the configuration through the CLI. Confirm that the media copy on local disk is complete and that the cache can be cleared on every node. Check the rollback on staging first, so the team has done it before it is needed. Ask your partner to include the rollback steps, the verification checks and the monitoring for missing media in the written scope.
How DeployOpen scopes and delivers S3 remote storage
DeployOpen plans and delivers Magento Open Source media and generated file storage on Amazon S3 inside your own AWS accounts, using the remote storage module available from 2.4.2. Each engagement starts with a written, fixed scope that names the stores, buckets, web nodes and CDN in use before any configuration changes are made.
How we scope
- Written scope lists the Magento Open Source version, storage types and buckets covered by the work
- We record the web nodes, cache layers and CDN that read or write media files today
- Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts
How we build
- Plan the move off database media storage before changing any file storage settings
- Apply configuration through the Magento CLI so each environment is set the same way
- Review PHP file function calls in custom modules, since Adobe documents caveats for them
How we hand over
- Written runbook covering configuration values, bucket policies, and the rollback steps agreed
- Test evidence for each web node and CDN path, delivered with the configuration record
- Handover session with your platform, security and operations staff before sign-off
How we support
- Ongoing support, upgrades and continuous testing are available as a retainer
- Review storage configuration during each Magento patch upgrade, since Adobe advises patching every cycle
- Confirm bucket access, IAM permissions and CDN settings with your team after infrastructure changes

