S3 access ...?
yeomanda 프로젝트에서 추가 기능을 넣기 위해 회원정보 수정 기능
을 넣으려고 했다.
회원정보 수정이야 그냥 기존에 쓰던 api 혹은 함수를 사용하면 되겠다~ 싶어서 만만하게 봤는데, s3에서 데이터를 가져올때 getObject()
함수만 생각했는데,
결과가 나오지 않아서 뭐가 문제일까 싶었는데, 객체의 리스트를 보여지는 함수는 listObjects()
를 사용하면 객체리스트를 볼 수 있다.
const params_update2 = {
Bucket : '[name]',
Prefix : '[path]'
}
const updatedFilePath = await s3.listObjects(params_update2).promise()
파라미터에는 bucket, key 가 아니라, bucket, prefix 로 대체되어야 한다.
또한 가장 중요한 문제가 있었는데, s3에서 delete를 하기 위해서는 권한을 정확하게 설정해줘야 한다.
- IAM>사용자 >권한
여기서 s3에 관한 정책중{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*", "s3-object-lambda:*" ], "Resource": "*" } ] }
모든 정책이 위와 같이 s3와 관련되 정책에 한해서는
"Effect": "Allow"
이어야 한다.
직접 연결에 많은 정책들이 있는데 그 중에 어떤 정책에서도 s3에 관해서"Effect": "Deny"
가 있어서는 안된다.
- 버킷>권한
버킷정책{ "Version": "2012-10-17", "Id": "Policy1634782651426", "Statement": [ { "Sid": "Stmt1634782600366", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::936611888126:user/jaemin" }, "Action": [ "s3:Get*", "s3:PutObject*" ], "Resource": "arn:aws:s3:::yeomanda-userface/*" }, { "Sid": "Stmt1634782600366", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::936611888126:user/jaemin" }, "Action": [ "s3:List*", "s3:ListBucket" ], "Resource": "arn:aws:s3:::yeomanda-userface" }, { "Sid": "Stmt1634782600366", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::936611888126:user/jaemin" }, "Action": "s3:DeleteObject", "Resource": "arn:aws:s3:::yeomanda-userface/*" } ] }
key 설명
Principal : 누구에게 다음과 같은 권한을 줄 것인지.*
로 처리하면 누구나 사용할 수 있다.
Effect : 해당 권한을 사용할 것 인지 말것인지. Deny이면 해당 권한을 부여하지 않는다.
Action : 어떤 행동에 대한 권한인지
Resource : 어떤 버킷에 대한 권한인지
추가적으로 여기서 다른 key들은 같은데 왜 Action에 대해서만 굳이 나눈 이유는 List Action에 대해서는 Resource가 다른 것을 볼 수 있다. 이렇기 때문에 나눠줬다.
다음과 같이 처리하면 s3에 대해서 모든 권한을 처리할 수 있다.
Author And Source
이 문제에 관하여(S3 access ...?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jaymee/S3-access-저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)