업로드 (3)

💻 Programming/Java

AWS S3 Security Credentials 만들기

AWS 자격 증명 만들기



  Security Credentials 설정하기

AWS SDK를 이용하여 파일을 업로드 할 때 업로드 권한을 얻기 위해 Security Credentials을 만들어야 합니다.

전체적인 흐름은 사용자를 생성하고, 권한을 설정하고 Access key와  Secret key를 발급받도록 되어있습니다.



 1  내 보안 자격 증명(My Security Credentials) 을 눌러 Security Credentials 설정하는 부분으로 이동합니다.




 2  IAM 사용자 시작하기(Get Started with IAM Users) 버튼을 눌러 다음으로 이동합니다. 



 3  사용자 추가(Add User) 버튼을 클릭해서 유저를 생성합니다.



 4  사용자 이름(User name)을 지정하고 프로그래밍 방식 액세스(Programmatic access) 를 선택한 뒤 다음 버튼을 누르기 전에 아래쪽으로 화면을 스크롤하면 권한경계설정 항목이 나옵니다. 여기서 권한 경계없이 생성을 선택하고 다음 버튼을 클릭합니다.




 5  기존 정책 직접 연결을 선택하고 아래와 같이 S3라고 검색하면 관련 정책 목록이 출력되는데 여기서 우리는 AmazonS3FullAccess를 선택합니다. 그리고 다음으로 넘어갑니다.



 6  검토(Review)를 통해 올바른 설정을 했는지 확인하고 사용자 만들기(Create user)로 생성합니다.



 7  생성된 사용자의 액세스 키 ID(Access key ID)와 비밀 액세스 키(Secret access key)를 확인 할 수 있습니다. 비밀액세스 키는 "표시"를 클릭하면 보여집니다.



AWS S3에 파일을 업로드 할 때 여기에 보여지는 액세스 키 ID와 비밀 액세스 키를 사용해야합니다. 이렇게 생성된 사용자는 언제든지 "내 보안 자격 증명" 메뉴를 통해 확인이 가능합니다.



💻 Programming/Java

AWS S3 버킷에 파일 업로드하기 (자바)


  AWS SDK Java jar 파일 다운 받기

AWS-SDK for Java - https://aws.amazon.com/ko/sdk-for-java/

위 링크를 따라 들어가면 우측 상단에 SDK다운로드 또는 이클립스용 툴킷을 다운로드 받을 수 있는 버튼이 있습니다. 저는 메이븐을 사용할건데 직접 다운로드 받거나 툴킷을 써보고 싶으신 분들은 위 링크를 이용해주세요.


maven을 이용한다면 

1
2
3
4
5
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk</artifactId>
    <version>1.11.386</version>
</dependency>


이 글이 포스팅 되는 시점에 최신버전은 1.11.388입니다. minor 버전이 하루가 다르게 증가하고있어요 ㅎ



  AWS s3 파일 업로드 하기(AWS S3 Upload for java )

실제로 S3에 업로드를 하기 위해서는 S3에 권한이 필요합니다. 이 권한을 얻기 위해서는 ACCESS_KEY, SECRET_KEY 를 생성해야 하는데 이는 아래 링크를 참고해주세요.

# Access Key, Secret Key 생성방법 - http://keichee.tistory.com/298



사용방법은 간단합니다.

아래처럼 파일을 전달받아 아마존 S3에 accesskey와  secretkey를 이용하여 권한을 얻고 파일을 업로드 하면됩니다. 


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
public class AWSService {
    private static final String BUCKET_NAME = "bucket_name";
    private static final String ACCESS_KEY = "ACCESS_KEY";
    private static final String SECRET_KEY = "SECRET_KEY";
    private AmazonS3 amazonS3;
 
    public AWSService() {
        AWSCredentials awsCredentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
        amazonS3 = new AmazonS3Client(awsCredentials);
    }
 
    public void uploadFile(File file) {
        if (amazonS3 != null) {
            try {
                PutObjectRequest putObjectRequest =
                        new PutObjectRequest(BUCKET_NAME + "/sub_dir_name"/*sub directory*/, file.getName(), file);
                putObjectRequest.setCannedAcl(CannedAccessControlList.PublicRead); // file permission
                amazonS3.putObject(putObjectRequest); // upload file
 
            } catch (AmazonServiceException ase) {
                ase.printStackTrace();
            } finally {
                amazonS3 = null;
            }
        }
    }
}
 




오류 메시지 : 새로운 apk의 버전 코드(1)가 이미 존재합니다.


해결방법 : 

AndroidManifest.xml 파일에서 


android:versionCode=""

android:versionName=""


를 찾을 수 있다면 해당 값을 변경해주시면 됩니다.


참고로 버전 코드는 몇 번째 업데이트인지를 표시해주시면되고 버전 네임에는 실제 사용자들에게 보여지는 버전입니다.


구글링 하면 대부분 위와같은 방법으로 해결하신 것 같은데 아마도 이클립스에서 안드로이드 개발 하시던 분들이 올린 글인것 같습니다.


저같은 경우는 안드로이드 스튜디오로 개발을 하고있는데 특별히 세팅을 바꾼게 없는데 manifest파일에 위와같은 설정이 없길래 그냥 수동으로 추가해보려했더니 warning이 떴는데 그래들 빌드에서 값을 오버라이드 하고 있다고 나오더군요.


만약 manifest파일에 저런 설정이 없다면 안드로이드 스튜디오 좌측 패키지 익스플로러 창에서 트리 표시 방법을 Android로 선택을 해주시면 build.gradle ( Module:app )을 열어보시면 versionCode와 versionName 설정하는 곳이 보이실 겁니다.


아래 사진을 참고하세요.






그럼 즐프하세요~ ^-^