실시간 채팅 알림 사용 설정

개요

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

토폴로지

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

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

목표

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

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

비용

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

  • Pub/Sub
  • Cloud Run 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Google Cloud CLI를 설치합니다.

  6. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  7. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Build API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. Google Cloud CLI를 설치합니다.

  12. 외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  13. 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 Run 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와 호환되는 모든 필터를 사용할 수 있습니다.

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

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

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

메시지 앱 설정

이 섹션에서는 Pub/Sub 및 Cloud Run Functions 또는 Cloud Run Functions (1세대) 를 사용하여 Slack에 대한 거의 실시간 알림을 사용 설정하는 방법을 설명합니다.

Slack 채널에 알림을 보내려면 다음 단계를 따르세요. * 공개 Slack 채널에 메시지를 게시할 수 있는 충분한 권한이 있는 새 Slack 앱을 만듭니다. * Pub/Sub에서 알림이 수신되면 채팅 메시지를 Slack에 게시하는 Cloud Run Functions를 만들고 배포합니다.

### 새 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 및 권한)를 선택합니다.

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

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

    • chat:write
    • chat:write.public
  9. OAuth &Permissions(OAuth 및 권한) 페이지 상단으로 이동하고 Install App to Workspace(작업공간에 앱 설치)를 클릭합니다.

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

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

    다음으로, 알림이 Slack 그룹에 전송되도록 Cloud Run 함수를 배포합니다.

    Slack Cloud Run 함수 만들기

    이 섹션에서는 Slack 계정으로 알림을 보내는 함수를 배포합니다. 이 섹션의 코드 샘플은 Python으로 작성되었지만 Cloud Run Functions에서 지원하는 모든 언어를 사용할 수 있습니다.

  12. 콘솔에서 Cloud Run Functions Services(서비스) 페이지로 이동합니다. Google Cloud

    서비스로 이동

  13. Pub/Sub 주제가 포함된 프로젝트의 ID를 선택합니다.

  14. Write a function(함수 작성)을 클릭하고 필드를 작성합니다.

    1. Service name(서비스 이름)에 slack-chat-high-and-critical-findings를 입력합니다.
    2. Region(리전)에서 서비스를 저장할 리전을 선택합니다.
    3. Runtime(런타임)에서 함수를 실행하는 데 사용할 Python 버전을 선택합니다.
  15. Add trigger(트리거 추가)를 클릭하고 Pub/Sub trigger(Pub/Sub 트리거)를 선택합니다.

  16. Pub/Sub 주제 설정에서 만든 Pub/Sub 주제의 세부정보를 입력하고 Save trigger(트리거 저장)를 클릭합니다.

  17. Create(만들기)를 클릭합니다. 서비스 세부정보가 표시됩니다.

  18. Source(소스) 탭의 Source(소스) 창에서 requirements.txt 를 클릭합니다.

  19. 코드 편집기에서 requestsfunctions-framework==3.*를 추가합니다.

     requests
     functions-framework==3.*
    
  20. Source(소스) 창에서 main.py 를 클릭합니다.

  21. 코드 편집기에서 코드를 다음으로 바꿉니다.

      import base64
      import json
      import requests
      import functions_framework
    
      TOKEN = "BOT_ACCESS_TOKEN"
    
      @functions_framework.cloud_event
      def send_slack_chat_notification(cloud_event):
    
          pubsub_message = base64.b64decode(cloud_event.data["message"]["data"]).decode('utf-8').strip()
          message_json = json.loads(pubsub_message)
    
          finding = message_json['finding']
    
          requests.post("https://slack.com/api/chat.postMessage", data={
              "token": TOKEN,
              "channel": "#SLACK_CHANNEL_NAME",
              "text": f"A high severity finding {finding['category']} was detected."
          })
    

    다음을 바꿉니다.

    • BOT_ACCESS_TOKEN: Slack 앱으로 만든 Bot User OAuth Access Token(봇 사용자 OAuth 액세스 토큰)
    • SLACK_CHANNEL_NAME: 알림을 보낼 Slack 채널
  22. Function entry point(함수 진입점) 필드에 코드 샘플의 함수 이름 을 입력합니다. send_slack_chat_notification

  23. Save and redeploy(저장 및 재배포)를 클릭합니다. 함수 이름 옆에 녹색 체크표시가 나타나면 함수가 성공적으로 배포된 것입니다. 이 프로세스 는 몇 분 정도 걸릴 수 있습니다.

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

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

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

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

알림 테스트

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

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

Slack 알림

문제 해결

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

1. Check [Stackdriver
logs](https://console.cloud.google.com/projectselector2/logs/viewer) for
your Cloud Run function to determine whether the function is being
invoked. If it is not being invoked, ensure that notifications are set up
correctly.

1. If the Cloud Run function is being invoked, then it might be
crashing. Check for errors in Cloud Run functions using
[Google Cloud console Error Reporting]
(https://console.developers.google.com/errors).

삭제

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

프로젝트 삭제

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

    리소스 관리로 이동

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

개별 리소스 삭제

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

    gcloud scc notifications delete scc-critical-high-severity \
        --organization=ORG_ID \
        --location=global
    

    ORG_ID를 조직 ID로 바꿉니다.

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

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

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

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

다음 단계