5.3 VPC Flow 기반 모니터링1

Update: 2020-03-06

VPC Flow, CloudWatch, ElasticSearch 구성

1.먼저 VPC Flow log를 수신할 CloudWatch Log Group을 생성합니다.

[CloudWatch] - [Logs] - [ Log Groups] - [ Actions ] - [ Create Log Group]

2.생성된 CloudWatch Log Group을 확인합니다.

[CloudWatch] - [Logs] - [ Log Groups]

3.VPC Flow Log를 활성화 합니다.

[VPC] - [VPC 선택] - [Flow Logs] - [Creat Flow log]

4.VPC Flow Log의 상세 옵션을 설정합니다.

A. Filter의 옵션을 선택합니다. - Accept, Reject 또는 전체 Flow를 확인하는 All을 선택합니다.

B. Log 수집 간격을 선택합니다. - 10분 또는 1분이며, 최근 1분 간격을 지원하기 시작했습니다.

C. 목적지를 선택합니다. - CloudWatch 또는 S3로 보낼 수 있습니다. S3로 보낼 경우, 3rd Party 제품들과 연동할 수 있습니다.

D. log 목적지를 선택합니다. - CloudWatch에서 생성한 LogGroup또는 S3의 버킷이름을 선택합니다.

E. IAM Role을 선택합니다. - VPC Flow Log 데몬이 Role을 가지고 동작하게 되므로, IAM Role이 필요합니다. 메뉴에서 생성하거나 , IAM Role에서 신규 생성할 수 있습니다.

[VPC] - [VPC 선택] - [Flow Logs] - [Creat Flow log]

아래 그림은 IAM Role을 신규 생성하는 과정입니다.

{
  "Statement": [
    {
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams",
        "logs:PutLogEvents"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
## VPC Flow Log를 위한 IAM Role

IAM Role이 정상적으로 구성되었으면, Role을 선택합니다.

5.정상적으로 VPC Flow Log가 생성되었는지 확인합니다.

[VPC] - [VPC 선택] - [Flow Logs]

6.CloudWatch에서 VPC Flow Log가 정상적으로 수집되는 지 확인힙니다.

[CloudWatch] - [ Logs ] - [ 생성한 Log Group]

Log Stream 목록 중에 하나를 선택하여, 정상적으로 VPC Log Flow가 보여지는 지 확인합니다.

7.ElastciSearch를 새롭게 구성합니다.

이 랩에서는 ElasticSearch에 대한 상세내용을 담지 않으며, 완전관리형 AWS ElasticSearch 생성과정에 대한 소개만 언급합니다.

[ElasticSearch] - [ Create new domain ]

8.ElastciSearch 도메인 구성을 합니다.

새로운 도메인 이름을 정의하고 나머지는 기본 값을 두도록 합니다.

[ElasticSearch] - [ Create new domain ]

9.ElastciSearch 접근과 보안 관련 설정을 합니다.

권장하는 값은 VPC Access 가 권장 접근 방법입니다. 이렇게 구성할 경우 외부에서 ElasticSearch와 DashBoard인 Kibana 접근이 불가능합니다. 외부에서 접근 방법은 아래에서 상세소개합니다.

VPC 접근방법을 선택하게 되면, 어떤 VPC가 ES에 접근 할 것인지, 어떤 Subnet의 자원이 접속하게 될 것인지, Security Group은 어떤 것을 사용할 것인지를 선택해야합니다.

[ElasticSearch] - [ Create new domain ]

Access Policy를 선택합니다.

10.ElasticSearch가 최종 구성되고, 약 15분 정도의 시간이 필요합니다.

생성을 위해 15분 정도의 시간이 필요하며, 이 단계가 완료되어야 CloudWatch Log Group에서 ElasticSearch로 Streaming 구성을 진행할 수 있습니다.

[그림 5.3.14]에서는 설치 진행 과정으로 "Domain Status"는 "Loading"단계로 보여지고 있습니다.

[CloudWatch] -[ Logs ] -[Log Groups] - [ Log Group 선택] -[Action] - [ Stream to Amazon ElasticSearch Service]

CloudWatch에서 ES로 Stream을 전송할 경우 Lambda를 통해서 VPC Flow Log 수신을 받고, ES로 전송하기 위한 IAM Role이 필요합니다. 아래에서와 같이 구성합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": [
        "arn:aws:logs:*:*:*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "es:ESHttpPost",
      "Resource": "arn:aws:es:*:*:*"
    }
  ]
}
## ES로 Stream을 Lambda를 통해 전송하기 위한 IAM Role

ElastciSearch의 접근이 VPC를 통한 접근으로 제한을 했기 때문에 [그림 5.3.18]에서 처럼 추가적인 IAM Role이 필요합니다. 이 단계에서 Role을 생성하고, IAM으로 접속하여 추가적으로 LambdaVPCAccessExecutionRole을 추가해 줍니다.

이 과정이 함께 진행되지 않으면, Stream 전송을 할 수 없습니다.

12.Stream Log 포맷을 구성합니다.

[CloudWatch] -[ Logs ] -[Log Groups] - [ Log Group 선택] -[Action] - [ Stream to Amazon ElasticSearch Service]

13.구성된 최종 내용을 확인합니.

[CloudWatch] -[ Logs ] -[Log Groups] - [ Log Group 선택] -[Action] - [ Stream to Amazon ElasticSearch Service]

14.ES로 CloudWatch Streaming이 정상적으로 전송되는지 확인합니다.

[CloudWatch] -[ Logs ] -[Log Groups] - [ Log Group 선택] -[Action] - [ Stream to Amazon ElasticSearch Service]

15.Lambda 서비스가 제대로 구성되었는지 확인합니.

[Lambda] - [ Functions ] - [생성된 Lambda Function]

Kibana 접속 및 Dash Board 구성

이제 VPC Flow 구성을 위한 모든 단계를 완성했습니다. 실제 VPC Flow가 CloudWatch, Lambda를 통해서 ES로 정상적인 전송이 되고 있는지를 확인해야 합니다.

하지만 ES로 접근하기 위해서는 외부에서 접속이 불가능합니다. 따라서 Bastion 서버를 통하거나, SSH를 통해서 Portforwarding으로 접근해야합니다.

1. ES, Kibana URL을 확인합니다.

[그림 5.3.15]에서 처럼 ES에 접속하여 ES URL, Kibana URL을 확인합니다.

# ES VPC Endpoint
https://vpc-octankes-otx57nhtury5g6edf3uxrcfpje.us-east-1.es.amazonaws.com

# Kibana URL
https://vpc-octankes-otx57nhtury5g6edf3uxrcfpje.us-east-1.es.amazonaws.com/_plugin/kibana/

2. Local PC에서 Kibana 접속을 위한 환경 구성을 합니다.

Mac OS 기준으로 SSH Portforwarding 설정을 합니다.

cd ~/.ssh/
chmod 400 bastionkey.pem
touch ./config

vi ./config
#ElasticSearch Tunnel Config
Host ec2-35-153-39-59.compute-1.amazonaws.com
HostName 35.153.39.59
User ec2-user
IdentitiesOnly yes
IdentityFile /Users/whchoi/aws_keypair/octank.pem
LocalForward 9200 vpc-octankes-otx57nhtury5g6edf3uxrcfpje.us-east-1.es.amazonaws.com:443

3. Bastion Server로 PortForwarding을 수행하고, Kibana에 접속합니다.

SSH Portforwarding 합니다.

ssh -N ec2-35-153-39-59.compute-1.amazonaws.com

PC에서 Kibana에 접속합니다.

ElasticSearch: https://localhost:9200
Kibana: https://localhost:9200/_plugin/kibana

kibana 접속이 되지 않을 경우에는 , Security Group과 local ssh config를 다시 확인해 봅니다.

3. Bastion Server로 PortForwarding을 수행하고, Kibana에 접속합니다.

4. Kibana에서 Index Pattern을 생성합니.

기본 하루에 한개씩 인덱스 패턴이 생성되며, 한꺼번에 가져와서 만들 수 있습니다. Filter를 cwl로 수행합니다.

[Kibana] - [management] - [Create index pattern]

5. Kibana에서 생성한 Index Pattern을 확인합니다.

[Kibana] - [management]

6. Kibana Discover에서 생성된 Index Pattern에 어떤 데이터가 들어오는지 확인합니.

[Kibana] - [Discover]

7. Kibana Visualize에서 Stream 데이터들에 대해 다양한 그래프들을 만듭니.

[Kibana] -[Visualize]-[Create Visualization]

8. Kibana Visualize에서 Stream 데이터들에 대해 그래프를 생성해 봅니다.

Kibana Visualize 에서는 다양한 그래프와 데이터 표기 등을 지원합니다. 이중에서 예로 Pie를 구성해 봅니다.

[Kibana] -[Visualize] - [Pie Graph]

Pie에서 사용될 Index Pattern을 선택합니다.

VCP Flow log를 원본으로 Cloud Watch에서 생성된 로그 스트림은 일정한 Key값을 가지고 ElatsticSearch로 보내지게 됩니다. Kibana는 이러한 key값을 가지고 효과적인 그래프를 표기합니다. 그래프로 표현하기 위해서는 이러한 key들의 값을 적절하게 선택해야합니다. 아래 예제는 Action (Security Group : Accept, Reject)를 가지고 그래프로 표현합니다.

구성 완료 이후 아래와 같이 Action 을 실행하면 Pie 그래프를 실행합니다.

하나의 Pie 그래프에서 추가적으로 여러개의 값을 표현 할 수도 있습니다. Sub Bucket을 추가하면 Pie그래프 안에 Pie 그래프가 추가적으로 표현됩니다.

아래 그래프는 2개의 Pie를 표현한 것입니다. 앞서 2개의 Bucket을 만든 내용입니다. Accept/Reject 되는 분포와 목적지의 서비스 포트 분포를 표기한 것입니다.

다양한 그래프 옵션들을 선택하여 [그림 5.3.33]과 같은 구성을 할 수 있습니다. 아래 그래프는 분단위로 수신되는 Accept,Reject Data를 선형 그래프로 표기한 것입니다.

9. Kibana Dashboard 에서 다양한 그래프를 배치합니다.

생성된 그래프는 Save 메뉴를 선택하여 저장이 가능합니다.

이렇게 저장된 다양한 그래프들을 Dashboard에 배치가 가능하며, 이러한 Dashboard기능을 통해 VPC Flow에 대한 다양한 지표로 활용할 수 있습니다.

Last updated