버킷 만들기 클릭
버킷 이름과 aws 리전을 설정해준다. (bucket이름은 기존의 것과 중복될 수 없다.)
객체소유권 - ACL 비활성화됨
퍼블릭 엑세스 차단 설정 - 모든 퍼블릭 엑세스 차단을 비활성화하는 것 선택
// 테스트 용으로 생성하는 것이므로 s3 url에 쉽게 접근 가능하도록 모든 퍼블릭 엑세스 차단을 비활성화 하였다.
나머지 사항들은 기본 선택된 것대로 두고 버킷 만들기 클릭
생성된 버킷을 클릭한 후 권한 클릭
버킷 정책의 편집 클릭 후 버킷 정책 편집에 들어와서 정책 생성기 클릭
아래의 설정 후 Add Statement를 클릭하고 , 이후에 밑에 생긴 Generate Policy를 클릭한다.
// 설정에 관한 부분은 본인의 필요에 맞게 변경 가능하다.
- Select Type of Policy : S3 Bucket Policy
- Effect : Allow
- Principal : *
- Acctions: getObject, getObjectAcl, putObject
~ getObject : 버킷에 파일을 다운로드하는 것을 허용
~ getObjectAcl : 파일에 대한 ACL 권한을 허용
- Amazon Resource Name (ARN) : arn:aws:s3:::my-s3-bucket--test/*
~ arn 의 기본 형식 : arn:aws:s3:::[bucketName]/[keyName]
~ 끝에 /*는 정책이 해당 버킷 내의 모든 파일에 적용됨을 의미한다.
클릭 후 나온 창의 객체를 복사한 후 다시 버킷창으로 돌아와서 버킷 정책 부분에 복사 붙여넣기 한다.
복사 붙여넣기 한 후 변경 사항 저장을 클릭한다.
권한 탭 아래의 cors 설정에서 편집을 클릭한 후 아래의 내용을 입력 후 변경사항저장을 클릭한다. 이 역시 각자 개발 환경에 따라 변경 가능하다.
[
{
"AllowedHeaders":[
"*"
],
"AllowedMethods":[
"PUT",
"HEAD",
"GET"
],
"AllowedOrigins":[
"*"
],
"ExposeHeaders":[]
}
]
이후 s3 사용을 위한 권한을 보여하기 위해 본인의 계정 부분을 클릭후 나오는 대시보드에서 보안자격증명을 선택한다.
순서는 우선 1) 어떠한 권한을 줄 것인지 설정하기 위한 권한 정책 생성 후 , 2)생성한 권한 정책을 사용자에게 부여하는 순서로 진행될 것이다.
왼쪽의 대시보드에서 정책을 선택한 후 나온 화면에서 정책 생성을 클릭한다. // 기존에 aws 자체적으로 생성된 정책을 이용할 수도 있다.
- 서비스 : S3
- 작업 - 엑세스 레벨 : 읽기, 쓰기
리소스 부분의 object ARN 추가 클릭
- Bucket name : 내가 생성한 버킷명
- Object name : 해당 버킷내의 객체 ~ *는 모든 객체를 의미한다.
추가 클릭 후 다음 : 태그, 다음 : 검토 클릭 후 정보 입력 후 정책 생성 클릭
성공적으로 정책 생성이 이루어졌다면 다음으로는 생성된 정책을 사용자에게 부여한다. 왼쪽의 대시보드에서 사용자 선택 후 사용자 추가를 클릭한다.
생성할 사용자의 이름과 AWS 엑세스 유형을 선택한다. 나는 node.js 에서 s3 작업을 하기 위해 엑세스 키 - 프로그래밍 방식 엑세스를 선택했다.
기존 정책 직접 연결 클릭 후 아까 생성한 정책의 이름을 정책 필터에 입력하여 찾은 후 선택한 후 다음 : 태그, 다음 : 검토, 사용자 만들기를 클릭한다.
위와 같이 작업하면 아래와 같은 화면이 나오는데 여기서 엑세스 키 ID와 비밀 엑세스 키를 잘 보관하여 둔다. 해당 키들을 이용하여 node.js 환경에서 aws-sdk 모듈을 이용하여 s3이미지를 업로드할 것이다.
node.js 환경에서 s3 사용을 위한 코드는 다음과 같다.
~ region, bucketName, accessKeyId, secretAccessKey의 변수명은 다른게 설정해서는 안 된다.
서버를 실행하는 파일은 다음과 같은 구현하였다.(참고로 타입스크립트를 이용하였다. 큰 차이는 없다.)
이미지를 업로드할 브라우저는 다음과 같이 구현하였다.
출처
'AWS' 카테고리의 다른 글
[ AWS ] - CI/CD pipeline 구축해서 배포 자동화하기 (0) | 2022.06.03 |
---|---|
[ AWS ] - s3에 정적 웹사이트 호스팅하기 (0) | 2022.06.03 |
[ AWS ] - s3 사용하여 node.js 환경에서 이미지 저장하기 (0) | 2022.05.21 |
[ AWS ] - Apprunner 사용하여 배포하기 (0) | 2022.05.21 |
[ AWS ] - ec2 이용하여 배포하기 (0) | 2022.04.05 |