Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Boto3로 S3 버킷 로깅 정보 조회하기 – get_bucket_logging 사용법과 예제

문제 개요

Python의 boto3 라이브러리를 사용하면 S3 버킷에 설정된 로깅(logging) 세부 정보를 손쉽게 조회할 수 있습니다. 이 글에서는 예시로 S3에 있는 "Bucket_1" 버킷의 로깅 설정을 확인하는 과정을 단계별로 살펴보겠습니다.

해결 접근 방식 및 알고리즘

1단계 – 예외 처리를 위해 boto3와 botocore.exceptions 모듈을 임포트합니다.

2단계 – 함수의 매개변수로 조회할 버킷의 이름(bucket_name)을 받습니다.

3단계 – boto3 라이브러리를 사용해 AWS 세션(Session)을 생성합니다.

4단계 – 생성한 세션으로 S3 서비스용 AWS 클라이언트를 만듭니다.

5단계get_bucket_logging 함수를 호출하고 버킷 이름을 인자로 전달합니다.

6단계 – 해당 버킷의 로깅 정보가 담긴 딕셔너리(dictionary)가 반환됩니다.

7단계 – 작업 도중 오류가 발생할 경우 클라이언트 오류(ClientError)와 일반 예외를 각각 처리합니다.

예제 코드

다음 코드를 실행하면 지정한 버킷의 로깅 세부 정보를 조회할 수 있습니다.

import boto3
from botocore.exceptions import ClientError

def get_bucket_logging_of_s3(bucket_name):
    session = boto3.session.Session()
    s3_client = session.client('s3')
    try:
        result = s3_client.get_bucket_logging(Bucket=bucket_name)
    except ClientError as e:
        raise Exception("boto3 client error in get_bucket_logging_of_s3: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in get_bucket_logging_of_s3 function: " + e.__str__())
    return result

print(get_bucket_logging_of_s3("Bucket_1"))

출력 결과

로깅이 활성화된 버킷이라면 아래와 같은 딕셔너리 형태의 응답을 받게 됩니다.

{
    'LoggingEnabled': {
        'TargetBucket': 'string',
        'TargetGrants': [
            {
                'Grantee': {
                    'DisplayName': 'string',
                    'EmailAddress': 'string',
                    'ID': 'string',
                    'Type': 'CanonicalUser'|'AmazonCustomerByEmail'|'Group',
                    'URI': 'string'
                },
                'Permission': 'FULL_CONTROL'|'READ'|'WRITE'
            },
        ],
        'TargetPrefix': 'string'
    }
}

결과 해석

응답에 LoggingEnabled 키가 존재하면 해당 버킷에서 서버 액세스 로깅이 활성화된 것입니다. 주요 필드는 다음과 같습니다.

TargetBucket – 로그 파일이 저장되는 대상 버킷의 이름입니다.
TargetPrefix – 저장되는 로그 객체 이름에 붙는 접두사(prefix)입니다.
TargetGrants – 로그 데이터에 대한 권한(FULL_CONTROL, READ, WRITE 등)이 부여된 대상(Grantee) 목록입니다.

만약 버킷에 로깅이 설정되어 있지 않다면 응답은 빈 딕셔너리({})로 반환됩니다. 또한 이 API를 호출하려면 해당 버킷에 대한 s3:GetBucketLogging 권한이 IAM 사용자 또는 역할에 부여되어 있어야 합니다.