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/*"
            ]