티스토리 뷰
1. 가입
2. 버킷 생성
권한은 따로 적어줄 것이기에 모두 해제한다.
만든 버킷 클릭
권한 > 버킷 정책에 정책을 적어서 넣어준다.
- "Version": "2012-10-17":
- 이 부분은 정책의 버전을 나타냅니다. "2012-10-17"은 이 정책의 버전을 나타내는 표준 AWS 정책 버전입니다.
- "Statement":
- 이 부분은 정책의 주요 선언을 포함하는 배열입니다. 여기에는 여러 개의 선언이 올 수 있습니다.
- "Sid": "PublicReadGetObject":
- 이 부분은 선언의 식별자입니다. 각 선언에 대해 고유한 식별자를 제공하여 추후에 정책을 관리할 때 사용할 수 있습니다.
- "Effect": "Allow":
- 이 부분은 이 선언의 효과를 나타냅니다. "Allow"는 해당 작업이 허용된다는 것을 의미합니다.
- "Principal": "*":
- 이 부분은 이 선언이 적용되는 주체를 나타냅니다. 여기서 "*"는 모든 주체를 의미합니다. 따라서 누구나 이 권한을 가질 수 있습니다.
- "Action": "s3:GetObject":
- 이 부분은 이 선언에서 허용하는 작업을 나타냅니다. 여기서는 S3 객체를 가져오는 작업인 "s3:GetObject" 작업을 허용합니다.
- "Resource": "arn:aws:s3:::mylooptest/*":
- 이 부분은 이 선언이 적용되는 리소스를 나타냅니다. 여기서는 "mylooptest"라는 이름의 S3 버킷 내의 모든 객체를 가리킵니다. /*는 모든 객체를 의미합니다.
3. 관리자를 만들어야 한다.
IAM>사용자>사용자 생성
AWS Console > IAM > 엑세스 관리자 > 사용자 > 생성한 사용자 이름 클릭 > 보안 자격 증명 > 엑세스 키 만들기 클릭
2. 아무거나 클릭하고 다음을 클릭한다.
(클릭 하면 엑세스 키 사용사례와 대안을 하단에 띄워주는 기능만 하기때문에 뭘 골라도 상관없다.)
액세스 키와 비밀 액세스키는 csv파일로 저장해 두거나, 어디에 적어놓아야 한다.
스프링 연동
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
cloud:
aws:
s3:
bucket: <버킷이름>
stack.auto: false
region.static: ap-northeast-2
credentials:
accessKey: <발급받은 accessKey>
secretKey: <발급받은 secretKey>
accessKey 와 같은 보안 설정 정보는 깃허브에 노출되면 해킹되어 과금 위험이 있으므로 별도의 설정 파일로 분리하고 깃허브에 올리면 안된다. 설정 파일에 있는 정보는 스프링이 지원하는 @Value 어노테이션을 사용하여 불러올 수 있다.
cloud.aws.stack.auto=false
EC2에서 Spring Cloud 프로젝트를 실행시키면 기본으로 CloudFormation 구성을 시작하기 때문에 설정한 CloudFormation이 없으면 프로젝트 실행이 되지 않는다. 해당 기능을 사용하지 않도록 false로 설정.
cloud.aws.region.static:ap-northeast-2
지역을 한국으로 고정한다.
S3config
@Configuration
public class S3Config {
@Value("${cloud.aws.credentials.access-key}")
private String accessKey;
@Value("${cloud.aws.credentials.secret-key}")
private String secretKey;
@Value("${cloud.aws.region.static}")
private String region;
@Bean
public AmazonS3Client amazonS3Client() {
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
return (AmazonS3Client) AmazonS3ClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.build();
}
}
사용예시
@PostMapping("/fileTest")
public ResponseEntity<String> awsUploadFile(@RequestParam("file")MultipartFile file) {
try {
String fileName=file.getOriginalFilename();
String fileUrl= "https://" + bucket + "/loop/" +fileName;
ObjectMetadata metadata= new ObjectMetadata();
metadata.setContentType(file.getContentType());
metadata.setContentLength(file.getSize());
amazonS3Client.putObject(bucket,fileName,file.getInputStream(),metadata);
return ResponseEntity.ok(amazonS3Client.getUrl(bucket,fileName).toString());
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
public void deleteAwsUploadFile(String fileName){
log.info("AWS파일 삭제--------------------------------start");
DeleteObjectRequest request = new DeleteObjectRequest(bucket, fileName);
amazonS3Client.deleteObject(request);
log.info("AWS파일 삭제--------------------------------end");
}
'개발일기' 카테고리의 다른 글
CORS 오류 (0) | 2024.05.01 |
---|---|
[React] 카테고리 메뉴 active 표시 (1) | 2024.04.26 |
루프크리에이티브 Version2 제작(Spring Data JPA, React.js 후기) (0) | 2024.04.20 |
결국 취직에 성공(?)은 했다. (0) | 2021.05.21 |
거의 한달간 자바뿌수기중 (2021.12.09) (0) | 2021.05.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 항해플러스
- 로그인
- ArgumentResolver
- Intercepter
- 항해99
- 스프링부트
- React
- thymleaf
- exception
- BindingResult
- 리터럴
- HTTP
- rejectValue
- 향해플러스백엔드
- 향해99
- 백엔드 개발자 공부
- 스프링공부
- Java
- jpa api
- 컨트
- JPA
- hypertexttransferprotocol
- reject
- react실행
- 향해플러스
- SpringBoot
- filter
- 백엔드 개발자 역량
- 예외처리
- 인터셉터
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함