
요즘에 바빠서 글 못올렸는데 삽질한 시간이 아까워서 글씀..
회사에서 운영 중인 기능을 개선하면서 S3를 통해 프론트엔드에서 직접 파일 업로드를 진행하기로 함
Next.js를 사용하고 있어서, app/api/route.ts에서 Presigned URL을 발급해 파일을 업로드하는 구조로 설계..
그런데…
Presigned URL을 받아서 업로드를 시도했는데 SignatureDoesNotMatch 오류가 발생
그래서 테스트를 위해 임의로 파일을 S3에 업로드한 후, Get 요청으로 불러오려고 했는데…
이번엔 AccessDenied.
→ 그런데도 여전히 AccessDenied
답답해서 AWS Policy Simulator를 열어 확인해보니,
👉 Show statement in Force_MFA (IAM Policy) 가 뜸!
기존 Force_MFA 정책에서 MFA를 안 쓰면 s3:* 포함 대부분의 액션이 거부되게 되어 있었고,
예외로 내 계정만 빼줌
"ArnNotEquals": {
"aws:PrincipalArn": "arn:aws:iam::id:user/email"
}
그런데도 여전히 AccessDenied…
알고 보니…
❗ NotAction에서 s3:*가 빠져 있어서,
해당 요청이 조건이 맞더라도 먼저 거부되고 있었음!!
"NotAction": [
...
"s3:*" // ✅ 여기에 추가!
]
이걸로 문제 해결 🎉
Presigned URL로 PUT/GET이 다 가능하게됨
예전부터 있던 정책이였기때문에 확인하기 쉽지않았음...
깨닳은 점
오늘 하루 이걸로 삽질함
진짜....................