실시간 이메일 및 채팅 알림 사용 설정

개요

Security Command Center는 Google Cloud 콘솔에서 발견 항목에 대한 실시간 알림을 제공합니다. 이 가이드에서는 Google Cloud 서비스와 서드 파티 API를 사용하여 이 기능을 확장하고 이메일 및 채팅 앱에서 거의 실시간에 가까운 알림을 받는 방법을 설명합니다. 가이드를 완료하면 Google Cloud 콘솔에 로그인하지 않아도 구성된 서드 파티 서비스에서 새 발견 항목에 대한 알림을 받을 수 있으므로, 취약점과 위협을 더 빠르게 분류할 수 있습니다. Security Command Center에서 취약점 및 위협에 대해 자세히 알아보세요.

토폴로지

이 가이드에서는 다음 다이어그램에 설명된 구성을 만듭니다.

실시간에 가까운 알림 워크플로(클릭하여 확대)
Security Command Center의 실시간에 가까운 알림 워크플로(확대하려면 클릭)

목표

이 가이드에서는 다음과 같은 작업을 수행하게 됩니다.

  1. Pub/Sub 주제 설정
  2. Slack, WebEx Teams, SendGrid 이메일 설정
  3. Cloud Functions에서 코드 작성
  4. Security Command Center에 심각도가 높거나 매우 높은 발견 항목이 새로 기록될 때마다 Slack, WebEx Teams, 또는 SendGrid 이메일로 알림을 전송하도록 Pub/Sub 및 Cloud Functions 구성
  5. 알림 관련 문제 해결

비용

이 튜토리얼에서는 다음과 같은 비용이 청구될 수 있는 Google Cloud 구성요소를 사용합니다.

  • Pub/Sub
  • Cloud Functions
  • Cloud Build

가격 계산기를 사용하면 예상 사용량을 토대로 예상 비용을 산출할 수 있습니다.

시작하기 전에

이 가이드를 완료하려면 다음 Identity and Access Management(IAM) 역할이 있어야 합니다.

  • 조직 관리자(roles/resourcemanager.organizationAdmin)
  • 보안 센터 관리자(roles/securitycenter.admin)
  • 보안 관리자(roles/iam.securityAdmin)
  • 소유자(roles/owner), 편집자(roles/editor), 또는 커스텀 역할serviceusage.services.use 권한이 있는 역할
  • 서비스 계정 만들기(roles/iam.serviceAccountCreator)
  • Pub/Sub 편집자(roles/pubsub.editor)
  • 결제 계정 관리자(roles/billing.admin)

Security Command Center의 IAM 역할은 조직, 폴더, 프로젝트 수준에서 부여할 수 있습니다. 발견 항목, 애셋, 보안 소스를 보거나 수정하거나 만들거나 업데이트할 수 있는 기능은 액세스 권한이 부여된 수준에 따라 다릅니다. Security Command Center 역할에 대해 자세히 알아보려면 액세스 제어를 참조하세요.

프로젝트 설정

프로젝트를 만들거나 선택하려면 다음 단계를 완료하세요.

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Cloud Build API 사용 설정

    API 사용 설정

  5. Google Cloud CLI를 설치합니다.
  6. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  7. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  8. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  9. Cloud Build API 사용 설정

    API 사용 설정

  10. Google Cloud CLI를 설치합니다.
  11. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init

예상 시간: 단일 서비스에 대한 알림을 설정하고 테스트하는 데 약 1시간 정도 걸립니다.

Pub/Sub 주제 설정

Pub/Sub는 독립적인 애플리케이션 간에 메시지를 주고받을 수 있도록 하는 실시간 메시징 서비스입니다. Pub/Sub 자세히 알아보기

이 섹션에서는 발견 항목을 Pub/Sub 주제에 게시하도록 Security Command Center를 구성합니다.

Pub/Sub 주제를 설정하고 구독하려면 다음 단계별 안내를 따르세요.

  1. 환경 변수에 Google Cloud 프로젝트를 지정합니다.

    export PROJECT_ID=PROJECT_ID
    

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

  2. 환경 변수에 Google Cloud 조직을 지정합니다.

    export ORG_ID=ORG_ID
    

    ORG_ID를 조직 ID로 바꿉니다.

  3. gcloud 명령어에 대해 프로젝트 ID를 설정합니다.

    gcloud config set project PROJECT_ID
    
  4. 알림이 게시되는 Pub/Sub 주제를 만듭니다.

    gcloud pubsub topics create scc-critical-and-high-severity-findings-topic
    
  5. 환경 변수에 주제를 지정합니다.

    export TOPIC=projects/$PROJECT_ID/topics/scc-critical-and-high-severity-findings-topic
    
  6. 주제에 메시지를 게시할 때 이메일 또는 채팅 메시지를 보내도록 Cloud Functions에 알리는 구독을 만듭니다.

    gcloud pubsub subscriptions create scc-critical-and-high-severity-findings-sub \
      --topic scc-critical-and-high-severity-findings-topic
    
  7. Security Command Center에서 주제에 알림을 게시하도록 구성합니다. ListFindings API와 호환되는 모든 필터를 사용할 수 있습니다.

    다음 필터는 심각도가 높거나 매우 높은 활성 상태인 발견 항목에 대한 알림을 게시합니다. 결과 필터링에 대해 자세히 알아보세요.

     gcloud scc notifications create scc-critical-and-high-severity-findings-notify \
       --pubsub-topic $TOPIC \
       --organization $ORG_ID \
       --filter "(severity=\"HIGH\" OR severity=\"CRITICAL\") AND state=\"ACTIVE\""
    

다음으로 Pub/Sub에서 알림을 수신할 이메일 또는 채팅 앱을 만들거나 구성합니다.

메시지 앱 설정

이 섹션에서는 Pub/Sub 및 Cloud Functions를 사용하여 SendGrid Email API, Slack, WebEx 팀에 대해 거의 실시간 알림을 사용 설정하는 방법을 설명합니다. 아래의 탭을 클릭하고 선택한 서비스의 안내를 따르세요.

SendGrid 이메일

이메일 알림을 사용 설정하려면 다음을 수행합니다.

  • SendGrid Email API 계정을 만들고 API 키를 가져옵니다.
  • Pub/Sub에서 알림이 수신되면 이메일을 전송하는 Cloud 함수를 만들고 배포하세요.

SendGrid Email API 계정 만들기

이 섹션에서는 SendGrid Email API 계정을 만들고 API 키를 가져옵니다. SendGrid가 이미 사용 설정된 경우 Sendgrid Email API 키 가져오기로 건너뛰고 기존 API 키에 적절한 권한이 있는지 확인합니다.

  1. Google Cloud Console로 이동합니다.
    Google Cloud Console로 이동
  2. 페이지 상단의 검색창에서 SendGrid Email API를 검색합니다. SendGrid 검색
  3. 다음 페이지에서 자신의 니즈에 맞는 요금제를 선택합니다.

    • 무료 요금제에서는 매달 최대 12,000개의 이메일을 허용합니다. 이는 이 가이드에서는 충분하지만 대규모 조직에서는 더 많은 양의 이메일이 필요할 수 있습니다. 많은 이메일 알림이 예상되는 경우 알림에 추가 필터를 추가하여 알림이 많은 결과 항목을 제외할 수 있습니다.
    • SendGrid에 연결할 프로젝트를 선택하라는 메시지가 표시될 수 있습니다. 프로젝트를 선택하여 계속 진행합니다. 프로젝트와 연결된 결제 계정의 구매를 관리할 수 있는 적절한 권한이 필요할 수 있습니다.
  4. 약관을 검토한 뒤 동의하는 경우 구독을 클릭합니다.

  5. SendGrid로 등록을 클릭하여 SendGrid 서비스를 활성화합니다.

  6. 등록 화면에서 사용자 이름, 비밀번호, 이메일 주소를 입력합니다. 서비스 약관에 동의한 후 계속을 클릭합니다.

  7. 확인 대화상자에서 Google로 돌아가기를 클릭합니다.

SendGrid Email API 키 가져오기

  1. SendGrid 웹사이트에서 API 키 관리를 클릭합니다. SendGrid 웹사이트에 새 탭이 열립니다.API 키 관리

  2. 메시지가 표시되면 양식을 작성하거나 로그인합니다. 시작하기를 클릭합니다.

  3. 메뉴 패널에서 Settings(설정)를 펼치고 API Keys(API 키)를 클릭합니다.

  4. 다음 화면에서 Create API Key(API 키 만들기) 버튼을 클릭합니다.

  5. API Key Name(API 키 이름)에 'SCC Email Notifications'를 입력하고 Full Access(전체 액세스)를 선택한 후 Create & View(만들기 및 보기) 버튼을 클릭합니다.

    API 키 이름

  6. API 키가 표시되면, 값을 기록해 둡니다. 이 값은 다음 섹션에서 필요합니다.

  7. 완료를 클릭합니다. 현재 API 키 집합이 표시됩니다. 탭을 닫고 Google Cloud 콘솔로 돌아갑니다.

그런 다음 이메일 주소로 알림을 보내기 위해 Cloud 함수를 배포합니다.

SendGrid Cloud 함수 만들기

이 섹션에서는 이메일 계정으로 알림을 보내는 함수를 배포합니다.

  1. Cloud Functions로 이동합니다.
    Cloud Functions로 이동

  2. Pub/Sub 주제를 만들 때 사용한 것과 동일한 PROJECT_ID를 사용 중인지 확인합니다.

  3. 함수 만들기를 클릭합니다.SendGrid 함수

  4. 함수 이름send-high-and-critical-finding-email-notification로 설정하고 트리거 유형Pub/Sub로 설정합니다.

  5. Pub/Sub 주제 설정에서 만든 Pub/Sub 주제를 선택합니다.

  6. 저장을 클릭한 후 다음을 클릭합니다.

  7. 다음 페이지에서 런타임Python 3.8로 설정합니다. 이 섹션의 코드 샘플은 Python으로 작성되었지만 Cloud Functions에서 지원하는 모든 언어를 사용할 수 있습니다.

  8. 파일 목록에서 requirements.txt를 클릭하고 텍스트 필드에 sendgrid를 추가합니다.

    SendGrid 요구사항

  9. main.py를 클릭하고 콘텐츠를 다음 코드 스니펫으로 바꿉니다.

    import base64
    import json
    from sendgrid import SendGridAPIClient
    from sendgrid.helpers.mail import Mail
    
    def send_email_notification(event, context):
        """Triggered from a message on a Pub/Sub topic.
        Args:
             event (dict): Event payload.
             context (google.cloud.functions.Context): Metadata for the event.
        """
        pubsub_message = base64.b64decode(event['data']).decode('utf-8')
        message_json = json.loads(pubsub_message)
        message = Mail(
            from_email='noreply@yourdomain.com',
            to_emails='$EMAIL_ADDRESS',
            subject='New High or Critical Severity Finding Detected',
            html_content='A new high or critical severity finding was
            detected: ' + ''.join(message_json['finding']['category']))
        try:
            sg = SendGridAPIClient('$SENDGRID_EMAIL_API_KEY')
            response = sg.send(message)
            print(response.status_code)
            print(response.body)
            print(response.headers)
        except Exception as e:
            print(e)
    
        print(pubsub_message)
    
  10. 다음을 바꿉니다.

    • noreply@yourdomain.com을 메시지가 발신되는 이메일 주소로 변경합니다.
    • $EMAIL_ADDRESS를 원하는 수신자의 이메일 주소로 변경합니다. 참고: 이 변수에는 이메일 주소(['user1@yourdomain.com', 'user2@yourdomain.com'])의 배열을 포함하거나, 아니면 커스텀 코드를 작성하여 긴급 대기 중인 개인 순환 목록 등에 맞게 동적 변수를 설정할 수도 있습니다.
    • $SENDGRID_EMAIL_API_KEY를 이미 보유한 API 키 또는 이전 섹션에서 만든 키로 변경합니다.
  11. 진입점 필드로 이동하여 코드 스니펫(이 예시에서는 send_email_notification)에 함수의 이름을 입력합니다.

  12. 배포를 클릭합니다. Cloud Functions 목록으로 돌아가고 여기에서 새 함수를 확인할 수 있습니다. 함수 이름 옆에 녹색 체크표시가 나타나면 성공적으로 배포된 것입니다. 이 프로세스는 몇 분 정도 걸릴 수 있습니다. SendGrid 함수 배포

Slack

Slack 채널에 알림을 전송하려면 다음을 수행합니다.

  • 공개 Slack 채널에 메시지를 게시할 수 있는 충분한 권한이 있는 새 Slack 앱을 만듭니다.
  • Pub/Sub에서 알림이 수신되면 채팅 메시지를 Slack에 게시하는 Cloud 함수를 만들고 배포합니다.

새 Slack 앱 만들기

이 섹션에서는 알림을 받을 새 Slack 앱을 만듭니다.

  1. Slack API 앱으로 이동합니다. 새 탭에서 페이지가 열립니다.
  2. 로그인하거나 계정을 만듭니다.

  3. Create an App(앱 만들기)을 선택합니다.

  4. App Name(앱 이름)을 'SCC Finding Notifier'로 설정합니다.

  5. Slack 봇에서 메시지를 게시할 Development Slack Workspace(개발 Slack 작업공간)를 선택한 후 Create App(앱 만들기)을 클릭합니다.

  6. 탐색 패널에서 OAuth & Permissions(OAuth 및 권한)를 선택합니다.

    Slack 권한

  7. Scopes(범위) 섹션으로 이동합니다. 범위는 다음과 같은 두 가지 카테고리로 분류됩니다.

    • Bot Token Scopes(봇 토큰 범위)
    • User Token Scopes(사용자 토큰 범위)
  8. 이 실습에서는 사용자 토큰 범위를 추가할 필요가 없습니다. Bot Token Scopes(봇 토큰 범위) 아래에서 Add an OAuth Scope(OAuth 범위 추가)를 클릭하고 다음을 입력합니다.

    • chat:write
    • chat:write.public

      Slack 범위
  9. OAuth & Permissions(OAuth 및 권한) 페이지 상단으로 스크롤하고 Install App to Workspace(작업공간에 앱 설치)를 클릭합니다.

  10. 확인 대화상자에서 Allow(허용)를 클릭합니다.

  11. Cloud 함수에서 사용할 Bot User OAuth Access Token(봇 사용자 OAuth 액세스 토큰)을 복사합니다.

그런 다음 Cloud 함수를 배포하여 Slack 그룹에 알림을 보냅니다.

Slack Cloud 함수 만들기

이 섹션에서는 Slack 계정으로 알림을 보내는 함수를 배포합니다.

  1. Cloud Functions로 이동합니다.
    Cloud Functions로 이동

  2. Pub/Sub 주제가 생성된 프로젝트와 동일한 PROJECT_ID를 사용 중인지 확인합니다.

  3. 함수 만들기를 클릭합니다.SendGrid 함수

  4. 함수 이름slack-chat-high-and-critical-findings로 설정하고 트리거 유형Pub/Sub로 설정합니다.

  5. Pub/Sub 주제 설정에서 만든 Pub/Sub 주제를 선택합니다.

  6. 저장을 클릭한 후 다음을 클릭합니다.

  7. 다음 페이지에서 런타임Python 3.8로 설정합니다. 이 섹션의 코드 샘플은 Python으로 작성되었지만 Cloud Functions에서 지원하는 모든 언어를 사용할 수 있습니다.

  8. 파일 목록으로 이동합니다. requirements.txt를 클릭하고 requests를 추가합니다. Slack 요구사항

  9. main.py를 클릭하고 해당 콘텐츠를 다음 코드 스니펫으로 바꿉니다.

    import base64
    import json
    import requests
    
    TOKEN = "BOT_ACCESS_TOKEN"
    
    def send_slack_chat_notification(event, context):
        pubsub_message = base64.b64decode(event['data']).decode('utf-8')
        message_json = json.loads(pubsub_message)
        finding = message_json['finding']
    
        requests.post("https://slack.com/api/chat.postMessage", data={
            "token": TOKEN,
            "channel": "#general",
            "text": f"A high severity finding {finding['category']} was detected!"
        })
    
  10. BOT_ACCESS_TOKEN을 Slack 앱으로 만든 봇 사용자 OAuth 액세스 토큰으로 바꿉니다.

  11. 진입점 필드로 이동하여 코드 스니펫(이 예시에서는 send_slack_chat_notification)에 함수의 이름을 입력합니다.

  12. 배포를 클릭합니다. Cloud Functions 목록으로 돌아가고 여기에서 새 함수를 확인할 수 있습니다. 함수 이름 옆에 녹색 체크표시가 나타나면 성공적으로 배포된 것입니다. 이 프로세스는 몇 분 정도 걸릴 수 있습니다. 메시지는 #general Slack 채널에 표시됩니다. Slack 함수

WebEx

WebEx Teams 계정으로 알림을 보내려면 다음 단계별 안내를 따르세요.

  • Security Command Center에서 애셋을 검색할 권한이 있는 새 서비스 계정을 만듭니다.
  • 작업공간에 메시지를 게시할 수 있는 충분한 권한이 있는 새로운 WebEx 봇을 만듭니다.
  • Pub/Sub 주제에서 알림을 받으면 Pub/Sub를 구독하고 WebEx에 채팅 메시지를 게시하는 Cloud 함수를 만들고 배포합니다.

서비스 계정 만들기

Cloud Functions는 기본적으로 Security Command Center에서 애셋을 검색할 수 없습니다. 이 섹션에서는 Cloud Functions가 발견 항목과 연결된 애셋을 검색할 수 있는 서비스 계정을 프로비저닝합니다.

  1. 서비스 계정의 이름을 정하고 환경 변수로 지정합니다.

    export SERVICE_ACCOUNT=ACCOUNT_NAME
    
  2. 프로젝트의 서비스 계정을 만듭니다.

    gcloud iam service-accounts create $SERVICE_ACCOUNT \
     --display-name "Service Account for SCC Finding Notifier WebEx Cloud Function" \
     --project $PROJECT_ID
    
  3. 조직 수준에서 서비스 계정에 securitycenter.assetsViewer 역할을 부여합니다.

     gcloud organizations add-iam-policy-binding $ORG_ID \
       --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/securitycenter.assetsViewer'
    

Webex 봇 만들기

이 섹션에서는 작업공간에 메시지를 게시하는 WebEx 봇을 만듭니다.

  1. WebEx Teams 계정에 로그인하고 New Bot(새 봇) 페이지로 이동합니다.

  2. Bot Name(봇 이름)을 'SCC Finding Notifier'로 설정합니다.

  3. 설명이 포함된 고유한 Bot Username(봇 사용자 이름)(your-name-scc-finding-notifier-demo)을 선택합니다.

  4. Icon(아이콘)에서 Default 1(기본값 1)을 선택합니다.

  5. Description(설명)을 '심각도가 높거나 매우 높은 발견 항목이 Security Command Center에 게시될 때마다 팀에게 알림을 전송하는 봇'으로 설정합니다.

  6. Add Bot(봇 추가)을 클릭합니다.

  7. 확인 페이지에서 봇 액세스 토큰을 복사하고 Cloud 함수에서 사용할 수 있도록 저장합니다.

작업공간에 Webex 봇 추가

이 섹션에서는 작업공간에 WebEx 봇을 추가합니다.

  1. 봇이 알림을 게시할 WebEx 공간에서 활동 패널을 확장합니다. WebEx 패널

  2. Add People(사용자 추가)를 선택합니다.

  3. 텍스트 필드에 'SCC Finding Notifier'를 입력하고 드롭다운 메뉴에서 만든 봇을 선택합니다. WebEx 추가

  4. Add(추가) 버튼을 선택한 다음 패널을 닫습니다.

  5. Cloud 함수 작업공간의 회의실 ID를 가져옵니다. 데스크톱 컴퓨터에서 https://developer.webex.com/docs/api/v1/rooms/list-rooms로 이동하고 필요한 경우 로그인합니다. 이 페이지에서는 WebEx API를 사용하여 사용자가 속한 회의실을 나열합니다. WebEx 회의실

  6. 검색 패널로 이동합니다.

  7. 패널 상단에서 사용해 보기 탭을 선택합니다.

  8. 모든 옵션을 기본값으로 두고 Run(실행)을 클릭합니다.

  9. Response(응답) 탭에서 items 또는 회의실 목록이 포함된 JSON 형식의 응답을 받습니다. 알림을 표시할 회의실의 title을 찾아서 연결된 id 값을 기록합니다. WebEx 응답

다음으로 Cloud 함수를 배포하여 WebEx 작업공간에 알림을 보냅니다.

WebEx Cloud 함수 만들기

이 섹션에서는 WebEx 계정으로 알림을 보내는 함수를 배포합니다.

  1. Cloud Functions로 이동합니다.
    Cloud Functions로 이동

  2. Pub/Sub 주제가 생성된 프로젝트와 동일한 PROJECT_ID를 선택합니다.

  3. 함수 만들기를 클릭합니다. WebEx 함수

  4. 함수 이름webex-teams-high-and-critical-findings로 설정하고 트리거 유형Pub/Sub로 설정합니다.

  5. Pub/Sub 주제 설정에서 만든 Pub/Sub 주제를 선택합니다.

  6. 변수, 네트워킹 및 고급 설정 필드를 펼칩니다.

  7. 서비스 계정에서 만든 webex-cloud-function-sa 서비스 계정을 필터링하고 선택합니다. WebEx 변수

  8. 저장을 클릭한 후 다음을 클릭합니다.

  9. 다음 페이지에서 런타임Python 3.8로 설정합니다. 이 섹션의 코드 샘플은 Python으로 작성되었지만 Cloud Functions에서 지원하는 모든 언어를 사용할 수 있습니다.

  10. 파일 목록으로 이동합니다. requirements.txt를 클릭하고 다음을 추가합니다.

    • requests==2.25.1
    • google-cloud-securitycenter==1.1.0 WebEx 요구사항
  11. main.py를 클릭하고 콘텐츠를 다음 코드 스니펫으로 바꿉니다.

    #!/usr/bin/env python3
    import base64
    import json
    
    import requests
    from google.cloud import securitycenter_v1
    
    WEBEX_TOKEN = "WEBEX_TOKEN"
    ROOM_ID = "ROOM_ID"
    
    TEMPLATE = """
    **Severity:** {severity}\n
    **Asset:** {asset}\n
    **SCC Category:** {category}\n
    **Project:** {project}\n
    **First observed:** {create_time}\n
    **Last observed:** {event_time}\n
    **Link to finding:** {finding_link}
    """
    
    PREFIX = "https://console.cloud.google.com/security/command-center/findings"
    
    def get_finding_detail_page_link(finding_name):
        """Constructs a direct link to the finding detail page."""
        org_id = finding_name.split("/")[1]
        return f"{PREFIX}?organizationId={org_id}&resourceId={finding_name}"
    
    def get_asset(parent, resource_name):
        """Retrieves the asset corresponding to `resource_name` from SCC."""
        client = securitycenter_v1.SecurityCenterClient()
        resp = client.list_assets(
            securitycenter_v1.ListAssetsRequest(
                parent=parent,
                filter=f'securityCenterProperties.resourceName="{resource_name}"',
            )
        )
        page = next(resp.pages)
        if page.total_size == 0:
            return None
        asset = page.list_assets_results[0].asset
        return json.loads(securitycenter_v1.Asset.to_json(asset))
    
    def send_webex_teams_notification(event, context):
        """Send the notification to WebEx Teams."""
        pubsub_message = base64.b64decode(event["data"]).decode("utf-8")
        message_json = json.loads(pubsub_message)
        finding = message_json["finding"]
    
        parent = "/".join(finding["parent"].split("/")[0:2])
        asset = get_asset(parent, finding["resourceName"])
    
        requests.post(
            "https://webexapis.com/v1/messages",
            json={
                "roomId": ROOM_ID,
                "markdown": TEMPLATE.format(
                    severity=finding["severity"],
                    asset=asset["securityCenterProperties"]["resourceDisplayName"],
                    category=finding["category"],
                    project=asset["resourceProperties"]["project"],
                    create_time=finding["createTime"],
                    event_time=finding["eventTime"],
                    finding_link=get_finding_detail_page_link(finding["name"]),
                ),
            },
            headers={"Authorization": f"Bearer {WEBEX_TOKEN}"},
        )
    
  12. 다음을 바꿉니다.

    • WEBEX_TOKENWebEx 봇 만들기 섹션의 봇 액세스 토큰으로 바꿉니다.
    • ROOM_ID작업공간에 WebEx 봇 추가 섹션의 회의실 ID로 바꿉니다.
  13. 진입점 필드로 이동하여 코드 스니펫(이 예시에서는 send_webex_teams_notification)에 함수의 이름을 입력합니다.

  14. 배포를 클릭합니다. Cloud Functions 목록으로 돌아가고 여기에서 새 함수를 확인할 수 있습니다. 함수 이름 옆에 녹색 체크표시가 나타나면 성공적으로 배포된 것입니다. 이 프로세스는 몇 분 정도 걸릴 수 있습니다. WebEx 배포

선택한 서비스의 이전 단계가 오류 없이 완료되면 설정이 완료되고 알림을 받기 시작합니다. 주의사항

  • 심각도가 높거나 매우 높은 발견 항목에 대해 별도의 이메일 또는 채팅 메시지가 수신됩니다. 알림의 빈도 또는 수는 조직 내의 리소스에 따라 다릅니다.
  • 알림은 거의 실시간으로 게시되고 전송됩니다. 그러나 이메일 또는 메시지의 즉시 전송은 보장되지 않습니다. 여러 요소로 인해 지연될 수 있으며 SendGrid, 이메일 시스템, Slack, WebEx의 문제 등이 발생할 수 있습니다.

알림 워크플로를 변경하려면 다음을 수행하면 됩니다.

  • Cloud 함수를 업데이트하여 수신자를 변경합니다.
  • Pub/Sub 주제에 대한 필터를 업데이트하여 알림을 트리거하는 발견 항목을 변경합니다.

알림 테스트

알림이 올바르게 구성되었는지 테스트하려면 아래 안내에 따라 심각도가 높은 발견 항목을 활성 및 비활성 상태 간에 전환합니다.

  1. Security Command Center 페이지로 이동
    발견 항목 페이지로 이동
  2. 메시지가 표시되면 조직을 선택합니다.
  3. 빠른 필터 패널에서 심각도 섹션까지 아래로 스크롤하고 높음 또는 중요를 선택합니다. 발견 항목 쿼리 결과 패널이 업데이트되어 선택한 심각도의 발견 항목만 표시됩니다.
  4. 발견 항목 쿼리 결과 패널에서 이름 옆에 있는 체크박스를 선택하여 발견 항목을 선택합니다.
  5. 발견 항목 쿼리 결과 작업 모음의 활성 상태 변경 메뉴에서 비활성을 선택합니다. 현재 발견 항목 쿼리에 활성 발견 항목만 표시되면 발견 항목이 쿼리 결과에서 삭제됩니다.
  6. 빠른 필터 패널에서 상태 섹션까지 아래로 스크롤하고 비활성만 선택되도록 선택 항목을 변경합니다. 발견 항목 쿼리 결과 패널이 업데이트되어 비활성 발견 항목만 표시됩니다.
  7. 발견 항목 쿼리 결과 패널에서 비활성으로 표시한 발견 항목을 선택합니다.
  8. 발견 항목 쿼리 결과 작업 모음의 활성 상태 변경 메뉴에서 활성을 선택합니다.
  9. 이메일 또는 메시징 서비스를 확인하면 아래 이미지와 비슷한 메시지가 표시됩니다.

이메일:

이메일 알림

Slack:

Slack 알림

이 가이드에서 더 많은 정보를 포함하는 WebEx로 전송된 메시지는 다음 이미지와 유사합니다.

WebEx 알림

문제 해결

이메일 또는 채팅 메시지가 전송 또는 수신되지 않는 경우 아래 단계에 따라 잠재적인 문제를 식별하고 해결하세요.

  • SendGrid 이메일:

    • 이메일이 스팸 폴더로 전송되지 않도록 하려면 이메일 허용 목록에 from_email 값을 추가하거나 SendGrid에서 발신자 인증을 구성합니다.
    • SendGrid 요금제의 비율 제한을 초과하지 않아야 합니다.
    • 실패한 이메일은 SendGrid 보고를 통해 감지될 수 있습니다.
      • 도메인 또는 이메일 제공업체의 DMARC 정책에 의해 인증되지 않은 발신자의 이메일이 차단될 수 있습니다. SendGrid에서 발신자 ID를 관리하는 방법을 알아보세요. 오류가 있으면 from_email 값에 다른 이메일 주소를 입력해 보세요.
  • SendGrid 이메일, Slack, WebEx:

    1. Cloud 함수의 Stackdriver 로그에서 함수가 호출되었는지 여부를 확인합니다. 함수가 호출되지 않는 경우 알림이 올바르게 설정되었는지 확인합니다.

    2. Cloud 함수가 호출되는 경우 함수에서 장애가 발생할 수 있습니다. Google Cloud 콘솔 Error Reporting을 사용하여 Cloud Functions의 오류를 확인합니다.

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

개별 리소스 삭제

  1. 알림 구성을 삭제합니다.

    gcloud scc notifications delete organizations/ORG_ID/notificationConfigs/scc-critical-and-high-severity-findings-notify
    

    ORG_ID를 조직 ID로 바꿉니다.

    구성을 유지하고 알림을 일시적으로 중지하려면 Cloud 함수에서 send 또는 post 호출을 주석 처리합니다.

  2. Cloud 함수를 삭제합니다.

    1. Cloud Functions로 이동합니다.
      Cloud Functions로 이동
    2. 삭제하려는 함수 옆의 체크박스를 클릭합니다.
    3. 삭제 를 클릭합니다.
  3. 서비스 계정을 삭제합니다.

    1. 서비스 계정 페이지로 이동합니다.
      서비스 계정 페이지로 이동
    2. 프로젝트를 선택합니다.
    3. 삭제할 서비스 계정을 선택하고 삭제를 클릭합니다.

다음 단계