TIL,WIL(일간,주간 회고)
[TIL]<s3, nestjs, aws-sdk> listObjectsV2 access denied 에러
worldint
2024. 4. 2. 12:35
nestjs서버에서 aws-sdk를 사용하여
s3에 있는 객체리스트를 받아오는 코드 구현중 "access denied"에러 발생
확인해보니
iam 계정에 붙은 정책에 action과 resource가 아래와 같이 있을 때,
{
"Statement": [
{
"Sid": "123",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
],
"Resource": [
"arn:aws:s3:::my-files/*"
]
}
]
}
ListBucket 액션의 대상 리소스는 버킷이어야 동작한다
위와 같이 와일드카드(*)로 되어있으면 동작하지 않음
계속 GetObject는 되는데 왜 쟤만 access denied 되는지
상관없는 버킷정책과, 객체에 붙은 권한 등에서 삽질을 하다가
확인함
결론: ListBucket을 사용할 때는 Resource가 정확히 버킷이어야 함
"Resource": [
"arn:aws:s3:::my-files"
]
//getObject와 statement를 나눠주던가 resource를 아래와 같이 쓰던가 하면 됨
"Resource": [
"arn:aws:s3:::my-files"
"arn:aws:s3:::my-files/*"
]