
A practical design review for S3 download and upload delegation. The guide separates requested expiry, temporary credentials, signature-age restrictions, signed payload expectations and existing transfers, then defines useful issuance and acceptance evidence.
At a glance
Key findings
- The requested expiry is only one limit on a presigned request; signing credentials and applicable policy can shorten access.
- A presigned URL is reusable and its expiry does not necessarily terminate a download already in progress.
- Upload authorization, integrity verification and approval for downstream use are separate decisions.
Delegate one operation deliberately
Issue an S3 presigned URL only after deciding which operation the recipient may perform, which object it addresses and how long a new request should remain acceptable. Treat the URL itself as a credential. Its usable window depends on the requested expiry, the validity of the signing credentials and applicable access policies. It is not a one-use download ticket, and it is not an instruction to disconnect a transfer at a particular moment. [1][2]
The distinction matters when an application presents a friendly button labeled temporary access. Behind that button, a signer uses AWS credentials to authorize a request containing a bucket, object key, HTTP method and expiration. A recipient holding the resulting URL can submit the matching request without separately presenting those AWS credentials. The recipient does not thereby receive arbitrary S3 permissions, but the delegated request must still have an appropriately narrow scope. [1]
Use a signing component with permissions appropriate to the workflow. A service issuing downloads should not acquire unrelated write or administrative authority simply because it already has a convenient role. This is a design recommendation: limiting the signer reduces what an issuance error can delegate. Keep the application decision about the recipient and object before signing, rather than asking the possession of a valid URL to prove that the business decision was correct.
For example, a hypothetical document service can resolve an authenticated user's document identifier to a server-controlled object key, check current access and then issue a GET delegation. Allowing the client to supply an arbitrary bucket and key would move an important authorization decision into untrusted input. The signature could be cryptographically valid while the application had selected the wrong object. No URL expiration setting repairs that object-selection mistake.
S3 permits repeated use of the same presigned URL before it expires. If the product promises one download or one upload, that promise requires an application design beyond presigning. An application can control whether it issues another link, but removing its own issuance record does not inherently instruct S3 to reject an already-issued request. Avoid calling an application database flag revocation unless the actual storage access path consults and enforces it. [1]
Separate the three expiry constraints
The requested lifetime is the period encoded during URL creation. The credential lifetime is the time during which the signing credential remains valid. A signature-age policy can impose an additional restriction on the signed request. These constraints are related but not interchangeable: an application can request a long interval without having credentials capable of supporting it, and an administrator can impose a shorter permitted age through policy. [1][2][4]
Temporary credentials are the common source of a surprising early expiration. AWS documents that a URL created with temporary credentials expires when those credentials expire, even if the requested URL expiry is later. Revoking, deleting or deactivating the credential can also invalidate URLs created with it. The signing service should therefore know the credential source and the remaining validity available at issuance, instead of copying the requested interval into a misleading user-facing promise. [1]
Treat the earliest applicable time boundary as a useful design model, not a complete replacement for policy evaluation. Authorization can also depend on permissions and request conditions that change independently of the clocks. An object can be removed, a policy can deny the action or a required network path can be unavailable. A countdown displayed by an application communicates an intended expiry, not a guarantee that every request before zero will succeed.
Signature age is expressed in milliseconds for the S3 policy condition. AWS's prescriptive guidance uses a fifteen-minute restriction in its examples, while the S3 policy reference also shows a ten-minute example. Neither is a universal default. They are chosen guardrail values illustrating how a policy can shorten the accepted age of a presigned request. Copying an example without deciding what the interval means for the workflow turns a policy sample into an accidental service requirement. [2][4]
The expiry check occurs when S3 receives a new request. AWS specifically distinguishes a download that begins before expiration and continues afterward from a connection that fails and needs to restart after expiration. The continuing transfer can complete; the later restarted request can be rejected. A requirement to stop access at an exact moment therefore needs a different analysis from a requirement to stop starting new downloads. [1]
This is especially relevant to large files and unstable networks. The application should decide what the recipient experiences if a legitimate download must resume after the URL is no longer valid. A replacement URL may be appropriate only after a fresh authorization check. The recovery path should not automatically issue a new delegation to anyone presenting the expired URL, because possession of old access is not necessarily current permission.
A new request crosses several independent checks
A new S3 request must satisfy the signed request scope, credential validity, time limits and applicable policies. Conceptual flowchart, not a measured result.

Source. AWS, S3 presigned download and upload URLs, Credential-dependent expiry, bearer access, request-time expiry and policy restrictions. [1]; AWS, Additional presigned URL guardrails, Signature-age policy and operational impact of restrictions. [2]; AWS, S3 access through VPC endpoints, SourceVpce restrictions and console access warning [6].
Method. Original conceptual flowchart synthesizing the cited documentation. It represents design relationships, not observed test results. Reviewed 2026-09-02.
Accessible table and figure data
| Component | Role |
|---|---|
| New request | Method, object and signed fields |
| Signer credentials | Still valid and permitted |
| Time and policy | Requested expiry and signature age |
| S3 decision | Evaluate applicable access policies |
| Component | Role |
|---|---|
| New request | Method, object and signed fields |
| Signer credentials | Still valid and permitted |
| Time and policy | Requested expiry and signature age |
| S3 decision | Evaluate applicable access policies |
Compare creation limits without promising access
The S3 console supports a requested expiration from one minute through twelve hours. Programmatic creation through a CLI or SDK supports a maximum of seven days. The SigV4 query reference expresses the maximum X-Amz-Expires value as 604800 seconds. Those are documented creation limits, not a recommendation to use the longest interval or a promise that temporary credentials remain valid for that long. [1][3]
The chart converts seven days to 168 hours so the two creation paths share an understandable unit. It deliberately does not add an average role-session lifetime or a made-up recommended duration. Actual temporary credentials depend on the way the signer obtained them. Plotting one guessed role lifetime beside these maxima would imply a product guarantee that the cited sources do not provide.
A shorter interval can reduce the time a copied URL remains useful, but it can also increase retries and replacement-link requests. Choose the interval from the application's exposure tolerance and supported user workflow. For an interactive download, issuance close to the moment of use may be practical. An asynchronous export delivered later needs an explicit handoff mechanism; generating a URL early and leaving it in a queue can consume the useful window before the recipient sees it.
Separate that product choice from the administrator's guardrail. The application may request a short lifetime for its normal workflow while an organization policy imposes an upper bound to catch mistakes. The two controls serve different owners. Document who can change each value and which exception process allows a longer delegation, rather than treating the signing code as the only authority over lifetime. [2]
The signing service also needs an honest error model. A failed request before the displayed expiry is not necessarily a broken signature implementation. Credential expiry, explicit policy denial and network restrictions can produce failures that look similar to the recipient. Preserve non-secret context that identifies the intended object, operation and issuance record so an operator can investigate without asking the user to paste the complete credential-bearing URL into a ticket.
Creation limits are not effective access guarantees
S3 documents maximum requested lifetimes of 12 hours through the console and 168 hours through a CLI or SDK. Credential expiry and policy may shorten effective access. Documentation checked 2026-09-02.

Source. AWS, S3 presigned download and upload URLs, Credential-dependent expiry, bearer access, request-time expiry and policy restrictions. [1]; AWS, S3 Signature Version 4 query authentication, X-Amz-Expires and signed headers [3].
Method. Source-derived documented values, not measured performance. AWS console maximum 12 hours retained; 7 days multiplied by 24 equals 168 hours. No measured access duration. Reviewed 2026-09-02.
Accessible table and figure data
| Creation path | Maximum requested lifetime in hours |
|---|---|
| S3 console | 12 |
| CLI or SDK | 168 |
| Creation path | Maximum requested lifetime in hours |
|---|---|
| S3 console | 12 |
| CLI or SDK | 168 |
Specify the upload contract
An upload delegation needs more than permission to send bytes to a bucket. Decide who chooses the object key, whether an existing object may be replaced, which request fields are signed and how integrity is verified. S3 documents that uploading through a presigned URL to an existing object key replaces that object. A filename chosen for convenience can therefore become an overwrite decision. Prefer a server-controlled object identity where the application needs isolation between submissions. [1]
The signature authenticates the request under its signing contract. It does not establish that an uploaded document is safe, belongs to the intended tenant or should immediately enter a downstream processing system. Keep those decisions visible. A useful proposed intake model separates permission to upload, confirmation that the expected object arrived and approval to consume its contents. Each stage can retain a non-secret identifier without treating every successful PUT as a completed business transaction.
SigV4 presigned uploads support checksum mechanisms described in the S3 guidance. A checksum can detect a mismatch between expected and received bytes, but the expected value and chosen algorithm must have a defined source. If the same untrusted party supplies both arbitrary content and its checksum, the match establishes transfer consistency with that declaration, not that the content is benign or authorized. This is an integrity boundary, not a malware or business-rule verdict. [1][7]
Specify the checksum and header behavior in the client contract. The request has to agree with the values included in the signature calculation. Conversely, a field not protected by the relevant signing mechanism should not be described as authenticated merely because another part of the request is signed. The SigV4 query reference describes the signed-header parameter and the query parameters that participate in authentication; use the actual SDK and request construction when verifying the integration. [3]
Do not assume a bucket-policy example for one authentication form transfers unchanged to another. The S3 SigV4 policy reference distinguishes authorization-header requests, query-string authentication and POST forms. It also documents restrictions on the x-amz-content-sha256 condition's applicability. A policy that is appropriate for a header-authenticated upload can have a different effect on a presigned URL. Review the precise request type before claiming that a body-signing policy covers this path. [4]
Large-object intake adds multipart state that this signing guide does not replace. Initiation, part identifiers, completion and integrity verification remain necessary even when individual requests are presigned. The application should retain ownership of the intended object and completion decision across those requests. A collection of authorized part transfers is not the same evidence as a completed object that is ready for consumption.
Test guardrails with the real caller
Network restrictions can constrain where a presigned request is accepted, but the relevant network is the recipient's path to S3. A signing service inside an approved VPC does not make a later browser request originate from that VPC. Review the actual DNS resolution, proxy, endpoint and routing behavior of each caller class. The credential issuer and the party using the delegated request may have entirely different network paths. [1][6]
AWS's VPC endpoint bucket-policy examples warn that a restrictive endpoint or VPC condition can block console access. That is not evidence the policy is defective; it may be an intended consequence. It is nevertheless an operational consequence that must be understood before rollout. Use the correct endpoint identifier and retain an authorized recovery path, because a copied restrictive example can exclude the administrators attempting to repair it. [6]
The presigned URL guardrail appendix also documents effects on AWS service integrations. Signature-age restrictions, authentication-type restrictions and network requirements can interact with service-generated requests. The examples include service-specific durations and exceptions rather than a universal guarantee. Inventory integrations such as copy or analytics paths that depend on S3 access, and evaluate the relevant documented exception before deploying a broad deny. [5]
Exceptions deserve the same scrutiny as the primary restriction. The prescriptive guidance discusses principal tags as one possible way to identify principals allowed longer presigned access. If such a tag can be set by an untrusted principal or introduced through an uncontrolled session-tag path, the exception can defeat the intended guardrail. Restricting who may grant the exception is part of the policy design, not merely a naming convention. [2]
Use a scoped rollout with tests that distinguish intended denial from accidental disruption. An approved recipient on the expected path should succeed with a fresh URL. A request outside the approved path should fail where the policy intends that result. A service integration that needs an exception should be tested independently of a browser download. Document the caller and request form for each case so one successful path is not silently generalized to every S3 client.
Keep issuance evidence without retaining the credential
An issuance record can explain the application decision without copying the full URL into ordinary logs. Useful proposed fields include the application request identifier, intended recipient or session reference, object identity, HTTP method, requested lifetime, credential-source class and policy version relevant to the workflow. Do not log signing keys, session tokens or credential-bearing query strings merely to make troubleshooting convenient. Access to a diagnostic system should not become an alternate distribution channel for the delegated object.
Store only the level of recipient detail the operational purpose requires. A request identifier that can be resolved under controlled access may be enough for routine support. The signing service should also distinguish a denied issuance from a URL that was issued but later rejected by S3. Those events answer different questions. The first concerns the application authorization decision; the second may concern credentials, request construction, policy or the recipient's network path.
Build acceptance cases around the misleading assumptions. Reuse a URL within its valid window and confirm whether that behavior agrees with the product promise. Exercise an expired temporary credential on a new request. Test the wrong HTTP method, an unexpected signed header, an incorrect checksum and an interrupted transfer that requires a later request. These are proposed checks for an authorized environment, not results obtained while preparing this article. [1][3][7]
Where investigation requires S3 activity evidence, configure and verify the relevant event coverage separately. An application issuance log does not prove the URL was used, and an S3 access record does not reconstruct why the application decided to issue it. Connect the two through a defined, non-secret correlation strategy where the workflow supports one. Avoid implying that every object operation is logged merely because the account has a management-event trail.
The completed design should let an owner answer three questions precisely: what request was delegated, what conditions can stop a new use and what evidence confirms the intended object outcome. That is a more useful contract than a bare expiry timestamp. It remains accurate when credentials rotate, a recipient retries or an organization adds a new policy restriction.
Method and provenance
Primary documentation and standards were reviewed on September 2, 2026. The guide combines source-supported behavior with explicitly framed implementation recommendations and hypothetical examples.
No customer deployment, production environment or live cloud configuration was tested. Product behavior is limited to the cited documentation and stated scope; actual versions, policies and application behavior require verification.
AI assistance. AI-assisted research synthesis, drafting and consistency checks. No human review or firsthand deployment experience is claimed.
Published under the Cloud Security Desk organizational byline. Read the practitioner guide policy.
References
- S3 presigned download and upload URLs AWS. Accessed .
- Additional presigned URL guardrails AWS. Accessed .
- S3 Signature Version 4 query authentication AWS. Accessed .
- S3 Signature Version 4 policy keys AWS. Accessed .
- Presigned restrictions and AWS service behavior AWS. Accessed .
- S3 access through VPC endpoints AWS. Accessed .
- S3 object integrity checks AWS. Accessed .