AWS Security Hub 로그 수집

다음에서 지원:

이 문서에서는 AWS Security Hub 로그를 Google Security Operations로 수집하는 방법을 설명합니다. AWS 보안 허브는 AWS 계정 전반에서 보안 알림 및 발견 항목을 포괄적으로 보여줍니다. 이러한 발견 항목을 Google SecOps로 전송하면 Google SecOps 기능을 사용하여 모니터링 및 위협 감지를 개선할 수 있습니다.

시작하기 전에

  • Google SecOps 인스턴스가 있는지 확인합니다.
  • AWS에 대한 권한이 있는지 확인합니다.

AWS IAM 및 S3 구성

  1. 버킷 만들기 사용자 가이드에 따라 Amazon S3 버킷을 만듭니다.
  2. 나중에 사용할 수 있도록 버킷 이름리전을 저장합니다.
  3. IAM 사용자 만들기 사용자 가이드에 따라 사용자를 만듭니다.
  4. 만든 사용자를 선택합니다.
  5. 보안 사용자 인증 정보 탭을 선택합니다.
  6. 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
  7. 사용 사례서드 파티 서비스를 선택합니다.
  8. 다음을 클릭합니다.
  9. 선택사항: 설명 태그를 추가합니다.
  10. 액세스 키 만들기를 클릭합니다.
  11. CSV 파일 다운로드를 클릭하여 나중에 사용할 수 있도록 액세스 키비밀 액세스 키를 저장합니다.
  12. 완료를 클릭합니다.
  13. 권한 탭을 선택합니다.
  14. 권한 정책 섹션에서 권한 추가를 클릭합니다.
  15. 권한 추가를 선택합니다.
  16. Attach policies directly(정책 직접 연결)를 선택합니다.
  17. AmazonS3FullAccess 정책을 검색하여 선택합니다.
  18. 다음을 클릭합니다.
  19. 권한 추가를 클릭합니다.

Lambda 함수 만들기

  1. AWS 관리 콘솔에 로그인합니다.
  2. Lambda로 이동합니다.
  3. 함수 만들기를 클릭하고 처음부터 작성을 선택합니다.
  4. 함수 이름을 지정합니다(예: SecurityHubToS3).
  5. 런타임으로 Python 3.x를 선택합니다.
  6. EventBridge에서 발견된 항목을 가져와 S3 버킷에 쓰는 Lambda 코드를 입력합니다.

    import json
    import boto3
    from datetime import datetime
    
    # Initialize the S3 client
    s3_client = boto3.client('s3')
    
    # S3 bucket where findings will be stored
    bucket_name = 'aws-security-hub-findings-stream'
    
    def lambda_handler(event, context):
       # Extract Security Hub findings from the event
       findings = event['detail']['findings']
    
       # Generate a timestamp for the file name to avoid overwriting
       timestamp = datetime.now().strftime('%Y-%m-%dT%H-%M-%S')
    
       # Generate the S3 object key (file name) based on the timestamp
       object_key = f"security_hub_findings_{timestamp}.json"
    
       # Convert findings to JSON format
       findings_json = json.dumps(findings, indent=4)
    
       # Upload the findings to S3
       try:
          response = s3_client.put_object(
                Bucket=bucket_name,
                Key=object_key,
                Body=findings_json,
                ContentType='application/json'
          )
          print(f"Successfully uploaded findings to S3: {response}")
       except Exception as e:
          print(f"Error uploading findings to S3: {e}")
          raise e
    
       return {
          'statusCode': 200,
          'body': json.dumps('Successfully processed findings')
       }
    
  7. 다음 정책을 사용하여 람다 함수에 IAM 역할을 추가하여 람다의 권한을 설정합니다.

    {
       "Version": "2012-10-17",
       "Statement": [
          {
                "Effect": "Allow",
                "Action": [
                   "s3:PutObject"
                ],
                "Resource": "arn:aws:s3:::aws-security-hub-findings-stream/*"
          }
       ]
    }
    

EventBridge를 사용하여 결과를 전달하도록 AWS Security Hub 구성

  1. AWS 관리 콘솔에 로그인합니다.
  2. 검색창에 Security Hub를 입력하고 서비스 목록에서 선택합니다.
  3. 설정을 클릭합니다.
  4. 통합 섹션에서 EventBridge를 찾아 사용 설정을 클릭합니다.
  5. 검색창에 EventBridge를 입력하고 서비스 목록에서 선택합니다.
  6. EventBridge 콘솔에서 규칙 > 규칙 만들기를 클릭합니다.
  7. 다음과 같은 규칙 구성을 제공합니다.
    1. 규칙 이름: 규칙의 설명이 포함된 이름을 지정합니다(예: SendSecurityHubFindingsToS3).
    2. 이벤트 소스: AWS 서비스를 선택합니다.
    3. 서비스 이름: Security Hub를 선택합니다.
    4. 이벤트 유형: Security Hub Findings(보안 허브 결과)를 선택합니다.
    5. 타겟 설정: 람다 함수를 선택합니다.
    6. 방금 만든 람다 함수 (SecurityHubToS3)를 선택합니다.
  8. 만들기를 클릭합니다.

AWS Security Hub 로그를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정 > 피드로 이동합니다.
  2. 새로 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다(예: AWS Security Hub 로그).
  4. 소스 유형으로 Amazon S3를 선택합니다.
  5. 로그 유형으로 AWS Security Hub를 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 입력 매개변수의 값을 지정합니다.

    • 리전: Amazon S3 버킷이 있는 리전입니다.
    • S3 URI: 버킷 URI입니다.
      • s3://your-log-bucket-name/
        • your-log-bucket-name을 버킷의 실제 이름으로 바꿉니다.
    • URI: 디렉터리 또는 하위 디렉터리가 포함된 디렉터리를 선택합니다.
    • 소스 삭제 옵션: 원하는 삭제 옵션을 선택합니다.

    • 액세스 키 ID: S3 버킷에 대한 액세스 권한이 있는 사용자 액세스 키입니다.

    • 보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.

    • 애셋 네임스페이스: 애셋 네임스페이스입니다.

    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.

  8. 다음을 클릭합니다.

  9. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

UDM 매핑 표

로그 필드 UDM 매핑 논리
account principal.group.product_object_id 문제와 연결된 AWS 계정 ID입니다.
configurationItem.ARN target.resource.id 구성 항목의 Amazon 리소스 이름 (ARN)입니다.
configurationItem.awsAccountId principal.user.userid 구성 항목의 AWS 계정 ID입니다.
configurationItem.awsRegion target.asset.location.country_or_region 구성 항목의 AWS 리전입니다.
configurationItem.configuration.complianceType security_result.summary 구성 항목의 규정 준수 유형입니다.
configurationItem.configuration.configRuleList[].complianceType security_result.summary 각 구성 규칙의 규정 준수 상태입니다.
configurationItem.configuration.configRuleList[].configRuleArn security_result.rule_id AWS Config 규칙의 ARN입니다.
configurationItem.configuration.configRuleList[].configRuleId security_result.about.labels.configRuleId AWS Config 규칙의 ID입니다.
configurationItem.configuration.configRuleList[].configRuleName security_result.rule_name AWS Config 규칙의 이름입니다.
configurationItem.configuration.privateIpAddress target.ip 구성 항목의 비공개 IP 주소입니다.
configurationItem.configuration.publicIpAddress target.ip 구성 항목의 공개 IP 주소입니다.
configurationItem.configurationItemCaptureTime target.asset.attribute.creation_time 구성 항목의 캡처 시간으로, 타임스탬프로 변환됩니다.
configurationItem.configurationItemStatus target.asset.attribute.labels.Configuration Item Status 구성 항목의 상태입니다.
configurationItem.relationships[].resourceId target.asset.attribute.cloud.vpc.id 관련 리소스의 리소스 ID로, vpc와 일치하는 경우 VPC ID에 사용됩니다.
configurationItem.resourceId target.resource.id 구성 항목의 리소스 ID입니다.
configurationItem.resourceName target.resource.name 리소스 이름입니다.
configurationItem.resourceType target.resource.resource_subtype 구성 항목의 리소스 유형입니다.
configurationItem.tags.Contact principal.user.user_display_name 또는 principal.user.email_addresses 태그에서 추출된 연락처 세부정보로, 이메일 및 사용자 이름을 파싱합니다.
configurationItem.tags.OS/configurationItem.tags.Os target.asset.platform_software.platform 태그의 운영체제입니다. Windows 또는 Linux인 경우 플랫폼에 매핑됩니다.
configurationItemDiff.changeType metadata.event_type 변경 유형으로, RESOURCE_WRITTEN 또는 RESOURCE_CREATION에 매핑됩니다.
detail.accountId principal.group.product_object_id 문제와 연결된 AWS 계정 ID입니다.
detail.actionDescription detail.actionName detail.description sec_result.description 발견 항목에 대한 설명입니다.
detail.findings[].AwsAccountId principal.group.product_object_id 문제와 연결된 AWS 계정 ID입니다.
detail.findings[].CompanyName detail.findings[].CreatedAt detail.findings[].Description sec_result.description 발견 항목에 대한 설명입니다.
detail.findings[].FindingProviderFields.Severity.Label sec_result.severity 발견 항목의 심각도 라벨로, 대문자로 변환됩니다.
detail.findings[].FindingProviderFields.Types[] detail.findings[].FirstObservedAt detail.findings[].GeneratorId detail.findings[].Id detail.findings[].LastObservedAt detail.findings[].ProductArn detail.findings[].ProductFields. 아래를 참조하세요. 추가 필드, 사용자, 타겟 정보에 사용되는 다양한 필드입니다.
detail.findings[].ProductName detail.findings[].RecordState detail.findings[].Region target.location.name 발견 항목의 AWS 리전입니다.
detail.findings[].Resources[].Details. 아래를 참조하세요. 발견 항목과 관련된 리소스에 대한 세부정보입니다.
detail.findings[].Resources[].Id target.resource.product_object_id 리소스의 ID입니다.
detail.findings[].Resources[].Partition detail.findings[].Resources[].Region target.location.name 리소스의 AWS 리전입니다.
detail.findings[].Resources[].Tags detail.findings[].Resources[].Type target.resource.resource_type, target.resource.resource_subtype, metadata.event_type 리소스 유형, 하위유형, 이벤트 유형 매핑에 사용되는 리소스 유형입니다.
detail.findings[].Sample detail.findings[].SchemaVersion detail.findings[].Severity.Label detail.findings[].SourceUrl detail.findings[].Title sec_result.summary 결과의 제목입니다.
detail.findings[].Types[] detail.findings[].UpdatedAt detail.findings[].Workflow.Status detail.findings[].WorkflowState detail-type metadata.product_event_type 이벤트의 세부정보 유형입니다.
id metadata.product_log_id 이벤트 ID입니다.
region target.location.name 이벤트의 AWS 리전입니다.
resources[] source time version (파서 로직) metadata.event_timestamp 이벤트 타임스탬프로 사용되는 원래 로그 항목의 생성 시간입니다.
(파서 로직) metadata.log_type AWS_SECURITY_HUB로 설정합니다.
(파서 로직) metadata.product_name AWS Security Hub로 설정합니다.
(파서 로직) metadata.vendor_name AMAZON로 설정합니다.
(파서 로직) target.asset.attribute.cloud.environment AMAZON_WEB_SERVICES로 설정합니다.
(파서 로직) metadata.event_type Resources[].Type 또는 configurationItemDiff.changeType에서 매핑되지 않은 경우 기본값으로 USER_RESOURCE_ACCESS로 설정합니다. configurationItems가 있고 다른 이벤트 유형이 설정되지 않은 경우 STATUS_UPDATE로 설정합니다. configurationItem 또는 configurationItems이 있고 상태가 OK 또는 ResourceDiscovered이면 RESOURCE_READ로 설정합니다. configurationItem 또는 configurationItems이 있고 상태가 ResourceDeleted이면 RESOURCE_DELETION로 설정합니다.
(파서 로직) metadata.description detail.findings[].ProductFields.aws/guardduty/service/serviceName가 있는 경우 guardduty로 설정합니다.
(파서 로직) target.asset.attribute.cloud.vpc.resource_type configurationItems.relationships[].resourceIdvpc와 일치하면 VPC_NETWORK로 설정합니다.
(파서 로직) target.resource.resource_type configurationItem 또는 configurationItems가 있는 경우 VIRTUAL_MACHINE로 설정합니다. 다른 리소스 유형이 설정되지 않은 경우 UNSPECIFIED로 설정합니다.
(파서 로직) target.asset.platform_software.platform configurationItem 메시지에 Windows 또는 (Linux|LINUX)가 있는지 여부에 따라 WINDOWS 또는 LINUX로 설정합니다. configurationItems의 경우 configItem.tags.OS 또는 configItem.tags.Os를 기반으로 설정됩니다.
(파서 로직) disambiguation_key 단일 로그 항목에서 여러 이벤트가 생성될 때 추가되었습니다.

변경사항

2025-02-18

개선사항:

  • JSON 로그 형식의 새 배열 지원을 추가했습니다.

2025-01-20

개선사항:

  • 새 로그 형식 지원을 추가했습니다.

2025-01-16

개선사항:

  • 새 JSON 로그 형식에 대한 지원이 추가되었습니다.

2023-06-20

개선사항:

  • metadata.event_typeGENERIC_EVENT에서 USER_RESOURCE_ACCESS로 수정했습니다.

2023-03-24

개선사항:

  • detail.findings.0.Resources.0.Type == AwsEcsTaskDefinition인 경우 -
  • target.resource.resource_typeTASK에 매핑했습니다.
  • event_typeUSER_RESOURCE_ACCESS에 매핑했습니다.
  • detail.findings.0.ProductFields.Resources:0/Idprincipal.asset_id에 매핑했습니다.
  • STATUS_UPDATE가 적절한 파싱 옵션이 아니므로 다른 모든 실패 로그를 GENERIC_EVENT로 파싱했습니다.

2022-08-22

개선사항:

  • vendor_name을 AWS SECURITY HUB에서 AMAZON로 업데이트했습니다.
  • product_name을 AWS SECURITY HUB에서 AWS Security Hub로 업데이트했습니다.
  • configurationItem 또는 configurationItems가 포함된 새 JSON 형식 로그를 파싱했습니다.
  • for 루프를 사용하여 가져오기 파일로 처리된 로그를 분리하고 각각을 개별 이벤트로 파싱하여 처리했습니다.

2022-07-01

  • 새로 만든 파서

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가의 답변을 받으세요.