brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jun 21. 2020

408. Kinesis Data Firehose로 구독

실습, CLI로 작업 한다. 설명서 참조

로그를   Kinesis Data Firehose로  받아  S3에 저장  모니터링 해보자.


실습, CLI로 작업 한다. 

설명서 참조


<> 구성 

cloudtrail ( cloudwatch log ) ------> kinesis  firehose  -------> S3



<> 작업 요약



// 작업 1

kinesis data firehose  -------> S3

1

S3버킷 만들기

2

키네시스는 S3에 데이터를 넣어야 한다. 

role이 필요하다. (S3 정책 만들고 , role 만들고)

3

키네시스에  줄께 니가 해라. 

키네시스가 해야함. 

Assume롤 설정이 필수 이다.



// 작업 2

cloudtrail ( cloudwatch log ) ------> kinesis firehose


4

클라우드와치가 키네시스 파이어호스로 데이터를 보내야한다. 

role이 필요하다.


5

클라우드 와치에 줄께 니가해라. 

클라우드 와치가 해야함. 

Assume롤 설정이 필수 이다.


6

키네시스 만들면서 S3도 만들수 있다.



참고 자료 

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#FirehoseExample



<>  구성도

참고. 

https://aws.amazon.com/ko/blogs/korea/analyze-and-visualize-your-vpc-network-traffic-using-amazon-kinesis-and-amazon-athena/


참고. cloudtrail log로 이벤트 보내기

https://docs.aws.amazon.com/awscloudtrail/latest/userguide/send-cloudtrail-events-to-cloudwatch-logs.html



전체 작업

Cloudwatch log를 kinesis data firehose로 받아 s3에 저장하고 모니터링하자.


사전작업

1. api를 사용할 리눅스api서버나 mac하나를 준비한다.

2. API 계정을 만들어야 한다.

3. aws configure로  작업을 할 수 있는 환경설정을 해야 한다. 리전도 정확히 서울로  ap-northeast-2  

4. cloudwatch log 그룹이  사전에 있어야 한다.

5. iam 계정에 역할을 만들어 권한을 위임해야 해서 iam aussme role은 있어야 한다.

6. Role 2개가 필요해 보인다.

1) 키네시스가 S3에 데이터를 넣어야 한다. 

2) Cloudwatch log가 키네시스에 데이터릴 넣어야 한다.



8. 역할에 따라서 나눠 작업을 해보자

예를 들어

클라우드 SE는 IAM 정책과 권한을 관리한다.

개발자는  S3와 Kinesis Data Firehose 생성 권한을 가진다.


9. 용어 이해

역할(role)을 만들어 IAM 사용자에게 권한 위임하는 것

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles_create_for-user.html

assume  : 취득하다.

Assume  role




<0> 작업  순서

<1> 클라우드SE  작업

<2> 개발자 작업 

<3> 일반 개발자가 사용하기위해  만들어야 할 Policy 4가지



<> 작업  순서

클라우드 SE가 정책을 만들고, Role을 만들자

개발자가 이 role을 이용해  AWS 서비스를  이용하자.



<1> 클라우드SE  작업

1

// console에서  aws account-id는  확인한다.

999999999999


2

Kinesis Firehose - S3간 작업을 해보자


//  AssumeRole  정책 생성.

firehose가  s3에 가진 권한을 실행 시킨다.


vi seo-TrustPolicyForFirehose.json

{

"Statement": {
"Effect": "Allow",
"Principal": { "Service": "firehose.amazonaws.com" },
"Action": "sts:AssumeRole",

"Condition": { "StringEquals": { "sts:ExternalId":"999999999999" } }
}
}


3

//   Firehose가  S3에  데이터 넣기위한 iam  역할 생성

aws iam create-role --role-name seo-FirehosetoS3Role --assume-role-policy-document 

file://~/seo-TrustPolicyForFirehose.json


4

// arn 확인

arn:aws:iam::999999999999:role/seo-FirehosetoS3Role


5

// Kinesis Data Firehose 가  s3에 저장해야 해서 정책


vi seo-PermissionsForFirehose.json


{

"Statement": [
{
"Effect": "Allow",
"Action": [ 
"s3:AbortMultipartUpload", 
"s3:GetBucketLocation", 
"s3:GetObject", 
"s3:ListBucket", 
"s3:ListBucketMultipartUploads", 
"s3:PutObject" ],

"Resource": [ 
"*"

]
}
]
}


// 개발자가 버킷 이름을 어떤 것을 만들지 모르니, 모든 버킷에 대해 저장할 수 있도록 한다.

* 로 한다.

// 버킷명을  미리 안다면 해당 버킷명으로 정책을 만든다.



3

// s3 사용 정책을 역할에 연결한다.

 iam:PutRolePolicy  - policy 필수 


aws iam put-role-policy --role-name seo-FirehosetoS3Role --policy-name seo-Permissions-Policy-For-Firehose --policy-document file://~/seo-PermissionsForFirehose.json





# 두번째 작업  

Cloud Watch log를 Kinesis Firehose로 넣기


4

// assume 정책을 생성


vi seo-TrustPolicyForCWL.json


{
"Statement": {
"Effect": "Allow",
"Principal": { "Service": "logs.us-west-2.amazonaws.com" },
"Action": "sts:AssumeRole"
}
}

// 리전을 수정해야 한다.    서울은  ap-northeast-2


5

// iam  역할 role을 생성

aws iam create-role --role-name seo-CWLtoKinesisFirehoseRole --assume-role-policy-document file://~/seo-TrustPolicyForCWL.json


확인
"RoleId": "AROA5 KLxxMCY",
"RoleName": "seo-CWLtoKinesisFirehoseRole",

"Arn": "arn:aws:iam::999999999999:role/seo-CWLtoKinesisFirehoseRole"


6

// cloudwatch log  정책 생성 


vi seo-PermissionsForCWL.json


{

"Statement":[
{
"Effect":"Allow",
"Action":["firehose:*"],
"Resource":["arn:aws:firehose:us-west-2:999999999999:*"]
},
{
"Effect":"Allow",
"Action":["iam:PassRole"],
"Resource":["arn:aws:iam::999999999999:role/seo-CWLtoKinesisFirehoseRole"]
}
]
}

// 리전,  account-id  , 롤 이름 seo-  3개 수정.   ap-northeast-2



7

// cloudwatch log 권한 정책에 role 만들어 연결

aws iam put-role-policy --role-name seo-CWLtoKinesisFirehoseRole --policy-name seo-Permissions-Policy-For-CWL --policy-document file://~/seo-PermissionsForCWL.json


  


<2> 개발자 작업 


#개발자

1.  

// s3 버킷을 만든다.

aws s3api create-bucket --bucket my-b5 --create-bucket-configuration LocationConstraint=us-west-2


2

// Kinesis Data Firehose 전송 시스템을 생성

 iam:PassRole  -Policy 생성 필수 


aws firehose create-delivery-stream --delivery-stream-name 'my-delivery-stream' --s3-destination-configuration '{"RoleARN": "arn:aws:iam::999999999999:role/seo-FirehosetoS3Role", "BucketARN": "arn:aws:s3:::my-b5"}'

// aws id  수정, role 수정 , bucket  수정


3

// firehose  arn을  확인한다.

aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream"

"DeliveryStreamARN": "arn:aws:firehose:us-west-2:999999999999:deliverystream/my-delivery-stream",

4      

// Amazon Kinesis Data Firehose 전송 스트림이 활성 상태에 있고 IAM 역할을 생성하고 나면 CloudWatch Logs 구독 필터를 생성할 수 있습니다. 

그 즉시 구독 필터는 실시간으로 선택한 로그 그룹에서 Amazon Kinesis Data Firehose 전송 스트림으로 로그 데이터를 이동시키기 시작합니다.


aws logs put-subscription-filter --log-group-name "/aws/lambda/seo-slack-lambda" --filter-name "Destination" --filter-pattern "{$.userIdentity.type = Root}" --destination-arn "arn:aws:firehose:us-west-2:999999999999:deliverystream/my-delivery-stream" --role-arn "arn:aws:iam::999999999999:role/seo-CWLtoKinesisFirehoseRole"


// firehose arn  수정, seo-cwl role arn 수정 , log-group 이름 수정

// cloudwatch log 그룹이  사전에 있어야 한다.



5

// CloudWatch Logs는 들어오는 모든 로그 이벤트 중에서 필터 패턴과 일치하는 이벤트를 Amazon Kinesis Data Firehose 전송 스트림으로 전달, s3버킷을 확인하여 데이터 확인


aws s3api list-objects --bucket 'my-b5' --prefix 'firehose/'


aws s3api get-object --bucket 'my-b5' --key 'firehose/2020/10/29/00/my-delivery-stream-2015-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250' testfile.gz




<3> 일반 개발자가 사용하기위해  만들어야 할 Policy 4가지


1

키네시스가 S3에 데이터를 넣을때

클라우드 와치가 키네시스에 데이터를 넣을때

줄께 니가 해라.

iam:assumerole - policy 필수


2

롤 만들때 

 aws iam create-role 

 iam:CreateRole -policy 필수

// 특정 Role에 대해서 제한 해야 한다. seo-cloudwatch-log-role



3

정책을 롤에 연결할때

 aws iam put-role-policy --role-name 

 iam:PutRolePolicy  - policy 필수 


4

키네시스 파이어 포스 만들때

 aws firehose create-delivery-stream  

 iam:PassRole - policy 필수 



AWS 여러 계정 쉽게 옮겨 다니기

https://brunch.co.kr/@topasvga/876


감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari