Files
llm-wiki/raw/official-docs/file-s3-presigned-url-upload.md
T

8.8 KiB

title, source_type, url, archive_url, status, confidence, tags, related_projects, related_branches, created, last_reviewed
title source_type url archive_url status confidence tags related_projects related_branches created last_reviewed
AWS S3 — Presigned URL upload (direct browser-to-S3) official-doc https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html raw high
file
s3
presigned-url
upload
ca-skeleton
official-doc
ca-skeleton-operational-contract
feature-file-resource-handling-contract
2026-05-22 2026-05-27

AWS S3 — Uploading objects using presigned URLs

Layer: raw/official-docs/ — AWS S3 User Guide "Uploading objects with presigned URLs" 페이지 verbatim 발췌. ca-tmpl file handling 대안 비교 (app-via vs direct S3).

Parent / 활용 branch (필수)

Branch 이 자료가 정당화하는 결정
raw/branch-notes/feature-file-resource-handling-contract direct S3 (presigned URL) 가 app-via 3-layer (gateway 20MB / Spring 10MB / request 12MB) limit 우회 대안임을 정당화 — byte 가 앱을 거치지 않으므로 size enforcement 위치가 달라짐

컨텍스트

ca-tmpl의 file handling 결정(10MB Spring / 12MB global / 20MB gateway)은 앱 서버를 경유하는 경우의 트리플 layer. 대안인 direct S3 upload (presigned URL) 은 앱 서버가 byte를 받지 않아 size limit 의미 자체가 달라짐. 운영 비교가 필요.

출처 / Source

핵심 인용 / Key quotes (verbatim)

[§Uploading objects with presigned URLs — opening] "You may use presigned URLs to allow someone to upload an object to your Amazon S3 bucket. Using a presigned URL will allow an upload without requiring another party to have AWS security credentials or permissions. A presigned URL is limited by the permissions of the user who creates it."

[§Uploading objects with presigned URLs — opening] "That is, if you receive a presigned URL to upload an object, you can upload an object only if the creator of the URL has the necessary permissions to upload that object."

[§Uploading objects with presigned URLs — opening] "When someone uses the URL to upload an object, Amazon S3 creates the object in the specified bucket. If an object with the same key that is specified in the presigned URL already exists in the bucket, Amazon S3 replaces the existing object with the uploaded object. After upload, the bucket owner will own the object."

[§Using the AWS SDKs — Note] "If you use the AWS CLI or AWS SDKs, the expiration time for presigned URLs can be set as high as 7 days."

[§Using the AWS Toolkit for Visual Studio — step 7] "Choose PUT to specify that this presigned URL will be used for uploading an object."

Claims Extracted / 추출된 주장

Claim ID Claim (이 자료가 직접 말하는 것) Evidence quote Strength Applies to Does not prove
FS3-PRE-C1 presigned URL 은 받는 측에 AWS 자격증명/권한을 요구하지 않고 upload 를 허용하며, URL 의 권한 범위는 발급자의 권한으로 제한된다 [§opening] "Using a presigned URL will allow an upload without requiring another party to have AWS security credentials or permissions. A presigned URL is limited by the permissions of the user who creates it." official-vendor-doc S3 PUT 업로드용 presigned URL 발급 발급자 권한이 동적으로 revoke 되었을 때 이미 발급된 URL 이 즉시 무효화된다는 뜻은 아님
FS3-PRE-C2 presigned URL 로 업로드 시 같은 key 의 객체가 이미 있으면 S3 는 기존 객체를 새 객체로 교체 한다 [§opening] "If an object with the same key that is specified in the presigned URL already exists in the bucket, Amazon S3 replaces the existing object with the uploaded object." official-vendor-doc 동일 key 재업로드 시나리오 versioning 활성화 bucket 의 동작은 본 인용 범위 밖 (별도 versioning 문서 필요)
FS3-PRE-C3 upload 완료 후 객체의 소유권은 bucket owner 에게 귀속된다 [§opening] "After upload, the bucket owner will own the object." official-vendor-doc 표준 bucket (Object Ownership 기본 설정) ACL/Object Ownership 설정 변경 시의 동작은 별도
FS3-PRE-C4 AWS CLI/SDK 로 presigned URL 발급 시 expiration time 은 최대 7일 까지 설정 가능 [§Using the AWS SDKs — Note] "If you use the AWS CLI or AWS SDKs, the expiration time for presigned URLs can be set as high as 7 days." official-vendor-doc CLI/SDK 기반 presigned URL 발급 모든 발급 방법 (예: console / signer credential 형식별) 의 한도가 동일하다는 뜻은 아님
FS3-PRE-C5 upload 용 presigned URL 의 HTTP 메소드는 PUT 으로 지정한다 [§Toolkit step 7] "Choose PUT to specify that this presigned URL will be used for uploading an object." official-vendor-doc Toolkit/SDK 기반 단일 객체 업로드 URL 발급 POST policy 기반 browser POST 업로드 (별도 sigv4 POST 페이지) 와는 다른 메커니즘

Strength 허용값 사용

  • official-vendor-doc — AWS 공식 User Guide

Usage Boundaries / 적용 경계

  • 이 자료가 직접 증명하는 것:
    • FS3-PRE-C1: presigned URL 의 권한 위임 메커니즘 (발급자 권한 = URL 권한)
    • FS3-PRE-C2: 동일 key 재업로드 시 replace 동작 (default)
    • FS3-PRE-C3: upload 완료 후 ownership 귀속처
    • FS3-PRE-C4: SDK/CLI 발급 시 최대 7일 expiration
    • FS3-PRE-C5: 단일 객체 업로드용 메소드 = PUT
  • 이 자료가 증명하지 않는 것:
    • content-length-range / POST policy 기반 size limit enforcement (보조 URL sigv4-HTTPPOSTConstructPolicy.html 의 별도 페이지 영역)
    • antivirus / content-type 검증을 S3 가 수행한다는 사실 (별도 S3 event → Lambda 패턴 필요)
    • presigned URL 이 발급 후 발급자 자격증명 rotation 으로 즉시 무효화되는지 (별도 IAM 동작 문서)
    • direct S3 upload 가 app-via 보다 어떤 환경에서 더 비용효율적인지 (운영 비교는 별도 분석)
  • 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
    • ca-tmpl 의 "EXTERNAL_OUTBOUND_ALLOWED capability" 가 presigned URL 발급 시점의 signing 호출에 어떻게 매핑되는지
    • quarantine bucket → scan → main bucket 패턴의 정확한 S3 event 트리거 구성
    • SPA 의 PUT 호출 시 browser CORS preflight 요구사항 (별도 S3 CORS 문서)

메모 / Notes (내 프로젝트 해석)

본 섹션은 자료 직접 인용 아님. ca-tmpl 결정 컨텍스트 해석.

  • ca-tmpl 비교:
    • App-via upload (ca-tmpl 현재 결정): gateway 20MB → Spring 10MB single + 12MB request total. 앱이 byte를 받아 antivirus/content-type 검증 가능. 단 app instance memory/disk 압박.
    • Direct S3 (대안): 앱이 presigned URL만 발급. byte는 client → S3 직행. app instance load 0. 단 content-type 검증과 antivirus는 S3 event(ObjectCreated) → Lambda/worker로 비동기화.
  • size limit enforcement 위치 차이:
    • app-via: Spring multipart parser가 enforce.
    • direct S3: presigned URL의 POST policy content-length-range 또는 PUT 시 Content-Length 헤더와 bucket policy로 enforce.
  • ca-tmpl 의사결정 trade-off:
    • direct S3는 path traversal 자동 해결 (opaque key 발급).
    • direct S3는 antivirus가 post-upload 가 되어 ca-tmpl의 "antivirus at gateway" 결정과 충돌 (gateway가 우회됨). 별도 "S3 quarantine bucket → scan → main bucket" pattern 필요.
  • ca-tmpl 결정인 "outbound = object store call이 EXTERNAL_OUTBOUND_ALLOWED capability 요구"는 presigned URL 발급 시점에서도 유효 (signing은 outbound credential 사용).

관련 ca-tmpl branch / contract

  • 적용 branch-note:
  • canonical contract 섹션:
    • raw/project-notes/ca-skeleton-operational-contract#18. Control Plane Contract
  • 대안 그룹: Group G-J — Privacy / File / Domain Modeling (file resource handling)
  • 본 source의 위치: 대안 1 — Direct S3 presigned URL upload (app via 3-layer 우회)