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

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

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

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

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

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

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

리소스 이름을 찾으려면 애셋 유형을 참고하세요.

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

CEL 표현식 예시

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

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