第5章 コンテナーイメージのアテストと検証
Enterprise Contract によって署名済みコンテナーイメージを検証する前に、まず SLSA 来歴を作成し、それをコンテナーイメージに関連付ける必要があります。来歴とは、サプライチェーン内の特定のソフトウェア "リンク" がどこで、いつ、どのように作成されたかなど、ソフトウェアアーティファクトに関する検証可能な情報です。Supply-chain Levels for Software Artifacts (SLSA) の来歴の詳細は、SLSA Provenance を参照してください。
前提条件
- 署名済みのコンテナーイメージ。
- OpenShift Web コンソールへのアクセス。
- バージョン 4.13 以降の OpenShift 上で実行中の動作している Red Hat Trusted Artifact Signer インストール。
-
cosign
およびoc
バイナリーファイルがインストールされたワークステーション。
手順
SLSA 来歴ファイル
predicate.json
を作成します。以下に例を示します。echo '{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://localhost/dummy-type", "invocation": {}, "buildConfig": {}, "metadata": { "buildStartedOn": "2023-09-25T16:26:44Z", "buildFinishedOn": "2023-09-25T16:28:59Z", "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] } ' > predicate.json
echo '{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://localhost/dummy-type", "invocation": {}, "buildConfig": {}, "metadata": { "buildStartedOn": "2023-09-25T16:26:44Z", "buildFinishedOn": "2023-09-25T16:28:59Z", "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] } ' > predicate.json
Copy to Clipboard Copied! 作成した
predicate.json
ファイルに署名してアテストします。以下に例を示します。cosign attest -y --fulcio-url=$FULCIO_URL \ --rekor-url=$REKOR_URL \ --oidc-issuer=$OIDC_ISSUER_URL \ --predicate predicate.json \ --type slsaprovenance $IMAGE
cosign attest -y --fulcio-url=$FULCIO_URL \ --rekor-url=$REKOR_URL \ --oidc-issuer=$OIDC_ISSUER_URL \ --predicate predicate.json \ --type slsaprovenance $IMAGE
Copy to Clipboard Copied! Keycloak が開き、コンテナーイメージに署名したときのログインに基づいて自動的に認証されます。
Enterprise Contract を使用して署名とアテステーションを検証します。以下に例を示します。
ec validate image --image $IMAGE \ --certificate-identity-regexp '.*' \ --certificate-oidc-issuer-regexp '.*' \ --output yaml --show-successes
ec validate image --image $IMAGE \ --certificate-identity-regexp '.*' \ --certificate-oidc-issuer-regexp '.*' \ --output yaml --show-successes
Copy to Clipboard Copied!
ec validity image
コマンドを実行するときは、各署名が期待される identity
と一致するように、できるだけ詳細に指定してください。
検証
- Enterprise Contract によってコンテナーイメージが検証され、Enterprise Contract のすべての検証と署名に関する詳細なレポートが開きます。
5.1. JSON および YAML 定義の検証
ソフトウェアサプライチェーンを保護するさまざまな選択肢を検討する際に、タスクまたはパイプラインの定義にポリシーを適用することを選択する場合があります。たとえば、Enterprise Contract を使用して、特定のパイプラインでどのタスクが実行されるかを確認する必要があるかもしれません。一部のパイプラインタスクを必須にしたり、特定のタスクのみの実行を許可したり、タスクやパイプラインを実行する前に適用するその他の規則を設定したりすることもあるでしょう。
前提条件
-
Enterprise Contract CLI がインストールされている。インストールの手順は、Enterprise Contract CLI のインストール ガイドを参照してください。必要なファイルは
ec-cli
GitHub リポジトリー にあります。
手順
Enterprise Contract の JSON または YAML 定義が有効であることを検証するには、次の手順を実行します。
-
Enterprise Contract CLI で、
ec validate input
コマンドを入力します。