AWS Lambda를 활용하여 S3 퍼블릭 접근을 자동으로 차단하는 구성을 만들어봤습니다.

AWS Lambda를 활용하여 S3 퍼블릭 접근을 자동으로 차단하는 구성을 만들어봤습니다.

AWS Lambda를 활용하여 S3 퍼블릭 접근을 자동으로 차단하는 구성을 만들어봤습니다.
Clock Icon2025.06.10

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 AWS Lambda를 활용하여 S3 퍼블릭 접근을 자동으로 차단하는 구성을 만들어봤습니다.

IAM 정책 & 역할 준비

먼저 Lambda 함수에서 S3 버킷에 접근하여 퍼블릭 접근을 차단하기 위해 [s3:PutBucketPublicAccessBlock] 권한을 할당할 필요가 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutBucketPublicAccessBlock"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Lambda 함수 생성

IAM 정책과 역할을 생성했다면, Lambda 함수를 생성합시다. Lambda 함수의 런타임은 [Python 3.13]입니다. 그리고 역할은 조금 전 생성한 IAM 역할을 선택합시다. 자세한 Python 코드는 다음과 같습니다.

import json
import boto3

s3 = boto3.client('s3')

def lambda_handler(event, context):
    print("Received event:", json.dumps(event))

    # 버킷 이름 추출
    try:
        bucket_name = event['detail']['requestParameters']['bucketName']
    except KeyError:
        print("버킷 이름이 이벤트에 없음")
        return

    try:
        # S3 퍼블릭 접근 차단 설정
        s3.put_public_access_block(
            Bucket=bucket_name,
            PublicAccessBlockConfiguration={
                'BlockPublicAcls': True,
                'IgnorePublicAcls': True,
                'BlockPublicPolicy': True,
                'RestrictPublicBuckets': True
            }
        )
        print(f"✅ 퍼블릭 접근 차단 완료: {bucket_name}")
    except Exception as e:
        print(f"❌ 퍼블릭 접근 차단 실패: {str(e)}")

한 가지 주의할 점은 CloudTrail의 이벤트가 발생한 것을 바탕으로 EventBirdge가 인지하여 Lambda 함수를 실행시키는 것이므로 Lambda 함수를 수동으로 실행시키면 퍼블릭 접근을 차단하지 않습니다.
※ 해당 구성을 만든 이후의 S3 버킷에 대해서만 이벤트를 감지하여 퍼블릭 접근을 차단합니다.

EventBridge 규칙 생성

이제 Lambda 함수 생성이 끝났다면, EventBridge로 넘어가 규칙을 생성합시다. 해당 규칙에는 CloudTrail에서 발생하는 이벤트가 포함되며 [PutBucketAcl], [PutBucketPolicy], [CreateBucket] 이벤트를 감지합니다.

{
  "source": ["aws.s3"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventName": ["PutBucketAcl", "PutBucketPolicy", "CreateBucket"]
  }
}

결과 테스트

테스트는 S3 버킷을 생성할 때 [모든 퍼블릭 액세스 차단]을 비활성화한 상태로 S3 버킷을 생성합니다.

jw-tests3bucke-1

S3 버킷을 생성하면, 곧 이벤트가 발생하여 [모든 퍼블릭 액세스 차단]이 활성화로 변경됩니다.

jw-tests3bucke-2

CloudTrail에서 확인해 보면, S3 버킷 생성 이벤트가 발생한 다음, Lambda를 통해 퍼블릭 액세스 차단을 활성화하고 있는 것을 확인할 수 있습니다.

jw-tests3bucke-3

본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 jaewookkim533@yahoo.com로 보내주시면 감사하겠습니다.

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.