Research & Analysis · Cloud security · 18 min read
How Do You Stop a Leaked Cloud Storage Download Link?
Stop further use of a leaked download link by identifying the mechanism that authorizes it, withdrawing that authority at the service that accepts it, and verifying that the exposed link can no longer start a new authorized download. The right action may be a resource restriction, a stored-policy change, delegation-key revocation or signing-credential invalidation. Removing the link from a message does not revoke it, and revoking it cannot recover copies someone already downloaded.
I would first establish whether the exposure concerns one delegated URL or the credential capable of issuing many URLs. That distinction changes the incident's scope and the disruption justified to contain it. A narrow link leak can sometimes be contained without replacing a shared signing credential. Evidence that the signing authority itself escaped requires a broader response, even when only one link has been found.
This paper develops a proposed containment method from thirteen authoritative sources. It compares Amazon S3 presigned URLs, Azure Storage shared access signatures and Google Cloud Storage signed URLs without treating their controls as interchangeable. The method and worked example are original synthesis, not an empirical study. No storage account, credential or live download was tested. The aim is a defensible decision about future access, remaining uncertainty and legitimate service recovery.
Treat the URL as delegated authority
A signed URL often looks like an ordinary document link with a long query string. Its security meaning is different: the request contains information that lets the service authorize an operation. AWS describes S3 presigned URLs as bearer tokens constrained by the permissions of their creator. Google similarly states that anyone possessing an active signed URL can use it without having a valid account of their own (Amazon Web Services [AWS], n.d.-c; Google Cloud, 2026b).
That distinction explains why logging out the person who originally requested a link may not settle the exposure. The subsequent download can be authorized by the delegated request rather than by that person's current application session. Review the actual verifier and credential relationship. Do not infer revocation semantics from the user interface that produced the URL or from the account name displayed beside the document.
Start a restricted incident record containing the provider, resource, operation, signing mechanism, stated expiry, relevant object version and the earliest credible exposure time. Store the full live URL only where incident evidence of that sensitivity belongs. Use a redacted form elsewhere. A support ticket that repeats the signature may distribute the same authority to additional systems and readers while the team believes it is documenting containment.
An exposed download link is not automatically an exposed signing key. Nor does finding a single URL establish that it authorizes only a single object. Inspect its resource and permission scope using trusted provider documentation and approved tooling. An account-wide delegation, a container-level permission and a specific object request have different consequences. The response should follow the actual authority, rather than the informal label “download link.”
Separate four outcomes before choosing a remedy
I use four distinct outcomes: stop issuing replacement authority, reject new use of existing authority, assess transfers that may already have occurred, and restore approved sharing. These outcomes interact but require different evidence. Disabling a download button addresses issuance through that application. It does not prove that an already issued URL has stopped working or that another issuer cannot produce an equivalent one.
Likewise, a successful denial of the old URL says little about earlier disclosure. NIST describes containment as preventing an incident's expansion, separating that concern from other response activities (Nelson et al., 2025, RS.MI-01). Applied here, a blocked future request is containment evidence. It is not proof that the file remained confidential throughout the exposure window.
Restoration also needs a defined target. The business may require a particular recipient to obtain a particular report, not restoration of the same broad sharing mechanism. A replacement delivery path can be narrower than the original. Record who needs access, to which immutable content or version, for what purpose and for how long. This keeps continuity from becoming a reason to reissue the same excessive delegation.
These outcomes form a proposed decision record rather than a provider-prescribed workflow. Each record should name its owner, control, observation and unresolved question. For example, the application owner may stop issuance, the storage administrator may change the accepting policy, and the incident lead may evaluate historical access. Keeping those responsibilities explicit avoids a familiar failure: everyone has completed their assigned change while nobody has verified that the exposed authority is unusable.
Identify the credential and the actual expiry boundary
For S3, AWS documents that a presigned URL can expire when the credential that created it expires or is revoked, deleted or deactivated, even if the URL contains a later expiration. Temporary credentials therefore impose an additional lifetime boundary. AWS also provides the s3:signatureAge condition for resource policies that restrict acceptable signature age (AWS, n.d.-c). These controls should be evaluated against the actual signer and effective policy.
The practical conclusion is that the expiry written into a URL is not the only relevant clock. Record the URL's requested lifetime, the signing credential's lifetime and any additional accepting-policy restriction. Do not assume the smallest number visible in a console is the effective control without identifying what it measures. A signature-age rule also needs scope review: it may affect a class of requests rather than uniquely identify the leaked link.
Google's signed-URL documentation describes access lasting until expiry or rotation of the signing key (Google Cloud, 2026b). That does not justify treating every Google signing arrangement as a locally held service-account key. Identify how the signature was produced and which authority the organization actually controls. If the operational path uses a managed signing service, the response procedure needs to match that arrangement rather than instruct an operator to rotate a key they do not possess.
Avoid turning maximum lifetime guidance into a containment plan. A short lifetime reduces the period during which a copied link may be useful, but a sensitive file can be disclosed during that period. Waiting for expiry is a deliberate risk decision, not the default response to uncertainty about revocation. The incident owner should compare the plausible harm of another download with the disruption of withdrawing the relevant authority now.
For Azure, classify the SAS before applying a revocation rule
Azure distinguishes user delegation SAS, service SAS and account SAS. Its overview explains that service SAS may be associated with stored access policies, whereas user delegation and account SAS do not support those policies. It also states that generated SAS tokens are not tracked as individual tokens by Azure Storage (Microsoft, 2026b). An operator should not expect a universal list of issued links with a reliable revoke button for each one.
This distinction matters during triage. Ask whether the SAS references a stored policy, whether it was signed with an account key or a user delegation key, and which resources and operations it permits. The visible expiry and permissions are useful evidence, but they are not a substitute for locating the control that can invalidate the request. Keep token classification separate from the application team's recollection of how sharing usually works.
For a service SAS associated with a stored access policy, Microsoft documents revocation by deleting the policy, changing its signed identifier, or moving its expiry into the past. The action affects signatures associated with that policy. The documentation also warns that creating or updating a policy can take up to thirty seconds to take effect (Microsoft, 2023). Treat that as a stated propagation consideration, not as a universal stopwatch for every storage-control change.
A user delegation SAS follows a different path. Microsoft documents revoking the delegation key or changing relevant role assignments and POSIX ACLs, and warns that cached keys and role assignments can delay invalidation (Microsoft, 2026a). Its key-management guidance confirms that rotating an account key revokes SAS signed with that key, but does not affect user delegation SAS (Microsoft, 2026c). The appropriate method therefore depends on the actual delegation type, not simply on the presence of an Azure hostname.
I would explicitly record the disruption domain before authorizing one of these actions. A stored policy may support several approved recipients. A delegation key or account key may support unrelated workloads. An emergency may justify that broader impact, but it should be an understood consequence. Afterward, restore approved relationships selectively; recreating the same broad authority indiscriminately can undo the containment decision.
Choose the narrowest control that actually closes the path
The smallest configuration change is not necessarily the narrowest effective containment. Removing one application record might be operationally cheap while leaving the delegated request valid. Rotating a widely shared credential may stop the request but interrupt many unrelated services. The decision should compare effective access closure, collateral disruption, propagation uncertainty and the possibility of continued issuance.
A resource-level restriction may be appropriate when one object's disclosure presents the immediate problem. A signer-level intervention may be necessary when the signing credential itself is exposed or when the affected resource set is unknown. A policy-bound delegation can offer an intermediate boundary. These are architectural options to evaluate, not a promise that every provider supports individual-link revocation through every mechanism.
Stopping issuance deserves particular attention. If the application has an authorization defect that gives any requester a fresh link, invalidating the currently known URL only creates a temporary interruption. Review the requester-to-resource authorization decision before returning the sharing feature to service. The application should not accept an object identifier supplied by a caller as sufficient evidence that the caller may receive a signed request for that object.
When the signer credential may be compromised, the broader secret-revocation assessment addresses credential consumers and recovery dependencies. The present question remains narrower: which delegated download authority is still accepted, through which paths, and with what evidence? Linking the two investigations is useful; collapsing them into one vague “rotation complete” status is not.
Public access, object versions and deletion are separate questions
Check whether the object is accessible without the leaked signature. AWS describes S3 Block Public Access as controls that limit public access through applicable policies and permissions (AWS, n.d.-a). That is an important independent protection. It should not be treated as a per-link revocation mechanism merely because the leaked URL is publicly reachable. Authenticated delegation and anonymous access need separate verification.
The same distinction applies to application and CDN routes. A signed origin request can be invalid while another authorized or anonymous route still serves the same content. Inventory aliases, exported copies and delivery layers that are relevant to the incident. Do not claim to have eliminated access to the information merely because the specific observed URL stopped returning a successful response.
Deletion requires care in a versioned bucket. AWS documents that a simple delete without a version identifier can create a delete marker rather than permanently remove the previous object version (AWS, n.d.-b). Inspect whether the exposed request identifies a version and what permissions remain for that version. A failed request for the current object name is not sufficient evidence about every historical version.
Do not destroy potentially necessary evidence just to make a test return an error. Preserve the object's identity, relevant version metadata and incident evidence under the organization's authorized retention and response process. If an emergency resource withdrawal is selected, record precisely what was changed and which dependencies were affected. “The file is gone” is too ambiguous to support either a forensic conclusion or a safe restoration decision.
Expiry and caching do not retrieve an existing copy
S3 checks signed-URL expiry when the HTTP request starts. AWS explicitly explains that a download begun before expiry can continue after expiry; a later restart may fail (AWS, n.d.-c). Consequently, a test that waits for the timestamp to pass and observes the existing transfer continuing does not by itself show that expiry is broken. New admission and an already admitted transfer are different observations.
Caching introduces another boundary. Google documents that its built-in Cloud Storage cache has eligibility conditions including public accessibility, while proxies or browsers can cache according to applicable cache metadata. It also warns that an intervening CDN can change that metadata (Google Cloud, 2026a). Do not generalize the built-in public-cache behavior into a claim that all private signed downloads are automatically cached by the provider.
RFC 9111 distinguishes cache-control directives. In particular, no-store directs conforming caches not to retain the request or response, but the specification warns that this is not a sufficient privacy guarantee (Fielding et al., 2022, Section 5.2.2.5). A malicious recipient can retain the document. Adding restrictive cache metadata after disclosure cannot make a previously downloaded file disappear from an uncontrolled device.
For managed delivery layers, assess whether cached content can be invalidated and verify the particular service's supported procedure. This paper does not supply a universal CDN purge command or assume that an origin-policy update automatically reaches every cache. Separate the origin's denial result, controlled cache invalidation and uncontrolled recipient copies in the incident record. Only the first two can normally be verified through infrastructure the organization administers.
Build an acceptance test that measures the intended restriction
A useful containment test compares meaningful requests before and after the change while protecting the exposed authority. Where the incident permits, use a synthetic object and an equivalent test delegation to establish expected behavior. Any use of the actual exposed URL should occur only within the authorized incident procedure and restricted evidence handling. Never paste a live signed URL into a public checker or unrelated support service.
Use the same operation that the link authorizes. Replacing a download request with a different HTTP method can cause a signature mismatch and produce an irrelevant failure. Similarly, a malformed query, missing required header, wrong endpoint or incorrect version can make a request fail independently of the containment control. Preserve enough request context to show that the observed denial concerns the original authority rather than a broken reconstruction.
The basic pair is an old-authority negative case and an approved-replacement positive case. The old request should fail for the intended reason, while a legitimate request through the selected recovery path should succeed. If both fail because the storage service is unavailable, the result does not establish successful authorization repair. If both succeed, the replacement's functionality has not compensated for continued acceptance of the leaked authority.
Repeat the relevant case after the applicable propagation interval and from the delivery path that matters. Record timestamps, resource and version identifiers, policy or credential changes, service request identifiers and the observed result. Keep “change accepted,” “old request denied” and “replacement access works” as separate states. A successful management API response is evidence that a change was accepted, not proof that every data-plane request has already incorporated it.
I propose four outcome labels: denied by the intended control, still admitted, inconclusive, and outside the tested scope. These labels prevent timeouts from becoming false passes and stop a narrow origin test from implying that every cache was checked. An unresolved outcome should lead to another bounded test, a temporary access restriction or an explicit risk decision. It should not disappear when the incident summary is shortened for executives.
Investigate disclosure without leaking the link again
Historical access evidence depends on what was collected before the incident. AWS states that CloudTrail trails and event data stores do not log data events by default; S3 object operations are examples of those events (AWS, n.d.-d). Finding no object-download event in a configuration that did not collect it is an evidence gap, not evidence that nobody downloaded the file.
Review the actual telemetry coverage for the resource, operation, region and exposure period. Application issuance records can show that a link was created or returned, while storage access records can show requests reaching the service. Neither necessarily identifies the human who possessed a copied bearer URL. An IP address, session or signer identity should be interpreted within the limits of the logging mechanism, not automatically labeled as the intended recipient.
Minimize the credential material copied into analysis tools. OWASP's logging guidance identifies access tokens and other secrets as data that should not ordinarily be recorded directly (OWASP Foundation, n.d.). For link issuance, retain a nonsecret correlation identifier and the resource, permitted operation, signer reference and expiry where appropriate. If a live URL must be preserved as evidence, protect it separately from broadly distributed operational logs.
The investigation should distinguish confirmed access, plausible exposure and unknown access. Those categories support different decisions about notification, customer communication and remediation, which must follow the organization's incident process and applicable advice. This paper does not turn a particular log entry into a legal reporting conclusion. It supplies technical evidence boundaries so that the people making those decisions understand what the records can and cannot establish.
Make the disruption decision reviewable
Before a broad revocation, I would draw a small dependency map with four kinds of nodes: issuing applications, signing authority, accepting resources and approved recipients. Connect only relationships supported by configuration or issuance evidence. The purpose is not to inventory every storage object during an emergency. It is to identify which legitimate activities are likely to stop when a particular revocation boundary changes.
For each candidate action, record the expected denied population and the expected preserved population. Withdrawing one stored policy might affect several exports while preserving another application's independent policy. Invalidating a shared signer might affect more than the exposed report. These are hypotheses until checked against the actual deployment. The incident record should identify the confidence and gaps in that dependency assessment, rather than present an incomplete list as exhaustive.
The response owner can then make a concrete choice: accept a known service interruption to reduce further disclosure, choose a narrower control with adequate coverage, or permit a short bounded investigation while another containment measure operates. There is no universal scoring formula that settles this tradeoff. Relevant factors include data sensitivity, suspected ongoing use, remaining delegation lifetime, ability to issue new links and the consequences of interrupting the approved recipients.
Restoration must not silently reverse the action that made the old link fail. If recovery restores the same signer permissions or policy relationship, repeat the old-authority negative case where appropriate. A fresh successful download is only half the acceptance pair. Record whether the old delegation remains invalid after normal access is restored, or whether its natural expiry is now the only barrier. That distinction prevents a temporary restriction from being mistaken for durable revocation.
This dependency view also helps separate evidence of a link leak from evidence of issuer compromise. If new unauthorized delegations keep appearing after one link is contained, investigate the issuance path and its credentials. Do not keep treating each newly found URL as an unrelated clerical mistake when the common authority has become the more consequential hypothesis.
A worked incident: one expired link, two remaining questions
Consider fictional Harbor Metrics, which provides a partner with a time-limited link to a confidential export. The link is accidentally copied into a shared issue. The application team removes the comment and disables the download button. Neither action establishes whether the already issued delegation remains accepted, so the incident lead opens separate records for issuance, access containment and potential disclosure.
The storage team identifies a policy-bound delegation shared by several partner exports. Changing that policy would interrupt all of them. Because the exposed report is sensitive and the current delegation remains usable, the authorized responders accept a bounded interruption and withdraw the relevant policy authority. They preserve the affected object identity and notify the internal owners of the approved integrations. These are hypothetical decisions, not reported customer results.
The first retest is inconclusive because the tester used a different request method. A second authorized test reproduces the relevant download operation and records an attributable denial after the control has taken effect. A replacement delivery path succeeds for the intended partner. The team now has evidence of new-request containment and legitimate recovery, rather than a claim based solely on the management-console change.
Two questions remain. The old issue may have been copied elsewhere, and an earlier successful download cannot be withdrawn. The relevant historical storage logs also have a collection gap. Harbor records those uncertainties instead of stating that no disclosure occurred. Its final remediation includes a dedicated revocation boundary for future exports and a nonsensitive issuance record that can connect a report, delegation and incident without storing live bearer URLs in ordinary logs.
Design future sharing around the response you will need
Short expiries help limit exposure, but they do not replace authorization, narrow scope or revocation planning. Choose the object or version, allowed operation and lifetime according to the recipient's task. Avoid giving a recipient broader storage operations because a general-purpose signing helper makes that convenient. The ability to generate a delegation should itself be restricted and observable.
Separate signing and policy boundaries where the operational cost is justified. If every unrelated export depends on one shared revocation mechanism, containing a small leak can become a large outage. Conversely, creating many identities and policies introduces maintenance work. The defensible design balances those costs against the sensitivity of the content and the consequences of withdrawing each group of delegations.
A legitimate counterargument is that direct signed downloads reduce application load and simplify large-file delivery. Those benefits do not require pretending the URL is bound to the person who received it. If the business needs recipient identity checks on each access, a different delivery architecture may be necessary. Evaluate the required assurance before choosing between delegated object access and an authenticated application-mediated download.
Another counterargument favors deleting the object immediately because it is faster than understanding the token. Emergency withdrawal can be appropriate, but versioning, alternate copies and evidence requirements still matter. A response plan should predefine who can authorize that action, what must be preserved and how the legitimate report will be restored. Speed comes from resolving those decisions in advance, not from assuming every delete operation has identical effects.
This method has limits. Provider guidance describes supported behavior, not the current account configuration. Tests exercise selected requests and paths, not every possible copy of the information. Signing mechanisms, policy propagation and managed delivery layers vary. The thirteen sources are technical guidance and specifications, with shared institutional provenance; they do not demonstrate a measured breach-reduction rate for the combined method.
The result worth accepting is specific: the exposed delegation no longer authorizes new requests through the verified paths; approved sharing works through a reviewed replacement; historical disclosure and untested paths remain explicitly characterized. If your team cannot produce that record, a storage-sharing and incident-readiness assessment can map issuing authority, revocation scope, telemetry and recovery dependencies before the next leaked link forces those decisions into an incident.
References
- Amazon Web Services. (n.d.-a). Blocking public access to your Amazon S3 storage. Retrieved October 29, 2026, from https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html
- Amazon Web Services. (n.d.-b). Deleting object versions from a versioning-enabled bucket. Retrieved October 29, 2026, from https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjectVersions.html
- Amazon Web Services. (n.d.-c). Download and upload objects with presigned URLs. Retrieved October 29, 2026, from https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html
- Amazon Web Services. (n.d.-d). Logging data events. AWS CloudTrail User Guide. Retrieved October 29, 2026, from https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html
- Fielding, R., Nottingham, M., & Reschke, J. (Eds.). (2022). HTTP caching (RFC 9111). Internet Engineering Task Force. https://www.rfc-editor.org/rfc/rfc9111
- Google Cloud. (2026a, October 26). Caching with Cloud Storage built-in cache. https://docs.cloud.google.com/storage/docs/caching
- Google Cloud. (2026b, October 26). Signed URLs. https://docs.cloud.google.com/storage/docs/access-control/signed-urls
- Microsoft. (2023, July 11). Define a stored access policy. https://learn.microsoft.com/en-us/rest/api/storageservices/define-stored-access-policy
- Microsoft. (2026a, January 20). Create a user delegation SAS. https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas
- Microsoft. (2026b, February 27). Grant limited access to Azure Storage resources using shared access signatures (SAS). https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview
- Microsoft. (2026c, August 11). Manage storage account access keys. https://learn.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage
- Nelson, A., Rekhi, S., Souppaya, M., & Scarfone, K. (2025). Incident response recommendations and considerations for cybersecurity risk management: A CSF 2.0 community profile (NIST SP 800-61r3). National Institute of Standards and Technology. https://doi.org/10.6028/NIST.SP.800-61r3
- OWASP Foundation. (n.d.). Logging cheat sheet. OWASP Cheat Sheet Series. Retrieved October 29, 2026, from https://cheatsheetseries.owasp.org/cheatsheets/Logging_Cheat_Sheet.html