본문 바로가기

AWS Cloud

[AWS] VPC Flowlogs, Cloudtrail and CloudWatch, S3간 연동

반응형

* 참조 사항
- 해당 게시물은 AWS 환경에서 대표적으로 사용되는 로그 유형인 VPC Flowlog와 Cloudtrail을 각각 CloudWatch와 연동, S3로의 저장을 위한 방법과 필요 개념들을 설명한 글

 

 

 

* 개념 정리

용어 개념
VPC Flowlog * VPC에 생성된 네트워크 인터페이스(ENI - Elastic Network Interface)를 기준으로 송/수신되는 Traffic 로그를 수집하는 기능
Cloudtrail *  AWS Account 자체의 운영, 위험 감사, 거버넌스 및 규정 준수 관련 로그를 저장
- 순수하게 계정 자체의 활동에 대한 로그만을 기록

ex) EC2 내에서 ping 발생 = Cloudtrail 로그 x
ex) Account가 S3 Bucket을 생성 = Cloudtrail 로그 o
CloudWatch * AWS 리소스 및 AWS에서 실행되는 애플리케이션을 모니터링하기 위해 지표를 수집, 추적 하는 서비스
- 쉽게 말해 VPC Flowlog, Cloudtrail 등의 로그를 대시보드에서 가시성 좋게 출력해주는 서비스
S3 * 클라우드 객체 스토리지
- Bucket을 통해 무한한 데이터 저장을 지원

 

 

 

* 로그 저장 위치

위치 내용
CloudWatch * 사용자 가시성 확보에 중점적
* 로그 저장 기한은 사용자 지정 기한으로 다양하게 설정 가능하며, 영구적 저장도 존재
* S3 대비 요금이 조금더 비싼편
S3 Bucket * 가시성 보다는 저렴한 저장 비용에 중점
* 로그들이 각각 압축된 형태로 기간별로 분기하여 저장되어 별도로 읽으려면 공수가 많이듬
* 이를 지원하는 Athena라는 S3 저장 로그를 Query를 통해 조회, 가시성을 확보해 주는 AWS 서비스가 별도로 존재

 

 

 

* VPC Flowlog 생성 및 CloudWatch 연동
1) VPC 생성 후 CloudWatch 로그 그룹 생성

  • 로그 그룹 이름 지정
  • Log 보존 기간 설정
  • KMS Key ARN (필수값 X)

CloudWatch와의 연동 시, 우선 로그 그룹을 먼저 생성

2) IAM 설정
2-1) 정책 생성

IAM -> 정책 생성
CloudWatch Logs로 서비스 선택
필요에 따라 변경 가능하나, 우선 최소 권한 설정 기준으로 이미지 확보

  • DescribeLogGroups
  • DescribeLogStreams
  • CreateLogGroup
  • CreateLogStream
  • PutLogEvents
    - 이후 모든 리소스 선택, 정책의 이름을 사용자 임의 지정 후 정책 생성

2-2) 역할 설정

IAM -> 역할 만들기
신뢰 엔터티 선택 (AWS 서비스 + EC2 또는 사용자 지정 신뢰 정책으로 바로 vpc-flow-logs.amazonaws.com 설정 가능
2-1에서 생성했던 정책(권한) 추가

2-3) 신뢰 관계 수정
- 역할에 정책을 추가하여 연결 후, Cloudwatch가 vpcflow log resource를 수용할 수 있도록 신뢰 관계를 추가해야함

신뢰 엔터티의 신뢰 정책을 수정 ec2.amazonaws.com -> vpc-flow-logs.amazonaws.com

<수정 전 신뢰 정책>
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}


<수정 후 신뢰 정책>
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "vpc-flow-logs.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

역할 생성 완료 후, 신뢰할 수 있는 개체에 vpc-flow-logs가 설정되었는지 확인 필수

3) VPC Flowlog 생성

  • FlowLogs 이름
  • 필터
  • 최대 집계 간격
  • 대상 (여기서는 CloudWatch Logs)
  • 대상 로그 그룹 (1번에서 생성했던 CloudWatch 로그 그룹 선택)
  • IAM 역할 (2번에서 생성했던 vpc-flow-logs를 신뢰 관계로 설정한 IAM 역할 지정)
  • 로그 레코드 형식
    • AWS 기본 형식 (14가지 로그 확인 가능)
    • 사용자 지정 형식 (최대 29가지 로그 확인 가능 - 추천)

5) VPC Flowlog 활성화 확인

6) CloudWatch에서 VPC Flowlog 수집 확인

VPC Flowlog 활성화 후 CloudWatch로 전송되어 확인하는데 5분 내의 시간이 소요

* 로그 필드 값 참조 : https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-logs.html

 

VPC 흐름 로그를 사용하여 IP 트래픽 로깅 - Amazon Virtual Private Cloud

VPC 흐름 로그를 사용하여 IP 트래픽 로깅 VPC 흐름 로그는 VPC의 네트워크 인터페이스에서 전송되고 수신되는 IP 트래픽에 대한 정보를 수집할 수 있는 기능입니다. 흐름 로그 데이터는 Amazon CloudWat

docs.aws.amazon.com

 

 

 

* VPC Flowlog 생성 및 S3로 저장

  • CloudWatch와 별도의 VPC Flowlogs 생성 필요
    • 완전히 설정이 되더라도 연동에 5분 가량 걸리는 것으로 보여서 안되더라도 조금 대기
    • 만약 S3로만 전송한다면 위의 복잡한 IAM 설정 필요 없음 (AdministratorAccess 계정 기준)
  • 단, S3 정책에서 vpcflow log를 수신하도록 Bucket 정책 설정 필요 (현 구성은 하나의 단일 계정의 Bucket 정책)
    • ex) 버킷 ARN, SourceAccount 변경 필요
{
    "Version": "2012-10-17",
    "Id": "AWSLogDeliveryWrite20150319",
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::본인의BucketName/AWSLogs/본인의 AccountID 12자리/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "본인의 AccountID 12자리",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:사용하는 region name(ex-ap-northeast-2):본인의 AccountID 12자리:*"
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::본인의BucketName",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "본인의 AccountID 12자리"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:사용하는 region name(ex-ap-northeast-2):본인의 AccountID 12자리:*"
                }
            }
        }
    ]
}

 

 

 

* CloudTrail 로그 생성 및 S3로 저장
- CloudTrail은 별도 저장을 하지 않을 시, 기본 3개월의 저장만 지원 (이벤트 기록에서 확인 가능)

무설정 CloudTrail 원본

- S3로만 저장 시, 별도 IAM 생성이나 버킷의 정책 설정 없이 자동으로 정책이 생성된 버킷을 지정, 저장되는 서비스 제공
1) Trail(추적) 생성

2) CloudTrail <> S3 연동 확인
- 추적을 생성한 후, 대략 5분 내에 Bucket에 저장되는 것을 확인할 수 있음

CloudTrail 로그가 S3로 정상적으로 연동되어 저장 되는것을 확인할 수 있음

 

 

 

* CloudTrail과 CloudWatch 연동

  • S3보다는 연동이 복잡하나, VPCFlowlog를 위해 생성했던 CloudWatch IAM 정책을 사용 가능
    • 단, 해당 정책을 역할에 연결 시, cloudtrail을 신뢰 관계로 설정하여야 함.
  • Cloudwatch 정책 생성은 상단에 작성한 부분을 참조하여 생성

1) IAM 역할 생성 (신뢰 관계 설정)

역할의 신뢰 관계에서 cloudtrail.amazonaws.com 설정

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "sts:AssumeRole"
            ],
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cloudtrail.amazonaws.com"
                ]
            }
        }
    ]
}

2) Cloudtrail 추적에서 CloudWatch logs 편집 설정

S3와 연동하며 만들었던 기존 추적, 필요 시 새로 생성해도 무관

  • 설정 적용
    • CloudWatch 로그 그룹은 신규/기본 상관 없으며, 로그 스트림 이름으로 지정되나 이상하게 생성 되더라도 자동으로 로그 그룹이 정상적으로 만들어짐
    • IAM 역할의 경우 위에서 생성했던 cloudtrail 신뢰 관계를 설정한 IAM 역할 지정

3) CloudWatch의 로그 그룹에서 정상 생성 확인

  • 생성 확인
    • Cloudwatch 로그 그룹 → 로그 스트림에 지속적으로 적재 확인 가능
    • 생성 및 연동에 5분 가량 소요되니 참조

 

 

 

* 게시글 요약

- CloudWatch와 연동 시, CloudWatch 로그 그룹 생성 및 IAM 역할을 적절한 신뢰 관계를 설정하여 생성 후, 할당하는 것이 중요

- S3와 연동 시, 특별한 설정은 거의 없으며, Bucket 정책을 잘 설정하는 것이 가장 중요

 

 

 

반응형