실습, 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도 만들수 있다.
참고 자료
<> 구성도
참고.
참고. cloudtrail log로 이벤트 보내기
전체 작업
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 : 취득하다.
<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
감사합니다.