Paul Granduer Lee /클라우드 서비스

cloudwatch의 로그를 s3로 보내기

Paul Grandeur L. 2019. 7. 16. 14:22

cloduwatch에서 스트림 형태로 수집되는 로그를 다운받고 싶었으나, 방법이 없었음

연구해보면 lambda 또는 s3를 통해 가공 및 다운로드가 가능함을 알았고,

s3에 일단 필요한 자료를 다운로드 가능하게 끔 셋팅하는 방법을 공유하고자 함

 

1. cloudwatch에서 필요한 로그 그룹을 선택 - 작업 선택 - Amazon S3로 데이터 내보내기

 

2. 내보낼 데이터 정의(날짜별로 filter) 후 내보낼 s3 버킷 선택

 

3. 권한이 올바르지 않다고 오류가 발생함

 

이부분을 찾는데 시간을 소요함.

cloudwatch에서 s3로 데이터를 내보내기 위해서는 cloudwatch의 리전과 s3 생성 리전이 일단 동일해야함.(필자의 경우 이경우는 아님)

 

그리고 cloudwatch로그를 받기 위해선 s3의 버킷에 따로 설정이 필요하다는 것을 알았음.

 

S3 버킷 권한 설정

cloudwatch용 s3 버킷을 생성 또는 기존의 s3 버킷을 활용한다.

1. 버킷 선택 후 권한 설정

2. 아래와 같이 버킷에 대한 권한을 설정한다.

{
    "Version": "2012-10-17",
    "Statement": [
      {
          "Action": "s3:GetBucketAcl",
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::my-exported-logs",
          "Principal": { "Service": "logs.ap-northeast-2.amazonaws.com" }
      },
      {
          "Action": "s3:PutObject" ,
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::my-exported-logs/random-string/*",
          "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } },
          "Principal": { "Service": "logs.ap-northeast-2.amazonaws.com" }
      },
      {
          "Action": "s3:PutObject" ,
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::my-exported-logs/random-string/*",
          "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } },
          "Principal": { "AWS": "arn:aws:iam::SendingAccountID:user/CWLExportUser" }
      }
    ]
}

my-exported-logs를 S3 버킷의 이름으로 변경해야함.
random-string을 S3에서 사용할 폴더명으로 변경해야함.
SendinAccountID를 IAM 계정의 arn 참조하셔 accountID를 입력해야함(숫자)
CWLExportUser를 IAM 계정명으로 입력해야함

 

3. 물론 IAM 계정에 cloudwatch와 s3에 대한 권한이 있어야 가능함.(권한이 없을시)

AmazonS3FullAccess  CloudWatchLogsFullAccess 정책을 IAM 계정에 부여

 

이렇게 셋팅이 완료되면 s3로 내보내기가 가능해짐.