iam 사용자 생성하고 AmazonS3FullAccess
정책을 추가한다.
발급받은 엑세스 키, 시크릿 키를 꼭 저장해놓는다.
다음과 같이 퍼블릭 엑세스를 모두 차단한다.
여기에서 생성한다.
다음과 같이 설정한다. (iam, 버킷 ARN확인법은 후술)
모든 사용자가 접근할 수 있게 하려면 Principal에 *
를 입력한다.
버킷내 모든 폴더를 지정하고 싶으면 ARN란에 ARN이름/*
을 입력하면 된다.
예를들어 ARN이름이 test라면 arn:aws:s3:::test/*
만약 정적 파일을 서비스할 용도라면 Action에 Principal에 *를 입력하고 액션은 GetObject만 설정하면 된다.
다 설정했다면 Add statement를 누르면 아래 스택에 추가된다. 여기서 초기화(Start Over)하지 않고 다른 정책을 입력한 다중으로 정책을 생성할 수 있다.
모든 사용자는 객체를 읽기만 할 것이므로 GetObject만 설정하고, 서버에서는 객체를 삭제하기도 해야하므로 특정 사용자에게는 DeleteObject 권한도 추가해주었다.
Generate Policy를 누르면 json형태로 정책을 생성한다.
//폴더 구조
app.js
routes/
ㄴbucketRouter.js
ㄴcontrollers/
ㄴbucketController.js
{
"accessKeyId": "s3 접근 권한이 있는 iam 사용자의 엑세스 키",
"secretAccessKey": "s3 접근 권한이 있는 iam 사용자의 시크릿 키",
"region": "AWS 리전" //버킷 > 속성 탭에서 볼 수 있다.
}
npm install multer-s3
npm install aws-sdk
const multerS3 = require('multer-s3');
const aws = require('aws-sdk');
aws.config.loadFromPath(
"awsconfig.json 파일 경로"
);
const s3 = new aws.S3();
// s3 버킷에 업로드
const upload = multer({
storage: multerS3({
s3: s3,
acl: 'public-read-write',
bucket: '버킷이름/폴더이름',
key: function (req, file, cb) {
let extension = path.extname(file.originalname);
cb(null, Date.now().toString() + extension)
}
})
})
router.post('/upload', upload.single('form data 속성 이름'), bucketController.upload);
const aws = require('aws-sdk');
aws.config.loadFromPath(
"awsconfig.json 파일 경로"
);
s3.deleteObject({
Bucket: '버킷이름',
Key: '폴더이름/파일이름'
}, (err, data) => {
if (err) { throw err; }
});
객체 변경 기능은 존재하지 않는 것 같다. 객체 업로드와 똑같이 구현한 다음, 기존 객체는 삭제한다.
iam 사용자 ARN 확인법
버킷 ARN 확인법
버킷 > 속성 탭 확인