파일을 업로드하려면 PutObjectRequest 객체를 생성해야합니다. PutObjectRequest 객체를 생성하는 방법은 두가지가 있는데, 첫번째는 File 객체와 key값을 이용해 만드는 방법이고, 두번째는 InputStream과 key값 그리고 파일 정보(ContentType, file Length 등)를 이용해 만드는 방법입니다. 여기서 key 값은 버킷 내에서 객체를 찾기위해 사용되는 고유 식별자를 의미합니다.
3. Main.java
import java.io.File;
public class Main {
public AwsS3 awsS3 = AwsS3.getInstance();
public static void main(String[] args) {
Main main = new Main();
File file = new File("D://4.png");
String key = "img/my-img.png";
String copyKey = "img/my-img-copy.png";
main.upload(file, key);
// main.copy(key, copyKey);
// main.delete(key);
}
public void upload(File file, String key) {
awsS3.upload(file, key);
}
public void copy(String orgKey, String copyKey) {
awsS3.copy(orgKey, copyKey);
}
public void delete(String key) {
awsS3.delete(key);
}
}
외부에 S3를 공개할 경우 모든퍼블릭 액세스 차단 체크를 해제해주면 됩니다. 외부에 공개하지 않고 내부에서만 사용하려면 모든 퍼블릭 액세스 차단을 체크해주시면 됩니다. 퍼블릭 액세스가 차단되었을 경우 IAM에서 AWSAccessKeyId와 AWSSecretKey를 발급받고 이를 이용해서 S3 객체에 접근할 수 있습니다.
5) 버킷 버전 관리 및 기본 암호화
버킷 버전 관리기능을 활성화하면 파일을 버전별로 관리 하기 때문에 비용이 더 들지만 사용자가 실수로 파일을 삭제해도 복원할 수 있습니다.
기본 암호화를 활성화 하면 버킷에 저장되는 모든 새 객체를 암호화합니다. 그리고 객체를 다운 로드할 때 암호를 해독해합니다.
모든 설정이 끝났으면 버킷을 생성해줍니다.
6) 퍼블릭 정책 활성화
bamdule-bucket이 생성된 것을 볼 수 있지만 아직 외부에서 접근할 수 없습니다.
Select Type of Policy : S3 Bucket Policy Effect : Allow Principal : * AWS Service : Amazon S3 Actions : GetObject (원하는 만큼 더 선택해도 됩니다.) 조회만 가능하도록 GetObject 권한만 체크합니다. Amazon Resource Name (ARN) : arn:aws:s3:::bucket-name/*
다 입력되었다면 Add Statement를 눌러주세요.
입력 값을 확인 한 다음 Generate Policy를 눌러주세요.
정책이 명시된 JSON 값을 복사 한 뒤 버킷 정책에 입력해주세요. 권한 > 버킷 정책
변경 사항 저장 후 아래그림과 같이 액세스가 퍼블릭으로 변경되었다면, 외부에서 S3에 접근할 수 있는 상태입니다.
7) 테스트
버킷에 아무 파일이나 올린 후 해당 파일의 객체 URL을 브라우저 주소창에 입력하면 됩니다.
8) 액세스 키 생성
액세스키는 모든 퍼블릭 액세스를 차단했을 경우 필요합니다. S3에 접근하려면 별도의 인증 과정이 필요한데, 이때 사용되는 것이 액세스 키 입니다. 액세스 키는 AWSAccessKeyId와 AWSSecretKey로 구성되어 있습니다.
IAM > 액세스 키 > 새 액세스 키 만들기
액세스 키를 생성하면 키 파일을 다운로드 받을 수 있고 해당 파일에 AWSAccessKeyId와 AWSSecretKey가 명시되어있습니다. AWSAccessKeyId와AWSSecretKey는 절때 외부에 노출되어서는 안됩니다.