カスタム クラウド コントロールのルールを記述する

カスタム クラウド制御を作成する場合は、Common Expression Language(CEL)式を使用して、スキャンされたリソースのプロパティを評価するルールを作成します。

式は、単一の値をチェックするシンプルな式にすることも、複数の値または条件をチェックする複雑な複合式にすることもできます。いずれの場合も、式をブール値 false に解決して検出をトリガーする必要があります。

リソース プロパティを評価する CEL 式は、次のルールに従う必要があります。

  • リソースタイプの API 定義で定義されているように、CEL 式に指定するプロパティは、スキャンされたリソースのプロパティである必要があります。

  • 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')