[AWS] 파일 업로드 시SignatureDoesNotMatch / AccessDenied에러

pola·2025년 5월 8일

Company

목록 보기
7/7
post-thumbnail

요즘에 바빠서 글 못올렸는데 삽질한 시간이 아까워서 글씀..

🧨 S3 AccessDenied… 알고 보니 NotAction에 막혀 있었던 이야기

회사에서 운영 중인 기능을 개선하면서 S3를 통해 프론트엔드에서 직접 파일 업로드를 진행하기로 함
Next.js를 사용하고 있어서, app/api/route.ts에서 Presigned URL을 발급해 파일을 업로드하는 구조로 설계..

그런데…

❗ SignatureDoesNotMatch 에러 발생

Presigned URL을 받아서 업로드를 시도했는데 SignatureDoesNotMatch 오류가 발생
그래서 테스트를 위해 임의로 파일을 S3에 업로드한 후, Get 요청으로 불러오려고 했는데…

이번엔 AccessDenied.

🧩 정책도, 환경변수도 문제 없어 보였는데

  • .env 파일 확인 ✅
  • 버킷 정책 확인 ✅
  • IAM 사용자 권한 확인 ✅

→ 그런데도 여전히 AccessDenied

답답해서 AWS Policy Simulator를 열어 확인해보니,

👉 Show statement in Force_MFA (IAM Policy) 가 뜸!

✅ Force_MFA 정책 수정 → 예외 설정

기존 Force_MFA 정책에서 MFA를 안 쓰면 s3:* 포함 대부분의 액션이 거부되게 되어 있었고,
예외로 내 계정만 빼줌

"ArnNotEquals": {
  "aws:PrincipalArn": "arn:aws:iam::id:user/email"
}

그런데도 여전히 AccessDenied…

💥 결국 원인은 NotAction에 있었다

알고 보니…

❗ NotAction에서 s3:*가 빠져 있어서,
해당 요청이 조건이 맞더라도 먼저 거부되고 있었음!!

최종해결

"NotAction": [
  ...
  "s3:*" // ✅ 여기에 추가!
]

이걸로 문제 해결 🎉
Presigned URL로 PUT/GET이 다 가능하게됨

예전부터 있던 정책이였기때문에 확인하기 쉽지않았음...

깨닳은 점

  • Deny 조건이 Allow보다 우선된다.
  • Policy Simulator 없었으면 해결 못했다..

오늘 하루 이걸로 삽질함

진짜....................

profile
pola

0개의 댓글