반응형
목차
1. 서로 다른 AWS 계정에서 업로드 시 객체 소유권
S3 버킷에 파일 객체를 업로드할 때, 버킷 생성 AWS 계정과 동일한 계정이라면 특별한 문제가 발생하지 않습니다.
그러나 다른 계정 간에 S3 버킷에 파일을 업로드하는 경우, 해당 객체에 대한 접근 권한 설정이 복잡해질 수 있습니다.
이는 아래와 같은 AWS S3 소유권 정책 때문입니다.
2. AWS 콘솔을 통해 버킷 정책 변경
아래와 같이 AWS 콘솔에 접근하여 버킷의 정책을 변경해줍니다.
이는 애플리케이션 측에서 bucket-owner-full-control를 설정하여 객체를 업로드할 때
해당 객체의 소유자를 버킷 소유자로 합니다.
3. 의존성 추가
Springboot에서 S3 업로드 및 조회를 하려면
라이브러리 의존성을 먼저 추가해줘야합니다.
// build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
// ...(중략)
implementation 'com.amazonaws:aws-java-sdk-s3:1.12.174' // 추가
}
4. 코드 작성
AWS IAM 계정 발급 및 Access Token 발급 과정은 생략합니다.
만약, 발급이 완료되었다면 아래와 같이 accesskey, secretkey에 인증 정보를 넣고 s3 버킷에 업로드 하면됩니다.
public class S3Uploader {
private AmazonS3 amazonS3;
public void upload() {
// aws credential
BasicAWSCredentials awsCredentials = new BasicAWSCredentials("accesskey", "secretkey");
amazonS3 = AmazonS3ClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.withRegion(Regions.AP_NORTHEAST_2)
.build();
// file object write
byte[] fileContentBytes = content.getBytes(StandardCharsets.UTF_8);
InputStream fileInputStream = new ByteArrayInputStream(fileContentBytes);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("application/json"); // json file을 업로드 한다고 가정
metadata.setContentLength(fileContentBytes.length);
// s3 bucket upload
PutObjectRequest req = new PutObjectRequest(
"bucketname",
"keyname",
fileInputStream,
metadata).withCannedAcl(CannedAccessControlList.BucketOwnerFullControl); // bucket-owner-full-control 설정
amazonS3.putObject(req);
}
}
반드시 CannedAccessControlList.BucketOwnerFullControl 옵션을 추가해줍니다.
반응형
'개발 이야기 > Springboot' 카테고리의 다른 글
Springboot App 시작, 종료시 로직 실행 (0) | 2024.08.31 |
---|---|
Springboot 에서 Gzip으로 압축(with Kotlin) (0) | 2024.07.06 |
DTO에서 LocalDateTime 유효성 체크와 에러핸들링 방법 (1) | 2024.06.01 |
JdbcTemplate로 batchUpdate 사용해보기 (0) | 2024.05.28 |
Springbatch에서 메타테이블 없이 실행(Springbatch 5) (0) | 2024.03.19 |