조건이 있는 애셋 변경 모니터링

이 주제에서는 맞춤설정된 조건으로 애셋 변경사항을 모니터링하는 방법을 보여줍니다. 실시간 알림에 대한 자세한 내용은 일반 주제를 참조하세요.

개요

해당 애셋의 특정 유형의 변경사항만 보려면 피드에 조건을 추가할 수 있습니다.

condition 객체는 선택사항입니다. 피드에 condition 객체가 없는 경우 구성된 대상은 애셋에 대한 모든 변경사항을 수신합니다.

condition 객체의 구조는 다음과 같습니다.

"condition": {
    "title": "...",
    "description": "...",
    "expression": "..."
}

Titledescription은 선택사항입니다. 이 필드를 사용하여 조건을 식별하고 설명할 수 있습니다.

expression 필드는 Common Expression Language(CEL)로 알림을 평가하는 데 사용되는 표현식을 정의합니다. 조건 표현식에는 여러 문이 포함될 수 있으며 문은 CEL 언어 사양에 따라 논리 연산자를 사용하여 결합합니다.

CEL 사용

Common Expression Language(CEL)는 피드 조건을 지정하는 데 사용되는 표현식 언어입니다. 속성 기반 논리 표현식을 표현하도록 맞춤설정되었습니다. 자세한 내용은 CEL 사양언어 정의를 참조하세요.

피드 조건에서 CEL은 속성 데이터를 기반으로 불리언 결정을 내리는 데 사용됩니다. 조건 표현식은 논리 연산자(&&, ||)를 사용하여 결합된 하나 이상의 문으로 구성됩니다. 각 문은 알림 전송 여부를 결정하는 TemporalAsset에 적용되는 속성 기반 제어 규칙을 나타냅니다.

다음 CEL 기능은 피드 상태에 가장 중요합니다.

  • 변수: 조건은 temporal_asset.deleted(불리언 유형) 또는 temporal_asset.asset.name(String 유형)과 같은 변수를 사용하여 주어진 속성을 표현합니다. 이러한 변수는 런타임에 컨텍스트 기반 값으로 채워집니다.

  • 연산자: String과 같은 모든 데이터 유형은 논리 표현식을 만드는 데 사용할 수 있는 연산자 집합을 지원합니다. 일반적으로 연산자는 변수에 포함된 값을 temporal_asset.asset.name == "//cloudresourcemanager.googleapis.com/projects/12345"과 같은 리터럴 값과 비교하는 데 사용됩니다. 이 예시에서 temporal_asset.asset.name 입력 값이 //cloudresourcemanager.googleapis.com/projects/12345이면 표현식은 true로 평가됩니다.

  • 함수: 함수는 더 복잡한 작업을 지원하는 데이터 유형의 복합 연산자입니다. 조건 표현식에는 지정된 데이터 유형과 함께 사용할 수 있는 사전 정의된 함수가 있습니다. 예를 들어 temporal_asset.asset.name.contains("keyword")String 포함 함수를 사용하고 temporal_asset.asset.name 값에 'keyword'가 포함된 경우 true로 평가됩니다.

  • 논리 연산자: 조건은 간단한 표현식 문에서 복잡한 논리 표현식을 작성하는 데 사용할 수 있는 논리 연산자를 지원합니다(&&||). 이러한 논리 연산자를 사용하면 조건 표현식에서 여러 입력 변수를 사용할 수 있습니다. 예를 들어 temporal_asset.deleted && temporal_asset.window.start_time.getFullYear() > 2020은 두 개의 간단한 문을 결합하며, true 전체 평가 결과를 도출하려면 두 문이 모두 조건을 충족해야 합니다.

CEL 기능에 대한 자세한 내용은 언어 정의를 참조하세요.

조건 변수 사용

조건 변수를 사용하면 다른 속성에 대한 조건을 만들 수 있습니다. 지원되는 조건 변수는 다음과 같습니다.

  • temporary_asset: TemporalAsset 형식의 현재 애셋 변경. 조건이 true로 평가되면 TemporalAsset이 구성된 대상으로 전송됩니다.

조건 표현식 예시

다음 조건 표현식은 생성 이벤트에 대한 알림을 보냅니다.

temporal_asset.deleted == false &&
temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST

다음 조건 표현식은 폴더 1234523456에 있는 리소스에 대한 알림을 보냅니다.

"folders/12345" in temporal_asset.asset.ancestors ||
"folders/23456" in temporal_asset.asset.ancestors

다음 조건 표현식은 피드에서 이미 asset_type이 피드에서 compute.googleapis.com/Firewall로 설정되어 있다고 가정하여 방화벽에 새로 허용되는 규칙이 추가될 때 알림을 보냅니다.

size(temporal_asset.asset.resource.data.allowed) >
size(temporal_asset.prior_asset.resource.data.allowed)

다음 조건 표현식은 피드에서 이미 asset_type이 피드에서 compute.googleapis.com/Instance로 설정되었다고 가정하여 n1-standard-1 머신 유형의 VM 인스턴스에 대한 알림을 보냅니다.

temporal_asset.asset.resource.data.machineType.endsWith('/machineTypes/n1-standard-1')

다음 조건 표현식은 피드에서 asset_typestorage.googleapis.com/Bucket으로 설정되고 content_typeIAM_POLICY로 설정되었다고 가정하고 allUsers의 IAM 정책이 있는 스토리지 버킷에 대한 알림을 보냅니다.

temporal_asset.asset.iam_policy.bindings.exists(b, b.members.exists(m, m == "allUsers"))

다음 조건 표현식은 라벨에 test 키가 있는 스토리지 버킷이 삭제될 때 알림을 보냅니다.

temporal_asset.deleted == true && temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.PRESENT && "test" in temporal_asset.prior_asset.resource.data.labels

알려진 제한사항

  • 조건 표현식의 대부분의 변수 이름은 snake_case로 표시됩니다. 유일한 예외는 Resource 객체에 있는 data의 하위 필드 변수 이름이며 camelCase로 표현됩니다.

  • 조건 표현식의 길이는 영문 3,000자로 제한됩니다.

  • 조건 표현식에 대한 일부 유효성 검사는 피드 생성/업데이트 시간 중에 수행됩니다. 그러나 이러한 유효성 검사는 특히 동적 유형을 갖는 temporal_asset.asset.resource.data 필드에 설정된 조건에 대해서는 포괄적이지 않습니다. 피드에 지정된 적절한 asset_type를 사용하여 간단한 피드 조건을 사용하는 것이 좋습니다. 평가 중에 유효성 검사 오류가 발생하면 알림이 전송되지 않고 오류가 로깅됩니다. 로그 보기에 대해 알아보기

  • temporal_asset.asset.resource.data의 동적 유형에서는 누락된 필드에 지정된 조건이 런타임 오류를 트리거하고 알림이 게시되지 않습니다. 예를 들어 조건 temporal_asset.asset.resource.data.name != "my_name"의 경우 업데이트에서 name 필드가 누락되면 평가가 실패하고 알림이 수신되지 않습니다. 특정 필드가 있는 상태에서 조건이 작동하는 경우 조건의 존재를 확인하여 제대로 평가되었는지 확인합니다.

  • 정적 enum 유형은 정규화된 경로 이름 또는 원시 정수로 표현할 수 있습니다. 예를 들어 prior_asset_state에 유효한 표현식은 다음과 같습니다.

    temporal_asset.prior_asset_state == google.cloud.asset.v1.TemporalAsset.PriorAssetState.DOES_NOT_EXIST
    

    temporal_asset.prior_asset_state == 3
    

    temporal_asset.asset.resource.data의 동적 열거형 유형은 원시 문자열로 표시됩니다. 예를 들어 다음 표현식은 애셋 유형 cloudresourcemanager.googleapis.com/Project에 유효합니다.

    temporal_asset.asset.resource.data.lifecycleState == "ACTIVE"