AWS S3에 올린 파일 접근시 AccessDenied 해결

    Background

    - 프로젝트 도중 tts로 음성파일을 만들어 s3 버킷에 올려 프론트로 오디오를 전송해주어야하는 상황. 

    - api 상으로는 s3에 정상적으로 올라간 url이 response body로 전달되는 것을 확인

    - 그 url에 접속하면 다음과 같은 AccessDenied 화면이 뜨는 상황

    해결방안

    - 이미 IAM에 AmazonS3FullAccess 권한을 준 상황. 

    - Amazon S3 > 버킷 > bongabang(해당 버킷 이름) > 권한 > 버킷정책 > 편집 > 정책 생성기

    - Select Type of Policy 로는 S3 Bucket Policy 선택

    - Add Statements 에서 Effect: Allow, Principal: 아무 이름, Actions: All actions(*), Amazon Resource Name (ARN): 해당 ARN (버킷 정책 생성기 들어가기 전 화면에서 확인 가능) 작성하고, Add Statement를 클릭하면 나온 정책을 버킷 정책에 붙여넣으면 된다. 

    [ 해결점 1 ]

    나의 경우 버킷 bongabangaudio 안에 2개의 폴더가 존재했는데, 버킷 정책 생성기로 부터는 "Resource": "arn:aws:s3:::bongabangaudio" 가 나왔다. 이렇게 만들어진 정책을 저장하자, , 내가 url을 통해 접근하고 싶었던 파일은 bongabang 버킷 내의 audio 폴더 안에 있는 파일이었기때문에 "Resource": "arn:aws:s3:::bongabangaudio/*" 로 변경해주어야 정상 작동 하였다. 

    [ 해결점 2 ] 

    나의 경우 버킷 정책 생성기로 부터는 "Principal": { "AWS": [ "getobject" ] } 이렇게 작성된 정책이 나왔는데, 버킷 정책 저장을 누르자, Invalid principal in policy 와 같은 에러 메세지가 뜨길래, "Principal": "*"로 바꿔주었더니 정상 작동 하였다.

     

    url을 통해 mp3 file 이 저장되는 것을 확인할 수 있다. 

     

    댓글