カスタム クラウド制御を作成する場合は、Common Expression Language(CEL)式を使用して、スキャンされたリソースのプロパティを評価するルールを作成します。
式は、単一の値をチェックするシンプルな式にすることも、複数の値または条件をチェックする複雑な複合式にすることもできます。いずれの場合も、式をブール値 false
に解決して検出結果をトリガーする必要があります。
リソース プロパティを評価する CEL 式は、次のルールに従う必要があります。
リソースタイプの API 定義で定義されているように、CEL 式に指定するプロパティは、スキャンされたリソースのプロパティである必要があります。
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 |
Virtual Private Cloud ピアリング ルールをネットワーク ピアに一致させる | 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') |