커스텀 클라우드 제어 규칙 작성

커스텀 클라우드 제어를 만들 때는 Common Expression Language (CEL) 표현식을 사용하여 스캔된 리소스의 속성을 평가하는 규칙을 만듭니다.

표현식은 단일 값을 검사하는 표현식이거나 여러 값 또는 조건을 검사하는 복잡한 복합 표현식일 수 있습니다. 어느 경우든 표현식은 발견 항목을 트리거하기 위해 불리언 false로 결정되어야 합니다.

리소스 속성을 평가하는 CEL 표현식은 다음 규칙을 준수해야 합니다.

  • CEL 표현식에서 지정하는 속성은 리소스 파일의 API 정의에 정의된 대로 스캔된 리소스의 속성이어야 합니다.

  • CEL 표현식의 모든 열거형은 문자열로 표시되어야 합니다. 예를 들어 다음은 cloudkms.googleapis.com/CryptoKeyVersion 리소스 유형의 유효한 표현식입니다.

    resource.state = "PENDING_GENERATION"
  • condition 속성에서 정의하는 CEL 표현식의 결과는 불리언이어야 합니다. 결과가 false인 경우에만 발견 항목이 트리거됩니다.

CEL에 대한 자세한 내용은 다음을 참조하세요.

CEL 표현식 예시

다음 표에는 리소스 속성을 평가하는 데 사용할 수 있는 몇 가지 CEL 표현식이 나와 있습니다.

리소스 유형 설명 CEL 표현식
cloudkms.googleapis.com/CryptoKey Cloud KMS 키 순환 기간 확인 has(resource.rotationPeriod) && resource.rotationPeriod < duration('60h')
compute.googleapis.com/Network 네트워크 피어와 Virtual Private Cloud 피어링 규칙 일치 resource.selfLink.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default') || resource.peerings.exists(p, p.network.matches('https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/shared$'))
cloudfunctions.googleapis.com/CloudFunction Cloud Run 함수에 내부 인그레스 트래픽만 허용 has(resource.ingressSettings) && resource.ingressSettings.matches('ALLOW_INTERNAL_ONLY')
compute.googleapis.com/Instance 리소스 이름 패턴 일치 resource.name.matches('^gcp-vm-(linux|windows)-v\\\\d+$')
serviceusage.googleapis.com/Service 스토리지 관련 API만 사용 설정 허용 resource.state == 'ENABLED' && !( resource.name.matches('storage-api.googleapis.com') || resource.name.matches('bigquery-json.googleapis.com') || resource.name.matches('bigquery.googleapis.com') || resource.name.matches('sql-component.googleapis.com') || resource.name.matches('spanner.googleapis.com'))
sqladmin.googleapis.com/Instance 허용 목록에 있는 공개 IP 주소만 허용 (resource.instanceType == 'CLOUD_SQL_INSTANCE' && resource.backendType == 'SECOND_GEN' && resource.settings.ipConfiguration.ipv4Enabled ) && (resource.ipAddresses.all(ip, ip.type != 'PRIMARY' || ip.ipAddress.matches('IP_ADDRESS')))
dataproc.googleapis.com/Cluster Dataproc 클러스터의 프로젝트 ID에 하위 문자열 testing 또는 development이 포함되는지 여부 확인 has(resource.projectId) && !resource.projectId.contains('testing') || !resource.projectId.contains('development')