문제 개요
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 사용자 또는 역할에 부여되어 있어야 합니다.