반응형
시작하기 전에 iam 에서 권한을 등록하고 Access key 와 Secret key 를 가지고 있어야 한다
node module 설치
npm install aws-sdk
획득한 Access key 와 Secret key를 awsConfig.json 파일로 생성해 저장한다
리전의 경우 서울리전을 쓰면 ap-northeast-2 를 등록한다.
다른 리전을 사용하면 해당내용을 변경한다
awsConfig.js 파일
---
{
"accessKeyId": [Access Key],
"secretAccessKey": [Secret Key],
"region": "ap-northeast-2"
}
s3_upload.js 파일을 만든다
awsConfig.json 파일을 같은 경로에 둔다
var AWS = require('aws-sdk')
var fs = require('fs');
// 접속정보 설정
AWS.config.loadFromPath('./awsConfig.json')
업로드 기능을 추가한다
var file = fs.createReadStream([파일경로])
var params = {
Bucket: [버킷이름],
Key: [버킷 내 파일이름],
ACL: 'public-read', /* 권한: 도메인에 객체경로 URL 을 입력하여 접근 가능하게 설정 */
Body: file,
ContentType:'image/png'
}
let s3 = new AWS.S3();
s3.upload(params, function(err, data){
if(err){
console.log("err: ", err)
}
console.log('============')
console.log("data: ", data)
})
성공하면 다음 메시지를 확인할 수 있다
{ ETag: '"59e58528079b9241e6fb2d0aabcde05d"',
Location:
'https://[버킷명].s3.ap-northeast-2.amazonaws.com/[버킷 내 파일이름]',
key: [버킷 내 파일이름],
Key: [버킷 내 파일이름],
Bucket: [버킷명] }
등록확인
접근할 가상 도메인을 확인하려면 파일을 클릭해 상세페이지로 가면 객체 URL 부분에 표기되어 있다.
끝.
# 403 에러
403 에러가 날 경우 로그에서 다음 메세지를 확인할 수 있다
{ AccessDenied: Access Denied
at Request.extractError (/api/node_modules/aws-sdk/lib/services/s3.js:585:35)
at Request.callListeners (/api/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/api/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/api/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/api/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/api/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /api/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/api/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/api/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/api/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
message: 'Access Denied',
code: 'AccessDenied',
region: null,
time: 2019-07-21T13:28:22.284Z,
requestId: 'E99894677A1FC27B',
extendedRequestId:
'F15AwosmtEj/Iru4hm3r2GcapnfB2WRkMhqk23A6M4DlZYl232m3wYUjXXbmtyHxDzW2UMlghBU=',
cfId: undefined,
statusCode: 403,
retryable: false,
retryDelay: 82.0657633690838 }
AWS 에서 IAM 을 점검해야 한다.
AccessKey 가 연결되어 있는 계정에 AmazonS3FullAccess 권한이 있어야 한다
이후 버킷 권한으로 들어간다
AWS 에서 IAM 을 점검해야 한다.
퍼블릭 액세스 탭을 클릭한 후 '새 ACL(액세스 제어 목록)을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단' 를 비활성화 한다
# 등록 후 도메인으로 접근했을 때 AccessDenied 발생할 때
브라우저에 접속하니 다음메세지 리턴
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>70EDA7EF69B31803</RequestId>
<HostId>
7fADZr47PBMIq/MXca5Bd5ahqdsqApIq0E3pTsesjjnfWQhkwl40uGeEL98OEG0Qp5SeMnNQsnI=
</HostId>
</Error>
버킷 권한, 퍼블릭 액세스에서 '임의의 ACL(액세스 제어 목록)을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단' 을 비활성화 한다
도메인을 재호출 한다
반응형
'공부 > 프로그래밍' 카테고리의 다른 글
[shell] 프로세스 실행 중 확인 (ps 명령어) (0) | 2019.07.31 |
---|---|
[jenkins] 에러로그 Disk Full(DNSQuestion) (0) | 2019.07.28 |
[nodejs-sequelize] timezone 적용, 조회시 시간 제대로 표기하기 (0) | 2019.07.08 |
[Linux-centos7] letsencrypt 갱신 실패시 대처법 (0) | 2019.07.02 |
[AWS, Springboot] SqsListener 사용 시 pool_size 문제 및 메세지처리 팁 (0) | 2019.06.16 |
댓글