Boto3 - 기본 설정 및 사용법
Boto3는 AWS에서 제공하는 SDK이다. python 애플리케이션과 AWS 서비스를 연결시키기 위해 사용된다. 본 포스트는 coding for entreprenures에서 제공하는 AWS-S3 강의에서 s3에 대한 boto3 부분만 정리한 내용이다. 학원에서 배울 때 그냥 boto3 패키지 설치하면 다 되는 줄 알았는데 강의를 보면서 Boto3가 무엇인지, 어떻게 사용하는지 조금은 이해할 수 있었다. boto3에서 정말 많은 양을 다루기 때문에 모든 항목에 대한 완전한 이해보다는 기본적인 부분들을 다뤄보면서 이런 게 있구나 하는 정도로만 정리해보았다.
IAM 정책(IAM - 공식문서)
IAM: AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
IAM 정책은 AWS에서 제공하는 시각적 편집기를 이용하거나 사용자가 직접 JSON 형태로 구성하는 방법이 있다.
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
- sqs
boto3.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')