第3章 ポリシーの作成
Enterprise Contract の ポリシー は、ルールまたはルールセットと、Enterprise Contract 固有のアノテーションです。Enterprise Contract は、いくつかの種類のポリシーチェックを実行できます。これには、Red Hat 製品に必要なポリシールール をすべてチェックすることが含まれます。Enterprise Contract は、Open Policy Agent (OPA) と呼ばれる汎用ポリシーエンジンを使用します。OPA は、Rego と呼ばれる独自の言語でポリシールールを定義します。そのため、Enterprise Contract のポリシーに含まれている OPA のポリシールールも、Rego で定義されています。
手順
次の例のように、新しいポリシールールを定義する Rego ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
METADATAコメントブロック (先頭にハッシュタグ (#) が付く最初の 10 行のコード) は、rego がルールアノテーションを指定する方法です。これにより、Enterprise Contract はこれらのアノテーションの詳細を成功と違反のレポートに含めることができます。rego のメタデータとアノテーションの詳細は、Metadata を参照してください。Enterprise Contract のポリシールールに含める必要があるアノテーションの詳細は、Rule annotations を参照してください。- 2
- この 1 つのポリシールールは、新しいポリシールールの
builder.idが、Supply-chain Levels for Software Artifacts (SLSA) の来歴のbuilder.idと一致することを確認します。 - 3
inputは、コンテナーイメージ、その署名、およびそのアテステーションに関するすべての情報が含まれる Rego オブジェクトです。inputオブジェクトのinput.attestations属性には、イメージに関連付けられたアテステーションのリストが含まれます。Enterprise Contract がinput.attestationsコンテンツを定義する場所と方法に関する詳細は、Policy Input を参照してください。
ヒントinputオブジェクトを JSON ファイルに保存して使用可能な値を表示できます。これは、新しいポリシールールを記述する際に役立ちます。inputオブジェクトをinput.jsonという名前の JSON ファイルとして保存するには、次の例のようなコマンドを実行します。ec validate image --public-key cosign.pub --image "$REPOSITORY:latest" --policy policy.yaml \ --output policy-input=input.jsonec validate image --public-key cosign.pub --image "$REPOSITORY:latest" --policy policy.yaml \ --output policy-input=input.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例のように、新しいポリシールールを使用するポリシー設定を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例のように、新しいポリシーを使用してコンテナーイメージを検証し、成功と違反のレポートに追加情報を表示します。
ec validate image --public-key cosign.pub --image "$REPOSITORY:latest" --policy policy.yaml \ --show-successes --info --output yamlec validate image --public-key cosign.pub --image "$REPOSITORY:latest" --policy policy.yaml \ --show-successes --info --output yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-
成功と違反のレポートをチェックして、新しいルールが
successesリストに含まれていることを確認します。
3.1. ポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
インライン JSON または YAML 文字列を使用して、Enterprise Contract ポリシーを設定できます。このポリシーは、config または contract とも呼ばれ、実行するポリシーを適用するために使用するルールとデータを Enterprise Contract で検索する場所を指定します。1 つのルールや特定のルールパッケージを追加または除外することもできます。
手順
次の例のように、コマンドラインでポリシーを JSON または YAML 文字列として設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション) 次の例のように、Enterprise Contract ポリシーから特定のルールパッケージを除外します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、指定したパッケージ内のルールを除く全パッケージの全ルールが追加されます。
(オプション) 次の例のように、1 つのルールを除外します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
unacceptable_task_bundleルールを除くattestation_task_bundleパッケージのすべてのルールが追加されます。(オプション) 次の例のように、特定のパッケージのルールのみを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、指定したパッケージのルールのみが追加されます。
(オプション) 特定パッケージの一部のルールのみを追加します。つまり、次の例のように、
includeとexcludeの両方を指定して、Enterprise Contract ポリシーに追加するルールのみを選択できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- アスタリスク (*) はワイルドカードとして機能し、すべてのパッケージにマッチします。名前の一部にはマッチしないことに注意してください。たとえば、"s*" を指定して、"s" で始まるすべてのパッケージにマッチさせることはできません。
これらのコマンドにより、
attestation_task_bundleパッケージのunacceptable_task_bundleルール のみ を追加し、そのパッケージ内の他のルールをすべて除外することが指定されます。(オプション) 次の例のように、特定のチェックを除外して、そのチェックが失敗した場合や完了しなかった場合でも、Enterprise Contract がコンテナーイメージを検証できるようにします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドによって、特定のチェックのいずれかが失敗した場合や完了しなかった場合でも、Enterprise Contract がコンテナーイメージの検証を完了できるようになります。
(オプション)
config.policy.includeコマンドまたはconfig.policy.excludeコマンドのいずれかを文字列のリストとともに実行して、パッケージ内のルールのデフォルト設定を変更します。文字列のリストには、次のいずれかを含める必要があります。
- "パッケージ名" - Available rule collections リストからパッケージを選択します。
-
"ルール名" - パッケージ名とルールコードをドット (.) で区切って入力し、ルール名を指定します (例:
attestation_type.unknown_att_type)。ルールコードは、こちら の「Attestation type」で確認できます。 - "パッケージ名:項目" - ポリシールールの中には、項目のリストを処理するものもあります。"パッケージ名" 文字列に "項目" を付加すると、そのリストから特定の項目を除外または追加できます。これは "パッケージ名" と同様に機能しますが、その項目にマッチするパッケージ内のポリシールールにのみ適用される点が異なります。たとえば、テストパッケージを実行する場合は、特定のテストケースを無視して、他のすべてのテストケースを追加することができます。
- "ルール名:項目" - これは "パッケージ名:項目" と似ていますが、パッケージに 項目 を追加または除外する代わりに、特定のパッケージの ポリシールール を追加または除外できる点が異なります。
-
"@コレクション名" - 定義済みのルールのコレクションを指定するには、これを文字列に追加します。コレクション名の前に必ず
@記号を付けてください。こちら の利用可能なルールコレクションから選択します。