ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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에 접근하기 위한 기본적인 코드이다. 

    client.list_buckets()

     

    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')
    

     

     

    'Server Side > AWS' 카테고리의 다른 글

    Boto3 파일 업로드 & 다운로드- upload and download  (0) 2020.01.15
    AWS Setting - EC2  (0) 2020.01.13

    댓글

Designed by Tistory.