Django를 통해서 S3에 이미지 업로드를 하기 위해서는 아래 3가지 과정을 거쳐야 한다.
1) AWS 로그인 후 검색 창에 IAM 입력 후 IAM 페이지 접속
2) IAM 대시보드에서 사용자 클릭
3) 사용자 추가 클릭 후
4) 권한 설정
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObjectAcl",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::example-bucket-name/*",
"arn:aws:s3:::example-bucket-name"
]
}
]
}
5) policy 생성 후 Access Key ID, Secret Access Key 다운로드
새로운 유저 생성이 "Downlad.csv" 버튼을 클릭해서 "Access Key ID"와 "Secret Access Key"를 다운로드 받도록 한다. 지금 다운 받지 않으면 다시 다운 받거나 찾을 수 없음으로 꼭 다운 받아야 한다.
1) AWS S3 페이지로 가서 "Create bucket" 버튼을 클릭
2) Bucket Policy 수정
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1507637373230",
"Effect": "Allow",
"Principal": {
"AWS": "{user_arn}"
},
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::{bucket_name}/*"
},
{
"Sid": "Stmt1507637391106",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::{bucket_name}/*"
}
]
}
3) CORS
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"POST"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": [
"ETag"
],
"MaxAgeSeconds": 3000
}
pip install boto3
class S3ImgUploader:
def __init__(self, file):
self.file = file
def upload(self):
s3_client = boto3.client(
's3',
aws_access_key_id = settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key = settings.AWS_SECRET_ACCESS_KEY
)
url = 'img'+'/'+uuid.uuid1().hex
s3_client.upload_fileobj(
self.file,
"bucket_name",
url,
ExtraArgs={
"ContentType": self.file.content_type
}
)
return url