커스텀 클라우드 제어를 만들 때는 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') |