발견 항목 알림 설정

>

Security Command Center API 알림 기능을 사용 설정합니다. 알림은 Pub/Sub 주제에 정보를 전송하여 몇 분 안에 결과 항목 업데이트 및 새로운 결과 항목을 제공합니다. Security Command Center는 조직 수준에서 작동하므로 Security Command Center API 알림에는 Security Command Center 대시보드에 표시되는 모든 결과 항목 정보가 포함됩니다.

Security Command Center Pub/Sub 알림을 Cloud Functions 작업에 직접 연결할 수 있습니다. 응답, 보강, 구제 조치에 도움이 되는 보안 기능의 예시는 Security Command Center 도구 알림 예시 앱을 참조하세요.

시작하기 전에

  • Security Command Center API 알림을 사용 설정하려면 보안 센터 관리자 IAM 역할이 있어야 합니다.
  • Security Command Center 대시보드에 액세스하려면 보안 센터 관리자 뷰어 IAM 역할이 있어야 합니다.
  • 알림 서비스 계정 또는 gcloud 도구 계정에 적절한 역할을 부여하려면 조직 관리자 IAM 역할이 있어야 합니다.

Security Command Center 역할에 대해 자세히 알아보세요.

Security Command Center API 알림 설정

알림을 설정하려면 먼저 Security Command Center API를 사용 설정하세요.

Security Command Center API 사용 설정

Security Command Center API를 사용 설정하려면 다음 단계를 따르세요.

  1. Cloud Console의 API 라이브러리 페이지로 이동하세요.
    API 라이브러리 페이지로 이동
  2. Notifications API를 사용 설정하려는 프로젝트를 선택합니다.
  3. 검색 상자에 Security Command Center를 입력한 다음 검색 결과에서 Security Command Center를 클릭합니다.
  4. 표시되는 API 페이지에서 사용 설정을 클릭합니다.

이제 프로젝트에 Security Command Center API가 사용 설정되었습니다. 그런 다음 gcloud 도구 또는 클라이언트 라이브러리를 사용하여 Pub/Sub 주제를 구독하고 권한을 설정합니다.

Pub/Sub 주제 설정

이 단계에서는 알림을 보낼 Pub/Sub 주제를 만들고 구독합니다. API를 프로그래매틱 방식으로 호출할 필요가 없는 경우 gcloud 도구 명령어를 사용하는 것이 더 쉬므로 이를 사용하는 것이 좋습니다.

gcloud

gcloud 도구를 사용하여 Security Command Center API 알림 기능을 설정하려면 다음 안내를 따르세요.

  1. Pub/Sub 주제 및 구독 설정
  2. gcloud 도구 계정 권한을 설정합니다.

1단계: Pub/Sub 설정

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

  1. Google Cloud Console로 이동합니다.
    Google Cloud Console로 이동
  2. Security Command Center API를 사용 설정한 프로젝트를 선택합니다.
  3. Cloud Shell 활성화를 클릭합니다.
  4. 새 주제를 만들거나 기존 주제를 재사용합니다. 새 주제를 만들려면 다음 단계를 따르세요.

       gcloud pubsub topics create topic-id
    
  5. 환경 변수를 설정합니다.

    1. 주제 ID를 설정합니다.

        export TOPIC_ID=topic-id
      
  6. 주제에 대한 구독을 만듭니다.

       gcloud pubsub subscriptions create subscription-id --topic topic-id
    

Pub/Sub 설정에 대한 자세한 내용은 주제 및 구독 관리를 참조하세요. 다음으로 계정에 대한 권한을 설정합니다.

2단계: gcloud 도구 계정 권한 설정

NotificationConfig를 만들려면 gcloud 도구 계정에서 다음과 같은 ID 및 액세스 관리(IAM) 역할이 필요합니다.

  • roles/securitycenter.admin 또는 roles/securitycenter.notificationConfigEditor
  • 알림을 수신하는 Pub/Sub 주제에 대한 roles/pubsub.admin 권한

이러한 권한을 부여하려면 다음 안내를 따르세요.

  1. Google Cloud Console로 이동합니다.
    Google Cloud Console로 이동
  2. Security Command Center API를 사용 설정한 프로젝트를 선택합니다.
  3. Cloud Shell 활성화를 클릭합니다.

    1. 조직 이름을 설정합니다.

        export ORGANIZATION_ID=organization-id
      
    2. Pub/Sub 주제가 속한 프로젝트의 프로젝트 ID를 설정합니다.

        export PUBSUB_PROJECT=project-id
      
    3. 사용 중인 gcloud 도구 계정을 설정합니다.

        export GCLOUD_ACCOUNT=your-username@email.com
      
    4. 주제 ID를 설정하거나 1단계에서 설정한 주제 ID를 사용합니다.

        export TOPIC_ID=topic-id
      
    5. gcloud 도구 계정에 pubsub.topics.setIamPolicy 권한이 있는 Pub/Sub 역할을 부여합니다.

        gcloud pubsub topics add-iam-policy-binding \
          projects/$PUBSUB_PROJECT/topics/$TOPIC_ID \
          --member="user:$GCLOUD_ACCOUNT" \
          --role='roles/pubsub.admin'
      
    6. gcloud 도구 계정에 roles/securitycenter.notificationConfigEditor 또는 roles/securitycenter.admin와 같은 모든 securitycenter.notification 권한이 포함된 역할을 부여합니다.

        gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \
          --member="user:$GCLOUD_ACCOUNT" \
          --role='role-name'
      

그런 다음 NotificationConfig를 만듭니다.

클라이언트 라이브러리

클라이언트 라이브러리를 사용하여 Security Command Center API 알림 기능을 설정하려면 다음 단계를 따르세요.

  1. 서비스 계정을 설정합니다.
  2. API 클라이언트 라이브러리를 다운로드합니다.
  3. 개발 환경을 설정합니다.
  4. Pub/Sub 주제 및 구독 설정

1단계: 서비스 계정 설정

Security Command Center API 알림 기능은 적절한 권한이 있는 서비스 계정을 사용하여 알림을 구성합니다. 이 서비스 계정은 구성의 초기 설정에만 사용되며, 나중에 이 계정을 사용하여 추가 알림 구성을 만들 수 있습니다. 이 서비스 계정은 Security Command Center를 설정할 때 생성된 서비스 계정과는 별개입니다.

서비스 계정을 만들려면 다음 안내를 따르세요.

  1. Google Cloud Console로 이동합니다.
    Google Cloud Console로 이동
  2. Security Command Center API를 사용 설정한 프로젝트를 선택합니다.
  3. Cloud Shell 활성화를 클릭합니다.
  4. 환경 변수를 설정합니다.

    1. 조직 이름을 설정합니다.

        export ORGANIZATION_ID=organization-id
      
    2. 알림 API를 사용 설정하려는 프로젝트의 프로젝트 ID를 설정합니다.

        export PROJECT_ID=project-id
      
    3. 새 서비스 계정에 사용할 커스텀 ID를 설정합니다(예: scc-notifications). 서비스 계정 이름은 6~30자(영문 기준) 사이여야 하고 문자로 시작해야 하며 모두 소문자 영숫자 문자와 하이픈이어야 합니다.

        export SERVICE_ACCOUNT=custom-id
      
    4. export KEY_LOCATION=/home/$USER/mykeys/$SERVICE_ACCOUNT.json와 같이 서비스 계정 키를 저장할 경로를 설정합니다.

        export KEY_LOCATION=full-key-location-path
        # This is used by client libraries to find the key
        export GOOGLE_APPLICATION_CREDENTIALS=$KEY_LOCATION
      
  5. 프로젝트 ID와 연결된 서비스 계정을 만듭니다.

       gcloud iam service-accounts create $SERVICE_ACCOUNT  --display-name \
        "Service Account for [USER]"  --project $PROJECT_ID
    
  6. 서비스 계정과 연결할 키를 만듭니다. 키는 NotificationConfig를 만들 때 사용되며, 이전 단계에서 지정한 KEY_LOCATION에 영구적으로 저장됩니다.

       gcloud iam service-accounts keys create $KEY_LOCATION  --iam-account \
        $SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
    
  7. roles/securitycenter.notificationConfigEditor 또는 roles/securitycenter.admin와 같은 모든 securitycenter.notification 권한이 포함된 조직의 역할을 서비스 계정에 부여합니다.

       gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \
         --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com" \
         --role='role-name'
    

이제 알림과 함께 사용하도록 서비스 계정이 설정되며 서비스 계정 키가 지정한 KEY_LOCATION에 저장됩니다. 서비스 계정에 대한 자세한 내용은 서비스 계정 키 만들기 및 관리를 참조하세요.

2단계: 개발 환경 설정

Security Command Center API 알림 기능을 사용하려면 gcloud 도구를 사용하거나 클라이언트 라이브러리를 다운로드하여 원하는 언어로 개발 환경을 설정하면 됩니다.

Python

  1. 선택사항: Python 라이브러리를 설치하기 전에 Virtualenv를 사용하여 격리된 Python 환경을 만드는 것이 좋습니다.

     virtualenv your-env
     source your-env/bin/activate
    
  2. pip를 설치하여 Python 라이브러리 설치를 관리합니다.

  3. 다음 명령어를 실행하여 Python 라이브러리를 설치합니다.

     pip install google-cloud-securitycenter
    

자바

Security Command Center 자바 라이브러리를 프로젝트의 종속 항목으로 포함하려면 Maven 저장소에서 아티팩트를 선택합니다. 알림은 라이브러리 버전 0.119.0 이상에 포함됩니다.

Intellij를 사용하는 경우 GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 이전 단계에서 다운로드한 알림 서비스 계정 키의 절대 경로로 설정합니다.

  1. Intellij에서 실행 > 구성 편집을 클릭합니다.
  2. 애플리케이션, Run_Configuration_For_Sample, 환경 변수에서 다음 변수를 설정합니다.

      GOOGLE_APPLICATION_CREDENTIALS=absolute-path-to-service-account-key
    

Go

알림 API Go 종속 항목을 설치하려면 다음을 실행합니다.

Go 라이브러리를 다운로드하려면 다음을 실행합니다.

  go get -u cloud.google.com/go/securitycenter/apiv1

Node.js

프로젝트 폴더에서 npm를 사용하여 필요한 알림 API 종속 항목을 설치합니다.

  npm install --save @google-cloud/security-center/

3단계: Pub/Sub 설정

Pub/Sub에 알림을 전달하려면 Pub/Sub 주제를 구독하고 알림 서비스 계정에 pubsub.topics.setIamPolicy 권한이 있는 IAM 역할을 부여합니다.

  1. 새 주제를 만들거나 기존 주제를 재사용합니다. 새 주제를 만들려면 다음 단계를 따르세요.

       gcloud pubsub topics create topic-id
    
  2. 환경 변수를 설정합니다.

    1. 주제 ID를 설정합니다.

        export TOPIC_ID=topic-id
      
    2. Notifications API를 사용 설정한 프로젝트의 프로젝트 ID를 설정합니다.

        export CONSUMER_PROJECT=project-id
      
    3. 이전 단계에서 만든 서비스 계정의 이메일을 설정합니다.

        export SERVICE_ACCOUNT_EMAIL=service-account-name@$CONSUMER_PROJECT.iam.gserviceaccount.com
      
  3. 주제에 대한 구독을 만듭니다.

       gcloud pubsub subscriptions create subscription-id --topic topic-id
    
  4. 알림 서비스 계정에 pubsub.topics.setIamPolicy 권한이 있는 역할을 부여합니다.

       gcloud pubsub topics add-iam-policy-binding \
         projects/$CONSUMER_PROJECT/topics/$TOPIC_ID \
         --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
         --role='roles/pubsub.admin'
    

Pub/Sub 설정에 대한 자세한 내용은 주제 및 구독 관리를 참조하세요. 다음 단계에서 NotificationConfig를 만들어 설정을 완료합니다.

NotificationConfig 만들기

NotificationConfig를 만들기 전에 다음 사항에 유의하세요.

  • 각 조직에는 제한된 수의 NotificationConfig 파일이 포함될 수 있습니다. 자세한 내용은 할당량 및 제한을 참조하세요.
  • 알림 서비스 계정 또는 gcloud 도구 계정에 적절한 역할을 부여할 수 있도록 조직 관리자 IAM 역할이 있어야 합니다.

NotificationConfig에는 알림을 유용한 이벤트로 제한하는 filter 필드가 포함되어 있습니다. 이 필드는 Security Command Center API findings.list 메서드에서 사용할 수 있는 모든 필터를 허용합니다.

gcloud 명령줄 도구를 사용하여 계정에 보안 센터 알림 구성 편집자 IAM 역할을 부여하려면 다음 안내를 따르세요.

  1. 환경 변수를 설정합니다.

    1. 조직 이름을 설정합니다.

        export ORGANIZATION_ID=organization-id
      
    2. 발견 항목 알림을 설정할 때 만든 서비스 계정 또는 gcloud 도구 명령어를 실행하는 데 사용하는 계정의 이메일을 설정합니다.

      • gcloud 도구 명령어를 실행하는 데 사용한 계정의 이메일을 설정합니다.

        export EMAIL=your-username@email.com
        
      • 또는 서비스 계정의 이메일을 설정합니다.

        export EMAIL=service-account-name@$CONSUMER_PROJECT.iam.gserviceaccount.com
        
  2. 서비스 계정 또는 gcloud 도구 명령어와 함께 사용한 계정에 필요한 역할을 부여합니다.

    • gcloud 도구 명령어를 실행하는 데 사용된 계정에 역할을 부여합니다.

         gcloud organizations add-iam-policy-binding \
           $ORGANIZATION_ID \
           --member="user:$EMAIL" \
           --role='roles/securitycenter.notificationConfigEditor'
           ```
      
    • 서비스 계정에 역할을 부여합니다.

         gcloud organizations add-iam-policy-binding \
           $ORGANIZATION_ID \
           --member="serviceAccount:$EMAIL" \
           --role='roles/securitycenter.notificationConfigEditor'
           ```
      

서비스 계정 또는 gcloud 도구 계정 권한을 부여한 후 원하는 언어 또는 플랫폼을 사용하여 NotificationConfig를 만듭니다.

gcloud

  # The numeric ID of the organization
  ORGANIZATION_ID=organization-id

  # The topic to which the notifications are published
  PUBSUB_TOPIC="projects/project-id/topics/topic-id"

  # The description for the NotificationConfig
  DESCRIPTION="Notifies for active findings"

  # Filters for active findings
  FILTER="state=\"ACTIVE\""

  gcloud scc notifications create notification-name \
    --organization "$ORGANIZATION_ID" \
    --description "$DESCRIPTION" \
    --pubsub-topic $PUBSUB_TOPIC \
    --filter "$FILTER"

Python

from google.cloud import securitycenter as securitycenter

client = securitycenter.SecurityCenterClient()

# TODO: organization_id = "your-org-id"
# TODO: notification_config_id = "your-config-id"
# TODO: pubsub_topic = "projects/{your-project-id}/topics/{your-topic-ic}"
# Ensure this ServiceAccount has the "pubsub.topics.setIamPolicy" permission on the new topic.

org_name = "organizations/{org_id}".format(org_id=organization_id)

created_notification_config = client.create_notification_config(
    org_name,
    notification_config_id,
    {
        "description": "Notification for active findings",
        "pubsub_topic": pubsub_topic,
        "streaming_config": {"filter": 'state = "ACTIVE"'},
    },
)

print(created_notification_config)

자바

import com.google.cloud.securitycenter.v1.CreateNotificationConfigRequest;
import com.google.cloud.securitycenter.v1.NotificationConfig;
import com.google.cloud.securitycenter.v1.NotificationConfig.StreamingConfig;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;
  public static NotificationConfig createNotificationConfig(
      String organizationId, String notificationConfigId, String projectId, String topicName)
      throws IOException {
    // String organizationId = "{your-org-id}";
    // String notificationConfigId = {"your-unique-id"};
    // String projectId = "{your-project}"";
    // String topicName = "{your-topic}";

    String orgName = String.format("organizations/%s", organizationId);

    // Ensure this ServiceAccount has the "pubsub.topics.setIamPolicy" permission on the topic.
    String pubsubTopic = String.format("projects/%s/topics/%s", projectId, topicName);

    try (SecurityCenterClient client = SecurityCenterClient.create()) {
      CreateNotificationConfigRequest request =
          CreateNotificationConfigRequest.newBuilder()
              .setParent(orgName)
              .setConfigId(notificationConfigId)
              .setNotificationConfig(
                  NotificationConfig.newBuilder()
                      .setDescription("Java notification config")
                      .setPubsubTopic(pubsubTopic)
                      .setStreamingConfig(
                          StreamingConfig.newBuilder().setFilter("state = \"ACTIVE\"").build())
                      .build())
              .build();

      NotificationConfig response = client.createNotificationConfig(request);
      System.out.println(String.format("Notification config was created: %s", response));
      return response;
    }
  }

Go

import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	securitycenterpb "google.golang.org/genproto/googleapis/cloud/securitycenter/v1"
)

func createNotificationConfig(w io.Writer, orgID string, pubsubTopic string, notificationConfigID string) error {
	// orgID := "your-org-id"
	// pubsubTopic := "projects/{your-project}/topics/{your-topic}"
	// notificationConfigID := "your-config-id"

	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)

	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %v", err)
	}
	defer client.Close()

	req := &securitycenterpb.CreateNotificationConfigRequest{
		Parent:   fmt.Sprintf("organizations/%s", orgID),
		ConfigId: notificationConfigID,
		NotificationConfig: &securitycenterpb.NotificationConfig{
			Description: "Go sample config",
			PubsubTopic: pubsubTopic,
			NotifyConfig: &securitycenterpb.NotificationConfig_StreamingConfig_{
				StreamingConfig: &securitycenterpb.NotificationConfig_StreamingConfig{
					Filter: `state = "ACTIVE"`,
				},
			},
		},
	}

	notificationConfig, err := client.CreateNotificationConfig(ctx, req)
	if err != nil {
		return fmt.Errorf("Failed to create notification config: %v", err)
	}
	fmt.Fprintln(w, "New NotificationConfig created: ", notificationConfig)

	return nil
}

Node.js

// npm install @google-cloud/security-center/
const {SecurityCenterClient} = require('@google-cloud/security-center');

const client = new SecurityCenterClient();

// organizationId = "your-org-id";
// configId = "your-config-name";
// pubsubTopic = "projects/{your-project}/topics/{your-topic}";
// Ensure this Service Account has the "pubsub.topics.setIamPolicy" permission on this topic.

const orgName = client.organizationPath(organizationId);

async function createNotificationConfig() {
  const [response] = await client.createNotificationConfig({
    parent: orgName,
    configId: configId,
    notificationConfig: {
      description: 'Sample config for node.js',
      pubsubTopic: pubsubTopic,
      streamingConfig: {filter: 'state = "ACTIVE"'},
    },
  });
  console.log('Notification config creation succeeded: ', response);
}

createNotificationConfig();

PHP

use Google\Cloud\SecurityCenter\V1\SecurityCenterClient;
use Google\Cloud\SecurityCenter\V1\NotificationConfig;
use Google\Cloud\SecurityCenter\V1\NotificationConfig\StreamingConfig;

/** Uncomment and populate these variables in your code */
// $organizationId = "{your-org-id}";
// $notificationConfigId = {"your-unique-id"};
// $projectId = "{your-project}"";
// $topicName = "{your-topic}";

$securityCenterClient = new SecurityCenterClient();
$organizationName = $securityCenterClient::organizationName($organizationId);
$pubsubTopic = $securityCenterClient::topicName($projectId, $topicName);

$streamingConfig = (new StreamingConfig())->setFilter("state = \"ACTIVE\"");
$notificationConfig = (new NotificationConfig())
    ->setDescription('A sample notification config')
    ->setPubsubTopic($pubsubTopic)
    ->setStreamingConfig($streamingConfig);

$response = $securityCenterClient->createNotificationConfig(
    $organizationName,
    $notificationConfigId,
    $notificationConfig
);
printf('Notification config was created: %s' . PHP_EOL, $response->getName());

Ruby

require "google/cloud/security_center"

# Your organization id. e.g. for "organizations/123", this would be "123".
# org_id = "YOUR_ORGANZATION_ID"

# Your notification config id. e.g. for
# "organizations/123/notificationConfigs/my-config" this would be "my-config".
# config_id = "YOUR_CONFIG_ID"

# The PubSub topic where notifications will be published.
# pubsub_topic = "YOUR_TOPIC"

client = Google::Cloud::SecurityCenter.security_center

org_path = client.organization_path organization: org_id

notification_config = {
  description:      "Sample config for Ruby",
  pubsub_topic:     pubsub_topic,
  streaming_config: { filter: 'state = "ACTIVE"' }
}

response = client.create_notification_config(
  parent:              org_path,
  config_id:           config_id,
  notification_config: notification_config
)
puts "Created notification config #{config_id}: #{response}."

C#


using Google.Api.Gax.ResourceNames;
using Google.Cloud.SecurityCenter.V1;
using System;

///<summary> Create NotificationConfig Snippet. </summary>
public class CreateNotificationConfigSnippets
{
    public static NotificationConfig CreateNotificationConfig(
        string organizationId, string notificationConfigId, string projectId, string topicName)
    {
        OrganizationName orgName = new OrganizationName(organizationId);
        TopicName pubsubTopic = new TopicName(projectId, topicName);

        SecurityCenterClient client = SecurityCenterClient.Create();
        CreateNotificationConfigRequest request = new CreateNotificationConfigRequest
        {
            ParentAsOrganizationName = orgName,
            ConfigId = notificationConfigId,
            NotificationConfig = new NotificationConfig
            {
                Description = ".Net notification config",
                PubsubTopicAsTopicName = pubsubTopic,
                StreamingConfig = new NotificationConfig.Types.StreamingConfig { Filter = "state = \"ACTIVE\"" }
            }
        };

        NotificationConfig response = client.CreateNotificationConfig(request);
        Console.WriteLine($"Notification config was created: {response}");
        return response;
    }
}

이제 알림이 지정된 Pub/Sub 주제에 게시됩니다. 알림을 게시하기 위해 Security Command Center는 securitycenter.notificationServiceAgent 역할의 service-org-organization-id@gcp-sa-scc-notification.iam.gserviceaccount.com 형식으로 조직 수준 서비스 계정을 사용합니다. 알림이 작동하려면 이 조직 수준 서비스 계정 역할이 필요합니다.

이전 단계에서는 service-account-id@project-id.iam.gserviceaccount.com 형식으로 프로젝트 수준 알림 서비스 계정을 만들거나 gcloud 도구로 사용자 계정을 사용했습니다. 선택적으로 이 계정에 부여된 권한을 취소할 수 있습니다. 자세한 내용은 IAM 문서의 액세스 권한 부여, 변경, 취소를 참조하세요.

다음 단계