본문 바로가기
Tech/AWS

EC2 인스턴스 생성 시 Private IP 자동 태그 추가하는 방법 (EventBridge + Lambda 자동화)

by daelolo 2025. 3. 22.
반응형

AWS EC2 인스턴스를 생성할 때마다, 자동으로 인스턴스의 Private IP를 태그로 추가하고 싶었던 적 있으신가요?

이 글에서는 EC2 인스턴스가 생성될 때 자동으로 다음과 같은 태그를 추가하는 자동화 방법을 소개합니다:

  • Owner: 인스턴스를 생성한 사용자 정보
  • Create_time: 인스턴스 생성 일자 (KST 기준)
  • Private_IP: 인스턴스의 Private IP 주소

✅ 왜 자동 태그가 필요할까?

운영 환경에서 EC2 인스턴스가 자주 생성되다 보면, 누가 만들었는지, 언제 만들었는지, 어떤 IP를 갖고 있는지를 추적하는 게 어려워집니다. 이를 해결하기 위해, EC2 생성 시 자동 태그 추가는 매우 유용한 방식입니다.

⚙️ 사전 준비

  • AWS 계정
  • Lambda 실행 역할 (IAM Role)
  • CloudTrail 활성화 (EventBridge 트리거용)
  • EC2 인스턴스를 생성하는 환경

🛠️ 구성 개요

  • AWS EventBridge: EC2 인스턴스가 생성되었는지 감지
  • AWS Lambda: 이벤트를 감지하면 태그 추가
  • AWS IAM Role: Lambda가 EC2에 접근할 수 있는 권한 부여

🚀 구현 아키텍처

  1. EventBridge: EC2 인스턴스 생성(RunInstances) 이벤트 감지
  2. Lambda: EC2 인스턴스 정보를 조회해 태그 추가

이 구조는 EC2 인스턴스 생성 시 자동으로 Lambda가 실행되어 Private_IP, Owner, Create_time 태그를 인스턴스에 추가합니다.

📦 구현 절차

1. Lambda 함수 코드

다음 코드를 사용해 Lambda를 생성합니다. 이 함수는 EC2 인스턴스 ID와 Private IP를 가져와 태그를 자동으로 붙입니다.

import boto3
from datetime import datetime, timedelta

current_time_KST = datetime.now() + timedelta(hours=9)
time = current_time_KST.strftime('%Y-%m-%d')

def lambda_handler(event, context):
    resource = event["detail"]["responseElements"]["instancesSet"]["items"][0]["instanceId"]
    user_type = event["detail"]["userIdentity"]["type"]

    if user_type == 'IAMUser':
        user = event["detail"]["userIdentity"]["userName"]
    elif user_type == 'AssumedRole':
        user = 'UserName: ' + event["detail"]["userIdentity"]['principalId'].split(':')[1] + ', Role: ' + event["detail"]["userIdentity"]['sessionContext']['sessionIssuer']['userName']
    elif user_type == 'Root':
        user = 'root'
    else:
        user = ''

    try:
        ec2 = boto3.client('ec2', region_name='ap-northeast-2')

        # Private IP 조회
        response = ec2.describe_instances(InstanceIds=[resource])
        instance = response['Reservations'][0]['Instances'][0]
        private_ip = instance.get('PrivateIpAddress', 'unknown')

        # 태그 추가
        ec2.create_tags(
            Resources=[resource],
            Tags=[
                {'Key': 'Owner', 'Value': user},
                {'Key': 'Create_time', 'Value': time},
                {'Key': 'Private_IP', 'Value': private_ip}
            ]
        )

        print(f"Tagged {resource} with Owner={user}, Private_IP={private_ip}")

    except Exception as e:
        print(f"Error tagging instance {resource}: {e}")

2. Lambda 실행 권한 (IAM Role 설정)

Lambda에 아래와 같은 IAM 정책을 부여해야 EC2 정보 조회 및 태그 추가가 가능합니다.

{
  "Effect": "Allow",
  "Action": [
    "ec2:DescribeInstances",
    "ec2:CreateTags"
  ],
  "Resource": "*"
}

3. EventBridge 규칙 생성

다음과 같은 이벤트 패턴으로 EventBridge 규칙을 생성하세요. 이 패턴은 EC2 인스턴스 생성(RunInstances)을 감지합니다.

{
  "source": ["aws.ec2"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventName": ["RunInstances"]
  }
}

이 규칙이 트리거되면, Lambda가 실행되어 자동으로 태그를 붙이게 됩니다.


✅ 결과 예시

인스턴스 생성 후 자동으로 아래와 같은 태그가 붙습니다:

KeyValue
Owner iam_user_name 또는 Role 정보
Create_time 2025-03-21
Private_IP 10.0.1.15 (예시)

✅ 기대 효과

  • 자동화된 리소스 관리: 사람이 실수로 빠뜨리는 태그 작업을 자동화
  • 운영 효율 향상: Private IP 기반으로 리소스 필터링 및 감사가 쉬움
  • 비용 분석 최적화: 태그 기반 비용 추적 가능

📌 마무리

이렇게 설정해두면, 더 이상 수동으로 태그를 관리할 필요가 없습니다.
자동화된 태깅으로 운영 효율성은 물론, 보안 및 자원 추적 관리까지 깔끔하게 해결할 수 있습니다.
클라우드 인프라의 첫걸음은 "관리 가능한 구조"에서 시작됩니다. 지금 바로 도입해보세요!


궁금한 점이나 확장하고 싶은 기능이 있다면 댓글로 남겨주세요! 😊

반응형