-
Boto3 - 기본 설정 및 사용법Server Side/AWS 2020. 1. 13. 18:46
Boto3는 AWS에서 제공하는 SDK이다. python 애플리케이션과 AWS 서비스를 연결시키기 위해 사용된다. 본 포스트는 coding for entreprenures에서 제공하는 AWS-S3 강의에서 s3에 대한 boto3 부분만 정리한 내용이다. 학원에서 배울 때 그냥 boto3 패키지 설치하면 다 되는 줄 알았는데 강의를 보면서 Boto3가 무엇인지, 어떻게 사용하는지 조금은 이해할 수 있었다. boto3에서 정말 많은 양을 다루기 때문에 모든 항목에 대한 완전한 이해보다는 기본적인 부분들을 다뤄보면서 이런 게 있구나 하는 정도로만 정리해보았다.
IAM 정책(IAM - 공식문서)
IAM: AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
IAM 정책은 AWS에서 제공하는 시각적 편집기를 이용하거나 사용자가 직접 JSON 형태로 구성하는 방법이 있다.
JSON 형태의 IAM정책 설정(testserver_s3_policy) boto3.client(Low-level) - AWS
Client는 AWS에 접근하기 위해 낮은 레벨에서 제어할 수 있다. 기능은 Resource와 유사하지만 디테일한 설정을 위해서는 Client를 이용해야하는 것 같다. (참고- boto3.resource와 boto3.client의 차이 from PlanB)
아래는 S3에 설정된 Bucket에 접근하기 위한 기본적인 코드이다.
import boto3 AWS_ACCESS_KEY_ID ="[access_key]" AWS_SECRET_ACCESS_KEY = "[secret_key]" AWS_DEFAULT_REGION = "ap-northeast-2" client = boto3.client('s3', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=AWS_DEFAULT_REGION ) response = client.list_buckets() # bucket 목록 print(response)
[testserver_s3_policy - IAM 권한 부여 시]
[testserver_s3_policy - IAM 권한 제거 시]
boto3.Session - AWS
Session은 설정상태를 저장하고 client & resource 서비스를 생성하기 위한 권한을 부여하기 위해 사용된다.
session = boto3.Session( aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=AWS_DEFAULT_REGION ) s3 = session.resource('s3') # s3에 대한 권한 및 상태를 s3(변수)에 저장 for bucket in s3.buckets.all(): print(bucket.name) # output aws-jihoon-testserver media.navill.online static.navill.online
사용 가능한 resource(위 예제에서 'S3')는 아래와 같다.
- cloudformation
- cloudwatch
- dynamodb
- ec2
- glacier
- iam
- opsworks
- s3
- sns
- sqsboto3.Bucket - AWS
Bucket은 S3에 저장된 특정 bucket에 접근하기 위해 사용된다.
AWS_BUCKET_NAME = "aws-jihoon-testserver" buckets = s3.Bucket(name=AWS_BUCKET_NAME) print(buckets) # 출력: s3.Bucket(name='aws-jihoon-testserver') for obj in buckets.objects.all(): print(obj) print(obj.key) # error 발생: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
현재 IAM에는 ListObjects(ListObjects의 권한 키워드는 'ListBucket')에 대한 접근 권한이 등록되어있지 않기 때문에 에러가 발생한다. (AWS-버킷 작업에 대한 권한)
# 정책 수정 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::aws-jihoon-testserver" ] } ] }
정책 적용 후 정상 출력된다(obj=파일 객체, obj.key=파일 이름).
boto3.Object - AWS
Object는 bucket에 저장된 객체(파일)에 접근하기 위해 사용된다.
AWS_BUCKET_NAME = "aws-jihoon-testserver" object_key = "abc/img/스크린샷 2020-01-09 오후 9.05.02.png" s3 = boto3.resource('s3') object_ = s3.Object(AWS_BUCKET_NAME, object_key) # output s3.Object(bucket_name='aws-jihoon-testserver', key='abc/img/스크린샷 2020-01-09 오후 9.05.02.png')
'Server Side > AWS' 카테고리의 다른 글
Boto3 파일 업로드 & 다운로드- upload and download (0) 2020.01.15 AWS Setting - EC2 (0) 2020.01.13