Cloud IDS 구성

다음 안내에 따라 애플리케이션의 Cloud IDS를 구성합니다. Cloud IDS에 대한 개념 정보는 Cloud IDS 개요를 참조하세요.

시작하기 전에

Cloud IDS를 구성하기 전에 다음 요구사항을 완료해야 합니다.

Cloud IDS의 IAM 권한 설정

Cloud IDS에는 여러 Identity and Access Management(IAM) 역할이 있습니다. 예시 명령어를 사용하여 주 구성원에게 필요한 IAM 권한을 부여할 수 있습니다.

  • Cloud IDS 관리자 역할(roles/ids.admin). 이 역할이 있는 프로젝트 주 구성원은 IDS 엔드포인트를 만들 수 있습니다. 프로젝트 소유자인 경우에는 이 권한이 이미 있으므로 IDS 엔드포인트를 만들기 위해 명시적인 ids.admin 역할이 필요하지 않습니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --role=roles/ids.admin \
       --member=user:USER_NAME ;
    

    이 역할은 다음 작업을 사용 설정합니다.

    • 엔드포인트 만들기
    • 엔드포인트 삭제
    • 엔드포인트 가져오기
    • 엔드포인트 나열
  • Cloud IDS 뷰어 역할(roles/ids.viewer). 이 역할을 가진 프로젝트 뷰어와 주 구성원은 IDS 엔드포인트에 대해 읽기 전용 액세스 권한을 가집니다. 프로젝트 소유자, 편집자, 뷰어인 경우 이 권한이 이미 있습니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --role=roles/ids.viewer \
       --member=user:USER_NAME ;
    
  • Compute 패킷 미러링 사용자 역할(roles/compute.packetMirroringUser). 패킷 미러링 정책을 IDS 엔드포인트에 연결하는 데 필요한 역할입니다. compute.securityAdmin 또는 container.serviceAgent 역할이 있으면 이 권한이 이미 있습니다. 이 역할에 대한 자세한 내용은 IAM 기본 및 사전 정의된 역할 참조를 확인하세요.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --role=roles/compute.packetMirroringUser \
       --member=user:USER_NAME ;
    
  • 로그 뷰어 역할(roles/logging.viewer). Cloud IDS의 중요한 핵심 기능인 최근 위협을 확인하는 데 필요한 추가 역할입니다. 이 역할에 대한 자세한 내용은 액세스 제어 가이드를 참조하세요.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --role=roles/logging.viewer \
       --member=user:USER_NAME ;
    

또한 다음과 같은 기타 권한이 필요합니다.

  • compute.regions.list
  • compute.zones.list

비공개 서비스 액세스 설정

IDS 엔드포인트를 만들려면 Service Networking API를 사용 설정하고 Virtual Private Cloud(VPC) 네트워크에 대해 네트워크 피어링을 설정해야 합니다. 이 작업은 고객 프로젝트당 한 번만 수행하면 되고 Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 수행할 수 있습니다. IP 주소 범위를 할당할 경우, RFC 1918과 호환되는 비공개 IP 주소 범위(10.0.0.0/8, 172.16.0.0/12 또는 192.168.0.0/16)여야 합니다. 그렇지 않으면 엔드포인트 만들기가 실패합니다.

다음 단계에 따라 비공개 서비스 액세스를 설정합니다.

  1. 다음 명령어를 사용하여 Service Networking API를 사용 설정합니다. PROJECT_ID를 프로젝트 ID로 바꿉니다.

    gcloud services enable servicenetworking.googleapis.com \
     --project=PROJECT_ID
    
  2. 네트워크에서 IP 주소 범위를 아직 할당하지 않았으면 VPC 네트워크에서 Google 서비스에 대해 IP 범위를 할당해야 합니다. 다음 명령어에서 addresses 필드를 생략하면 Google Cloud가 VPC 네트워크에서 사용되지 않은 IP 주소 범위를 선택합니다.

    gcloud compute addresses create RESERVED_RANGE_NAME \
      --global \
      --purpose=VPC_PEERING \
      --addresses=192.168.0.0 \
      --prefix-length=16 \
      --description="DESCRIPTION" \
      --network=VPC_NETWORK
    

    다음을 바꿉니다.

    • RESERVED_RANGE_NAME: 할당된 범위의 이름입니다(예: my-allocated-range).

    • DESCRIPTION: 범위에 대한 설명입니다(예: allocated for my-service).

    • VPC_NETWORK: VPC 네트워크의 이름입니다(예: my-vpc-network).

  3. 서비스 프로듀서에 대한 비공개 연결을 만듭니다. 비공개 연결은 VPC 네트워크와 서비스 제작자의 네트워크 사이에 VPC 네트워크 피어링 연결을 설정합니다.

    기존 비공개 연결이 이미 있으면 gcloud services vpc-peerings update 명령어를 사용하여 업데이트합니다.

    gcloud services vpc-peerings update \
      --service=servicenetworking.googleapis.com \
      --ranges=RESERVED_RANGE_NAME \
      --network=VPC_NETWORK \
      --project=PROJECT_ID
    

    아직 비공개 연결이 없으면 gcloud services vpc-peerings connect 명령어를 사용합니다. 이 명령어는 작업 이름을 반환하는 장기 실행 작업을 시작합니다.

    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --ranges=RESERVED_RANGE_NAME \
      --network=VPC_NETWORK \
      --project=PROJECT_ID
    

    다음을 바꿉니다.

    • RESERVED_RANGE_NAME: 하나 이상의 할당된 범위 이름입니다.

    • VPC_NETWORK: VPC 네트워크의 이름입니다.

    • PROJECT_ID: VPC 네트워크가 포함된 프로젝트의 ID입니다.

    작업이 성공했는지 확인하려면 gcloud services vpc-peerings operations describe 명령어를 사용합니다.

    gcloud services vpc-peerings operations describe \
        --name=OPERATION_NAME
    

    OPERATION_NAME을 이전 단계에서 반환된 작업 이름으로 바꿉니다.

모니터링할 각 VPC 네트워크에 대해 2~3단계를 반복합니다.

선택사항: VPC 서비스 제어 사용 설정

비공개 서비스 액세스가 사용 설정되면 필요에 따라 Cloud IDS에서 VPC 서비스 제어를 사용 설정할 수 있습니다. 사용 설정된 경우 services vpc-peerings enable-vpc-service-controls 명령어를 실행하여 모든 피어링 연결에 대해 VPC 서비스 제어를 사용 설정합니다.

gcloud services vpc-peerings enable-vpc-service-controls \
    --service=servicenetworking.googleapis.com \
    --network=VPC_NETWORK \
    --project=PROJECT_ID

다음을 바꿉니다.

  • VPC_NETWORK: VPC 네트워크의 이름입니다.

  • PROJECT_ID: VPC 네트워크가 포함된 프로젝트의 ID입니다.

Cloud IDS 엔드포인트 만들기

워크로드를 배포한 모든 리전에 대해 IDS 엔드포인트를 만드는 것이 좋습니다. 리전당 여러 IDS 엔드포인트를 만들 수도 있습니다. 다음 단계에 따라 IDS 엔드포인트를 만들고 여기에 IDS 서비스 프로필을 할당합니다.

콘솔

  1. Google Cloud 콘솔에서 IDS 엔드포인트로 이동합니다.

    IDS 엔드포인트로 이동

엔드포인트를 구성합니다.

  1. 엔드포인트 만들기를 클릭합니다.
  2. 엔드포인트 이름 필드에 이름을 입력합니다.
  3. 선택사항: 설명 필드에 설명을 입력합니다.
  4. 네트워크 드롭다운 목록을 클릭하고 Cloud IDS로 검사할 네트워크를 선택합니다.
  5. 리전영역 드롭다운 목록에서 네트워크 또는 서브넷의 리전과 영역을 선택합니다.
  6. 계속을 클릭합니다.

Cloud IDS 서비스 프로필을 선택합니다.

  1. IDS 서비스 프로필 선택을 클릭합니다.
  2. 최소 위협 심각도 수준에서 올바른 알림 수준을 선택합니다.
  3. 만들기를 클릭합니다. 만들기 프로세스는 10~15분 정도 걸릴 수 있습니다.

IDS 엔드포인트가 생성되면 패킷 미러링 정책을 IDS 엔드포인트에 연결합니다.

  1. 엔드포인트 탭을 선택합니다.
  2. IDS 엔드포인트 옆에 있는 연결을 클릭합니다.
  3. 정책 이름 필드에 패킷 미러링 정책의 이름을 입력합니다.
  4. 다음을 클릭합니다.
  5. 미러링할 서브넷 또는 인스턴스를 선택합니다. 서브넷과 인스턴스를 여러 개 선택할 수 있습니다.
  6. 다음을 클릭합니다.
  7. 모든 트래픽을 미러링할지 또는 트래픽을 필터링할지 결정합니다.
    1. 모든 트래픽을 미러링하려면 모든 트래픽 미러링이 선택되었는지 확인합니다.
    2. 프로토콜, IP 주소 범위, 인그레스 또는 이그레스 트래픽을 기준으로 트래픽을 필터링하려면 필터링된 트래픽 미러링을 선택합니다.
      1. 모든 프로토콜 허용 또는 특정 프로토콜 허용을 선택합니다.
      2. 모든 IP 범위 허용 또는 특정 IP 범위 허용을 선택합니다.
  8. 제출을 클릭합니다. 엔드포인트가 생성됩니다.

이제 위협 로그가 생성되었는지 확인할 수 있습니다. 다음 단계는 선택사항입니다.

  1. IDS 위협 탭을 클릭합니다.
  2. 위협 이름을 클릭하여 해당 위협에 대한 위협 세부정보 페이지를 확인합니다.
  3. 위협 탭으로 돌아갑니다.
  4. IDS 엔드포인트 오른쪽에 있는 메뉴를 클릭하고 위협 로그 보기를 선택합니다.

gcloud

선택적 플래그

이 섹션의 명령어는 다음과 같은 선택적 플래그 중 일부 또는 전체를 포함할 수 있습니다.

--no-async
즉시 반환하는 대신 진행 중인 작업이 완료될 때까지 기다립니다.
--filter=EXPRESSION
나열할 각 리소스 항목에 불리언 필터 표현식을 적용합니다. 표현식이 True로 평가되면 해당 항목이 나열됩니다. 필터 표현식에 대한 세부정보와 예시를 보려면 $ gcloud 주제 필터를 실행합니다. 이 플래그는 --flatten, --sort-by, --filter, --limit의 순서로 적용되는 다른 플래그와 상호작용합니다.
--limit=LIMIT
나열할 최대 리소스 수입니다. 기본값은 무제한입니다. 이 플래그는 --flatten, --sort-by, --filter, --limit의 순서로 적용되는 다른 플래그와 상호작용합니다.
--page-size=PAGE_SIZE
Cloud IDS는 리소스 목록 출력을 페이지로 그룹화합니다. 이 플래그는 페이지당 최대 리소스 수를 지정합니다. 기본값은 페이징이 지원되는 경우 서비스에 따라 결정되고, 그렇지 않으면 무제한입니다(페이징 없음). 페이징은 서비스에 따라 --filter--limit 전후에 적용될 수 있습니다.
--sort-by=[FIELD,…]
정렬 기준으로 사용할 쉼표로 구분된 리소스 필드 키 이름 목록입니다. 기본 순서는 오름차순입니다. 해당 필드에 내림차순을 적용하려면 필드에 ``~´´를 프리픽스로 붙입니다. 이 플래그는 --flatten, --sort-by, --filter, --limit의 순서로 적용되는 다른 플래그와 상호작용합니다.
--uri
기본 출력 대신 리소스 URI 목록을 출력합니다.
--threat-exceptions
이 엔드포인트에 대한 알림에서 제외할 쉼표로 구분된 위협 ID 목록입니다. 엔드포인트당 99개 예외로 제한됩니다.

안내

새 IDS 엔드포인트를 만들려면 다음 단계를 수행합니다.

  1. gcloud ids endpoints create 명령어를 사용합니다. ENDPOINT_NAME, VPC_NETWORK, ZONE, SEVERITY를 애플리케이션과 일치하는 정보로 바꿉니다.

    gcloud ids endpoints create ENDPOINT_NAME \
      --network=VPC_NETWORK \
      --zone=ZONE \
      --severity=SEVERITY \
     [--no-async] \
     [GCLOUD_WIDE_FLAG...]
    
  2. 심각도 플래그는 필수이며 다음 값 중 하나를 사용합니다.

    • 정보 제공
    • 낮음
    • 보통
    • 높음
    • 심각
  3. 엔드포인트가 생성되면 여기에 패킷 미러링 정책을 연결합니다. 먼저 다음 명령어를 사용하여 endpoint_forwarding_rule 필드에서 URL을 가져옵니다.

    gcloud ids endpoints describe ENDPOINT_NAME
    
  4. 다음 명령어를 사용하여 패킷 미러링 정책을 만듭니다.

    gcloud compute packet-mirrorings create POLICY_NAME \
    --region=REGION --collector-ilb=ENDPOINT_FORWARDING_RULE \
    --network=VPC_NETWORK --mirrored-subnets=SUBNET
    
  5. 패킷 미러링에는 프로토콜, IP 주소 범위, 인그레스 또는 이그레스 트래픽을 기준으로 트래픽을 필터링하는 데 사용할 수 있는 플래그를 포함하여 여러 가지 선택적 플래그가 있습니다. 이러한 선택적 플래그에 대한 자세한 내용은 패킷 미러링 참조를 확인하세요.

IDS 엔드포인트를 삭제하려면 gcloud ids endpoints delete 명령어를 사용합니다. ENDPOINT_NAME, PROJECT_ID, ZONE을 애플리케이션과 일치하는 정보로 바꿉니다.

gcloud ids endpoints delete ENDPOINT_NAME \
   [--project=PROJECT_ID] \
   [--zone=ZONE] \
   [--no-async] \
   [GCLOUD_WIDE_FLAG...]

IDS 엔드포인트를 설명하려면 gcloud ids endpoints describe 명령어를 사용합니다. ENDPOINT_NAME, PROJECT_ID, ZONE을 애플리케이션과 일치하는 정보로 바꿉니다.

gcloud ids endpoints describe ENDPOINT_NAME \
   [--project=PROJECT_ID] \
   [--zone=ZONE] \
   [GCLOUD_WIDE_FLAG...]

IDS 엔드포인트를 나열하려면 gcloud ids endpoints list 명령어를 사용합니다.

gcloud ids endpoints list /
    [--filter=EXPRESSION] \
    [--limit=LIMIT] \
    [--page-size=PAGE_SIZE] \
    [--sort-by=[FIELD,...]] \
    [--uri] \
    [GCLOUD_WIDE_FLAG...]

API

Cloud IDS 엔드포인트 리소스에는 다음과 같은 필드가 포함됩니다.

필드 유형 필드 설명
createTime 문자열 [출력 전용] RFC 3339 텍스트 형식의 생성 타임스탬프입니다.
updateTime 문자열 [출력 전용] RFC 3339 텍스트 형식의 마지막 업데이트 타임스탬프입니다.
name 문자열 [출력 전용] projects/{project_id}/locations/{locationId}/endpoints/{endpointId} 형식의 엔드포인트 이름입니다.
network 문자열 IDS 엔드포인트에 연결된 VPC 네트워크의 이름입니다. VPC 네트워크 이름 자체(예: "src-net") 또는 네트워크의 전체 URL(예: "projects/{project_id}/global/networks/src-net")을 포함할 수 있습니다. 이 필드는 엔드포인트를 만들 때 필요합니다.
severity 문자열

엔드포인트에서 보고되는 최소 알림 심각도 수준입니다. 가능한 값은 다음과 같습니다.

  • 정보 제공
  • 낮음
  • 보통
  • 높음
  • 심각

이 필드는 엔드포인트를 만들 때 필요합니다.

description 문자열 엔드포인트에 대한 선택적 설명입니다.
endpoint_forwarding_rule 문자열 [출력 전용] 패킷 미러링에서 트래픽을 전송할 엔드포인트의 네트워크 주소 URL입니다.
endpoint 문자열 [출력 전용] 엔드포인트 네트워크 진입점의 내부 IP 주소입니다.

Cloud IDS 엔드포인트를 만들려면 다음과 같이 HTTP POST 요청을 사용하여 변수를 적절하게 바꿉니다. ENDPOINT_NAME은 1~63자(영문 기준)여야 합니다. 소문자, 숫자, 하이픈만 포함해야 합니다. 소문자로 시작해야 하고 하이픈으로 끝나서는 안 됩니다.

POST https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints?endpointId=ENDPOINT_NAME
{
    "network": "NETWORK_NAME",
    "severity": "SEVERITY_LEVEL",
}

Cloud IDS 엔드포인트를 삭제하려면 다음과 같이 HTTP DELETE 요청을 사용하여 변수를 적절하게 바꿉니다.

DELETE https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints?endpointId=ENDPOINT_NAME

Cloud IDS 엔드포인트를 가져오려면 다음과 같이 HTTP GET 요청을 사용하여 변수를 적절하게 바꿉니다.

GET https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints?endpointId=ENDPOINT_NAME

영역의 모든 Cloud IDS 엔드포인트를 나열하려면 다음과 같이 HTTP GET 요청을 사용하여 변수를 적절하게 바꿉니다.

GET https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints

또는 모든 영역의 모든 Cloud IDS 엔드포인트를 나열하려면 다음과 같이 ZONE을 하이픈으로 바꿉니다.

GET https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/-/endpoints

선택사항: 위협 예외 구성

Cloud IDS 엔드포인트를 만들거나 업데이트할 때 --threat-exceptions 플래그를 사용하여 노이즈가 있거나 불필요한 위협 ID를 사용 중지할 수 있습니다. 다음 예시에서는 기존 Cloud IDS 엔드포인트 ENDPOINT_NAME을 업데이트하여 위협 ID THREAT_ID1THREAT_ID2를 제외합니다.

   gcloud ids endpoints update ENDPOINT_NAME 
--threat-exceptions=THREAT_ID1,THREAT_ID2

다음 단계