본문 바로가기
AWS

[AWS] Python으로 AWS S3에 이미지 파일 업로드

by 또개해삼 2022. 3. 7.

python에서 AWS 객체 스토리지 서비스인 S3에 접근하여 로컬에 저장된 이미지 파일을 업로드하는 실습입니다.

 

S3란?

Amazon S3(Amazon Simple Storage Service)는 업계 최고의 확장성과 데이터 가용성 및 보안과 성능을 제공하는 객체 스토리지 서비스이다. 즉, 어떤 규모 어떤 사업의 고객이든 이 서비스를 사용하여 웹 사이트, 모바일 애플리케이션, 백업 및 복원, 아카이브, 엔터프라이즈 애플리케이션, IoT 디바이스, 빅데이터 분석 등과 같은 다양한 사용 사례에서 원하는 만큼의 데이터를 저장하고 보호할 수 있다.

 

Amazon S3 작동 방식

  • S3는 데이터를 버킷 내의 객체로 저장하는 객체 스토리지 서비스다. 객체는 해당 파일을 설명하는 모든 메타데이터이다.
  • S3에 데이터를 저장하려면 먼저 버킷을 생성하고 버킷 이름 및 AWS 리전을 지정해야 한다. 그런 다음 S3에서 객체를 해당 버킷에 데이터를 업로드한다.
  • 각 객체에는 키가 있으며, 이는 버킷 내 객체에 대한 고유한 식별자이다.

 

AWS S3 환경 설정

1. 버킷 생성

  • s3를 검색해서 버킷 만들기를 클릭한다.

 

 

2. 버킷 이름과 리전 선택

  • 버킷 이름은 Global Unique이며 전 세계에 어디에도 중복된 이름이 존재할 수 없다.
  • 리전은 서비스 지역에 따라서 설정해주면 된다.

 

 

3. 퍼블릭 액세스 설정

  • 외부에 S3를 공개할 경우 모든 퍼블릭 액세스 차단 체크를 해제해주면 된다.
  • 외부에 공개하지 않고 내부에서만 사용하라면 모든 퍼블릭 액세스 차단을 체크해주면 된다.
  • 실무에서 사용해야 할 경우 퍼블릭으로 데이터를 제공해야 되는 경우가 아니라면 서비스 환경에 맞춰 "모든 퍼블릭 액세스 차단" 또는 ACL을 이용해 액세스를 차단해주는 것이 좋다. (차단되었을 경우 IAM에서 AWSAccessKeyId와 AWSSecretKey를 발급받고 이를 이용해서 S3 객체에 접근할 수 있다.)

 

 

4. 버킷 버전 관리 및 기본 암호화

  • 버킷 버전 관리 기능을 활성화하면 파일을 버전별로 관리하기 때문에 비용이 더 들지만 실수로 파일을 삭제해도 복원할 수 있다.
  • 기본 암호화를 활성화하면 버킷에 저장되는 모든 새 객체를 암호화한다. 그러면 객체를 다운 로드할 때 암호를 해독해야 한다.

 

 

5. 퍼블릭 정책 활성화

버킷 정책을 설정해줘야 해당 올린 url을 통해 이미지나 동영상을 얻어올 수 있다.

 

1) 만들어준 버킷을 클릭한다.

2) 권한을 누르고 버킷 정책에서 편집을 클릭한다.

3) 정책 생성기를 클릭한다.

 

 

 

 

  • S3 Bucket Policy를 선택

 

 

  • Allow - 접근하는 사람을 선택해서 받지 않고 모두 허용
  • Principal - 모든 사람이 접근을 할 수 있음
  • Actions - 특정 작업의 허용 또는 거부 여부를 지정, s3:GetObject 설정
  • ARN에서는 arn:aws:s3:::{자신이 만든 bucket name}

 

4) Add Statement를 클릭하고, Generate Policy를 클릭하면 json형식에 코드들이 뜬다.

{
	"Version": "2012-10-17",
	"Id": "Policy1645444683528",
	"Statement": [
		{
			"Sid": "Stmt1645444661147",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::{bucket name}/*"
		}
	]
}

5) 해당 코드를 복사 후 버킷 정책에다가 그대로 붙여 넣기 한 뒤 저장한다. 그러면 이미지를 url에서 접근해도 뜰 것이다.

 

하지만, 아직 s3를 외부에서 접근은 불가능하며 이를 설정하기 위해서는 IAM을 설정해줘야 한다.

 

6. IAM 설정

AWS에서는 IAM에서 사용자를 만들어 각각 AWS에 있는 리소스에 접근하게 설정하라고 권장한다. AWS의 루트 사용자가 Key 노출되면 해당 계정에 리소스가 위험함으로 사용자를 만들어 사용하도록 권장하고 있다.

 

1) IAM을 검색해 들어간 다음 사용자 추가를 클릭한다.

2) 사용자 이름을 설정, 액세스 키는 프로그래밍 방식 액세스를 선택한다.

 

 

3) AmazonS3FullAccess는 s3에 관한 모든 사용권한을 부여하는 정책이다.

 

4) 나머지는 넘어가고 사용자를 만들면 액세스 키 ID, 비밀 액세스 키 가 뜬다. 나중에 다시 볼 수 없음으로 어딘가에 저장해둔다.

 

 AWS에서의 설정은 끝났고 Python과 S3를 연동해보자

 

Python 환경 설정

1. boto3 패키지 설치

python에서 aws s3에 접근하기 위해서 boto3 패키지를 설치한다.

pip install boto3

 

2. 기본 값 세팅 및 S3 연결

import boto3

def s3_connection():
    try:
        # s3 클라이언트 생성
        s3 = boto3.client(
            service_name="s3",
            region_name="ap-northeast-2",
            aws_access_key_id="{액세스 키 ID}",
            aws_secret_access_key="{비밀 액세스 키}",
        )
    except Exception as e:
        print(e)
    else:
        print("s3 bucket connected!") 
        return s3
        
 s3 = s3_connection()

 

3. s3에 파일 업로드

try:
    s3.upload_file("{로컬에서 올릴 파일이름}","{버킷 이름}","{버킷에 저장될 파일 이름}")
except Exception as e:
    print(e)

 

4. s3에서 업로드된 이미지 파일 확인

'AWS' 카테고리의 다른 글

[MLS-C01] AWS Certified Machine Learning Specialty 시험 소개  (0) 2023.02.01