AWS 서비스 로그 Datadog 람다 전송 함수

AWS 서비스 로그는 Datadog 포워더(Forwarder) 람다 함수로 수집할 수 있습니다. 이 S3 Bucket, 클라우드와치(CloudWatch) 로그 그룹 및 EventBridge 이벤트 -포워더 로그를 Datadog로 전달합니다.

AWS 서비스에서 로그 수집을 시작하려면,

  1. AWS 계정에서 Datadog 포워더 람다 함수를 설정합니다.
  2. AWS 서비스(대부분 AWS 서비스는 S3 버킷 또는 클라우드와치 로그 그룹에 기록 가능)에 대해 로깅 활성화를 설정합니다.
  3. 전달할 로그 새 항목이 있을 때 포워더 람다가 실행되도록 하는 트리거 설정을 설정합니다. 트리거를 설정하는 방법에는 두 가지가 있습니다.

참고: AWS us-east-1 지역에 있는 경우 Datadog-AWS 비공개 링크를 활용하세요.

참고: Cloudformation은 모든 리소스에 대해 KMS:Decrypt를 포함하는 IAM 정책을 생성하며, AWS Security Hub의 모범 사례와 매칭되지 않습니다. 이 권한은 KMS로 암호화된 S3 버킷에서 개체의 암호를 해독하여 람다 함수를 설정하는 데 사용됩니다. S3 버킷을 암호화하는 데 사용되는 KMS 키는 예측할 수 없습니다. 설치가 성공적으로 완료된 후 이 권한을 안전하게 삭제할 수 있습니다.

AWS 로깅 활성화 서비스

로그를 S3 버킷 또는 클라우드와치(CloudWatch)에 생성하는 AWS 서비스 모두가 지원됩니다. 아래 표에서 가장 많이 사용되는 서비스에 대한 설정 지침을 확인하세요.

AWS 서비스AWS 서비스 로깅 활성화Datadog에 AWS 로그 전송
API 게이트웨이Amazon API 게이트웨이 활성화 로그수동자동 로그 수집
CloudfrontAmazon CloudFront 로그 활성화수동자동 로그 수집
CloudTrailAWS CloudTrail 로그 활성화수동 로그 수집. Cloud SIEM용 AWS CloudTrail을 설정하는 경우 Cloud SIEM용 AWS 설정을 참조하세요.
DynamoDBAmazon DynamoDB 로그 활성화수동 로그 수집
EC2-Datadog 에이전트를 사용하여 로그를 Datadog에 전송하세요.
ECS-도커(Docker) 에이전트를 사용하여 로그을 수집합니다.
Elastic 로드밸런싱(ELB)Amazon ELB 활성화 로그수동자동 로그 수집
람다-수동자동 로그 수집
RDSAmazon RDS 활성화 로그수동 로그 수집
Route 53Amazon Route 53 로그 활성화수동 로그 수집
S3Amazon S3 로그 활성화수동자동 로그 수집
SNSSNS에서는 로그를 제공하지 않지만, SNS 서비스를 통과하는 로그 및 이벤트를 처리할 수 있습니다.수동 로그 수집
RedShiftAmazon Redshift 로그 활성화수동자동 로그 수집
인증된 액세스인증된 액세스 로그 활성화수동 로그 수집
VPCAmazon VPC 로그 활성화수동 로그 수집
Step 함수Amazon Step 함수 로그 활성화수동 로그 수집
웹 애플리케이션 방화벽Amazon WAF 로그 활성화수동자동 로그 수집
MWAAAmazon MWAA 로그 활성화수동 로그 수집

트리거 설정

Datadog 포워더(Forwarder) 람다 함수에서 트리거를 설정하는 두 가지 옵션이 있습니다.

  • 자동: Datadog 선택한 AWS 서비스에 대해 로그 위치를 자동으로 검색하여 Datadog 포워더 람다 함수에 트리거로 추가합니다. Datadog 또한 목록을 최신 상태로 유지합니다.
  • 수동: 각 트리거를 직접 설정합니다.

트리거 자동 설정

Datadog는 Datadog 포워더(Forwarder) 람다 함수에서 자동으로 트리거되도록 설정되어 다음 소스와 위치에서 AWS 로그를 수집할 수 있습니다.

소스위치
API 게이트웨이 액세스 로그클라우드와치(CloudWatch)
API Gateway 실행 로그클라우드와치(CloudWatch)
애플리케이션 ELB 액세스 로그S3
클래식 ELB 액세스 로그S3
CloudFront 액세스 로그S3
람다 로그클라우드와치(CloudWatch)
Redshift 로그S3
S3 액세스 로그S3
Step Functions클라우드와치(CloudWatch)
웹 애플리케이션 방화벽S3, 클라우드와치(CloudWatch)

참고: 구독 필터는 DatadogForwarder에 의해 자동으로 생성되지 않습니다. 로그 그룹에서 직접 생성하세요.

  1. 아직 설정하지 않았다면 Datadog 로그 컬렉션 AWS 람다 함수를 설정하세요.

  2. Datadog-AWS 통합에 사용되는 IAM 역할의 정책에 다음 권한이 있는지 확인합니다. 이러한 권한이 어떻게 사용되는지에 대한 정보는 아래 설명에서 확인할 수 있습니다.

    "cloudfront:GetDistributionConfig",
    "cloudfront:ListDistributions",
    "elasticloadbalancing:DescribeLoadBalancers",
    "elasticloadbalancing:DescribeLoadBalancerAttributes",
    "lambda:List*",
    "lambda:GetPolicy",
    "redshift:DescribeClusters",
    "redshift:DescribeLoggingStatus",
    "s3:GetBucketLogging",
    "s3:GetBucketLocation",
    "s3:GetBucketNotification",
    "s3:ListAllMyBuckets",
    "s3:PutBucketNotification",
    "states:ListStateMachines",
    "states:DescribeStateMachine",
    "wafv2:ListLoggingConfigurations",
    "logs:PutSubscriptionFilter",
    "logs:DeleteSubscriptionFilter",
    "logs:DescribeSubscriptionFilters"
    
    AWS 권한설명
    cloudfront:GetDistributionConfigCloudFront 액세스 로그가 포함된 S3 버킷 이름을 가져옵니다.
    cloudfront:ListDistributions모든 CloudFront 분포를 목록화합니다.
    elasticloadbalancing:
    DescribeLoadBalancers
    모든 로드 밸런서를 목록화합니다.
    elasticloadbalancing:
    DescribeLoadBalancerAttributes
    ELB 액세스가 포함된 S3 버킷의 이름 가져오기 로그.
    lambda:List*모든 람다 함수를 목록화합니다.
    lambda:GetPolicy트리거가 제거될 때 람다 정책을 가져옵니다.
    redshift:DescribeClustersRedshift 클러스터를 모두 목록화합니다.
    redshift:DescribeLoggingStatusRedshift가 포함된 S3 버킷 이름을 가져옵니다.
    s3:GetBucketLoggingS3 액세스 로그가 포함된 S3 버킷의 이름을 가져옵니다.
    s3:GetBucketLocationS3 액세스 로그가 포함된 S3 버킷 지역을 가져옵니다.
    s3:GetBucketNotification기존 람다 트리거 설정을 가져옵니다.
    List all S3 buckets.
    s3:PutBucketNotificationS3 버킷 이벤트 기반 람다 트리거를 추가하거나 제거합니다.
    states:ListStateMachines모든 Step 함수를 목록화합니다.
    states:DescribeStateMachineStep 함수에 대한 로깅 상세 정보를 가져옵니다.
    wafv2:ListLoggingConfigurations웹 애플리케이션 방화벽의 모든 로깅 설정을 목록화합니다.
    logs:PutSubscriptionFilter클라우드와치(CloudWatch) 로그 이벤트 기반으로 람다 트리거를 추가합니다.
    logs:DeleteSubscriptionFilter클라우드와치(CloudWatch) 로그를 남기다 이벤트 에 기반하여 람다 트리거를 제거합니다.
    logs:DescribeSubscriptionFilters지정된 로그 그룹에 대한 구독 필터를 목록화합니다
  3. AWS 통합 페이지에서 AWS 계정을 선택해 로그를 수집할 AWS 계정을 선택하고 로그 수집 탭을 클릭합니다.

    The Log Collection tab of the AWS integration page for a specific AWS account with instructions to send AWS Services logs and a textbox to autosubscribe the Forwarder Lambda function by entering the ARN of the Forwarder Lambda function

  4. 이전 섹션에서 생성한 람다의 ARN을 입력하고 추가를 클릭합니다.

  5. 로그를 수집하려는 서비스를 선택하고 저장을 클릭합니다. 특정 서비스에서 로그 수집을 중지하려면 로그를 선택 해제합니다.

    The Log Collection tab of the AWS integration page for a specific AWS account with one Lambda function successfully entered under Included ARNs and some of the services enabled under Log Sources

  6. 여러 지역의 로그를 보유하고 있는 경우 해당 지역에 람다 함수를 추가로 생성하여 이 페이지에 입력해야 합니다.

  7. 모든 AWS 로그 수집을 중지하려면 람다 위로 마우스를 가져간 다음 삭제 아이콘을 클릭합니다. 해당 함수에 대한 모든 트리거가 제거됩니다.

  8. 이 초기 설정 후 몇 분 내에 Datadog 로그 탐색기에 AWS 로그가 나타납니다.

트리거 수동 설정

클라우드와치(CloudWatch) 로그 그룹에서 로그 수집

클라우드와치(CloudWatch) 그룹에서 로그를 수집하는 경우 다음 방법 중 하나를 사용하여 Datadog 포워더(Forwarder) 람다 함수 트리거를 설정합니다.

  1. AWS 콘솔에서 람다로 이동합니다.
  2. 함수를 클릭하고 Datadog 포워더(Forwarder)를 선택합니다.
  3. 트리거 추가를 클릭하고 클라우드와치(CloudWatch) 로그를 선택합니다.
  4. 드롭다운 메뉴에서 로그 그룹을 선택합니다.
  5. 필터의 이름을 입력하고 선택적으로 필터 패턴을 지정합니다.
  6. Add를 클릭합니다.
  7. Datadog 로그 섹션으로 이동하여 로그 그룹으로 전송된 새로운 로그 이벤트를 살펴보세요.

Terraform 사용자의 경우, 트리거를 프로비저닝하고 관리하기 위해 aws_cloudwatch_log_subscription_filter 리소스를 사용할 수 있습니다. 아래 샘플 코드를 참조하세요.

resource "aws_cloudwatch_log_subscription_filter" "datadog_log_subscription_filter" {
  name            = "datadog_log_subscription_filter"
  log_group_name  = <CLOUDWATCH_LOG_GROUP_NAME> # 예: /aws/lambda/my_lambda_name
  destination_arn = <DATADOG_FORWARDER_ARN> # 예: arn:aws:lambda:us-east-1:123:function:datadog-forwarder
  filter_pattern  = ""
}

AWS CloudFormation 사용자의 경우, CloudFormation AWS::Logs::SubscriptionFilter 리소스를 사용하여 트리거를 프로비저닝하고 관리할 수 있습니다. 아래 샘플 코드를 참조하세요.

샘플 코드는 AWS SAM서버리스 프레임워크에서도 작동합니다. 서버리스 프레임워크의 경우 serverless.yml리소스 섹션 아래에 코드를 넣으세요.

Resources:
  MyLogSubscriptionFilter:
    Type: "AWS::Logs::SubscriptionFilter"
    Properties:
      DestinationArn: "<DATADOG_FORWARDER_ARN>"
      LogGroupName: "<CLOUDWATCH_LOG_GROUP_NAME>"
      FilterPattern: ""

S3 버킷에서 로그 수집

S3 버킷에서 로그를 수집하는 경우, 다음 방법 중 하나를 사용하여 Datadog 포워더(Forwarder) 람다 함수 트리거를 설정합니다.

  1. 람다 함수가 설치되면 AWS 콘솔에서 로그가 포함된 S3 버킷에 트리거를 수동으로 추가합니다.

    Adding trigger
  2. 버킷을 선택한 다음 AWS 안내를 따릅니다.

    Integration Lambda
  3. S3 버킷에 올바른 이벤트 유형을 설정합니다.

    Object Created

완료되면 Datadog 로그 섹션으로 이동하여 로그 탐색을 시작합니다.

Terraform 사용자의 경우, aws_s3_bucket_notification 리소스를 사용하여 트리거를 프로비저닝하고 관리할 수 있습니다. 아래 샘플 코드를 참조하세요.

resource "aws_s3_bucket_notification" "my_bucket_notification" {
  bucket = my_bucket
  lambda_function {
    lambda_function_arn = "<DATADOG_FORWARDER_ARN>"
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = "AWSLogs/"
    filter_suffix       = ".log"
  }
}

CloudFormation 사용자의 경우, S3 버킷에 대해 CloudFormation NotificationConfiguration을 사용하여 트리거를 설정할 수 있습니다. 아래 샘플 코드를 참조하세요.

Resources:
  Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: "<MY_BUCKET>"
      NotificationConfiguration:
        LambdaConfigurations:
        - Event: 's3:ObjectCreated:*'
          Function: "<DATADOG_FORWARDER_ARN>"

스크러빙 및 필터링

람다 함 에서 보낸 이메일 또는 IP 주소(로그)를 스크러빙하거나 람다 파라미터에서 커스텀 스크러빙 규칙을 정의할 수 있습니다. 필터링 옵션을 사용하여 특정 패턴과 일치하는 로그만 제외하거나 보낼 수도 있습니다.

참고 자료