第3章 ポリシーの作成


Conforma ポリシー は、ルールまたは一連のルールおよびコンフォーム固有のアノテーションです。complianta は、Red Hat 製品に必要なすべてのポリシールールを確認するなど、いくつかのタイプのポリシーチェックを実行できます。complianta は、Open Policy Agent (OPA)と呼ばれる汎用ポリシーエンジンを使用します。OPA は、Rego を使用してポリシールールを定義します。これは、Conforma ポリシーにある OPA のポリシールールも Rego で定義されていることを意味します。

手順

  1. 次の例のように、新しいポリシールールを定義する Rego ファイルを作成します。

    echo 'package zero_to_hero
    
    import future.keywords.contains
    import future.keywords.if
    import future.keywords.in
    
    
    # METADATA
    # title: Builder ID
    # description: Verify the SLSA Provenance has the builder.id set to
    #   the expected value.
    # custom:
    #   short_name: builder_id
    #   failure_msg: The builder ID %q is not the expected %q
    #   solution: >-
    #     Ensure the correct build system was used to build the container
    #     image.
    deny contains result if {
    	some attestation in input.attestations
    	attestation.statement.predicateType == "https://slsa.dev/provenance/v0.2"
    
    	expected := "https://localhost/dummy-id"
    	got := attestation.statement.predicate.builder.id
    
    	expected != got
    
    	result := {
    		"code": "zero_to_hero.builder_id",
    		"msg": sprintf("The builder ID %q is not expected, %q", [got, expected])
    	}
    }
    ' > rules.rego
    Copy to Clipboard Toggle word wrap
    METADATA
    コードの最初の 10 行は METADATA コメントブロックで設定されます。これは、Conforma がルールアノテーションを指定して、成功および違反のレポートにこれらのアノテーションの詳細を含めることができるようにする方法です。
    short_name
    この 1 つのポリシールールは、新しいポリシールールの builder.id が、Supply-chain Levels for Software Artifacts (SLSA)の出所と一致することを検証します。
    input.attestations

    input は、コンテナーイメージ、その署名、およびそのアテステーションに関するすべての情報が含まれる Rego オブジェクトです。input オブジェクトの input.attestations 属性には、イメージに関連付けられたアテステーションのリストが含まれます。

    ヒント

    input オブジェクトを JSON ファイルに保存して使用可能な値を表示できます。これは、新しいポリシールールを記述する際に役立ちます。input オブジェクトを input.json という名前の JSON ファイルとして保存するには、次の例のようなコマンドを実行します。

    $ ec validate image --public-key cosign.pub \
      --image "$REPOSITORY:latest" \
      --policy policy.yaml \
      --output policy-input=input.json
    Copy to Clipboard Toggle word wrap
  2. 新しいポリシールールを使用するためのポリシー設定を作成します。

    echo "
    ---
    sources:
      - policy:
          - $(pwd)/rules.rego
    " > policy.yaml
    Copy to Clipboard Toggle word wrap
  3. 以下の例のように、新しいポリシーを使用してコンテナーイメージを検証し、成功および違反レポートの追加情報を表示します。

    $ ec validate image --public-key cosign.pub \
      --image "$REPOSITORY:latest" \
      --policy policy.yaml \
      --show-successes --info --output yaml
    Copy to Clipboard Toggle word wrap

検証

  • 成功と違反のレポートをチェックして、新しいルールが successes リストに含まれていることを確認します。

3.1. ポリシーの設定

インライン JSON または YAML 文字列を使用して Conforma ポリシーを設定できます。このポリシーは、config または contract とも呼ばれ、実行するポリシーを適用するために使用するルールとデータを Conforma で検索する場所を指定します。1 つのルールや特定のルールパッケージを追加または除外することもできます。

手順

  1. 次の例のように、コマンドラインでポリシーを JSON または YAML 文字列として設定します。

    $ ec validate image --policy '{
        "sources": [
            {
                "policy": ["oci::quay.io/enterprise-contract/ec-release-policy:latest"],
                "data": ["git::https://github.com/enterprise-contract/ec-policies//example/data"],
                "config": {"include": ["@minimal"]}
            }
        ]
    }' ...
    Copy to Clipboard Toggle word wrap
  2. (オプション) 次の例のように、Conforma ポリシーから特定のルールパッケージを除外します。

    {
      "sources": [
        {
          "policy": [
            "oci::quay.io/enterprise-contract/ec-release-policy:latest"
          ],
          "data": [
            "git::https://github.com/enterprise-contract/ec-policies//example/data"
          ],
          "config": {
            "exclude": [
              "attestation_task_bundle",
              "slsa_build_scripted_build"
            ]
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap

    このコマンドにより、指定したパッケージ内のルールを除く全パッケージの全ルールが追加されます。

  3. (オプション) 次の例のように、1 つのルールを除外します。

    {
      "sources": [
        {
          "policy": [
            "oci::quay.io/enterprise-contract/ec-release-policy:latest"
          ],
          "data": [
            "git::https://github.com/enterprise-contract/ec-policies//example/data"
          ],
          "config": {
            "exclude": [
              "attestation_task_bundle.unacceptable_task_bundle"
            ]
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap

    このコマンドにより、unacceptable_task_bundle ルールを除く attestation_task_bundle パッケージのすべてのルールが追加されます。

  4. (オプション) 次の例のように、特定のパッケージのルールのみを追加します。

    {
      "sources": [
        {
          "policy": [
            "oci::quay.io/enterprise-contract/ec-release-policy:latest"
          ],
          "data": [
            "git::https://github.com/enterprise-contract/ec-policies//example/data"
          ],
          "config": {
            "include": [
              "test",
              "java"
            ]
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap

    このコマンドにより、指定したパッケージのルールのみが追加されます。

  5. (オプション) 特定パッケージの一部のルールのみを追加します。つまり、次の例のように、includeexclude の両方を指定して、Conforma ポリシーに含めるルールのみを選択できます。

    {
      "sources": [
        {
          "policy": [
            "oci::quay.io/enterprise-contract/ec-release-policy:latest"
          ],
          "data": [
            "git::https://github.com/enterprise-contract/ec-policies//example/data"
          ],
          "config": {
            "include": [
              ""*"",
              "attestation_task_bundle.unacceptable_task_bundle"
            ],
            "exclude": [
              "attestation_task_bundle.*"
            ]
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap
    アスタリスク(*)

    アスタリスク (*) はワイルドカードとして機能し、すべてのパッケージにマッチします。部分的な名前とは一致しません。たとえば、s*" が、s で始まるすべてのパッケージに一致させるように指定することはできません。

    これらのコマンドにより、attestation_task_bundle パッケージの unacceptable_task_bundle ルール のみ を追加し、そのパッケージ内の他のルールをすべて除外することが指定されます。

  6. (オプション) 次の例のように、特定のチェックを除外して、そのチェックが失敗した場合や完了しなかった場合でも、Conforma がコンテナーイメージを検証できるようにします。

    {
      "sources": [
        {
          "policy": [
            "oci::quay.io/enterprise-contract/ec-release-policy:latest"
          ],
          "data": [
            "git::https://github.com/enterprise-contract/ec-policies//example/data"
          ],
          "config": {
            "exclude": [
              "test:get-clair-scan",
              "test:clamav-scan"
            ]
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap

    このコマンドは、特定されたチェックのいずれかが失敗した場合、または完了しない場合でも、Conforma がコンテナーイメージの妥当性を検証できることを指定します。

  7. (オプション) config.policy.include コマンドまたは config.policy.exclude コマンドのいずれかを文字列のリストとともに実行して、パッケージ内のルールのデフォルト設定を変更します。

    文字列のリストには、次のいずれかを含める必要があります。

    パッケージ名
    Available rule collections リストのパッケージから選択します。
    ルール名
    attestation_type.unknown_att_type のように、ドット(.)で区切られたパッケージとルールコードを入力し、ルール名を指定します。ルールコードは、アップストリームの Conforma ドキュメントの Attestation type の下に見つけることができます。
    パッケージ名:term
    ポリシールールによっては、アイテムのリストを処理します。"パッケージ名" 文字列に "項目" を付加すると、そのリストから特定の項目を除外または追加できます。これは "パッケージ名" と同様に機能しますが、その項目にマッチするパッケージ内のポリシールールにのみ適用される点が異なります。たとえば、テストパッケージを実行する場合は、特定のテストケースを無視して、他のすべてのテストケースを追加することができます。
    rule name:term
    これは、パッケージに 項目 を追加または除外するのではなく、特定のパッケージ ポリシールール を含めるか除外できる点を除き、package name:term と似ています。
    @collection name
    これを文字列に追加して、事前定義されたルールのコレクションを指定します。コレクション名の前に @ 記号を付けます。利用可能なルールコレクションから選択します。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る