4.2. Enterprise Contract と Red Hat Trusted Artifact Signer によるコンテナーイメージ署名の検証
Red Hat Trusted Artifact Signer (RHTAS) サービスをインストールすると、ec
バイナリーファイルを使用して、RHTAS サービスのキーレス署名フレームワークを使用するコンテナーイメージのアテステーションと署名を検証できます。RHTAS のインストールの詳細は、Operator Lifecycle Manager を使用した Red Hat Trusted Artifact Signer のインストール を参照してください。
前提条件
- バージョン 4.13 以降の OpenShift 上で実行中の動作している RHTAS インストール。
- OpenShift Web コンソールへのアクセス。
-
cosign
およびoc
バイナリーファイルがインストールされたワークステーション。
手順
OpenShift クラスターから
ec
バイナリーファイルをダウンロードします。- OpenShift Web コンソール にログインします。ホームページから、右上の ? アイコンをクリックし、Command Line Tools を選択します。
- ec download セクションから、プラットフォームのリンクをクリックします。
ターミナルを開き、
.gz
ファイルを展開し、ec
バイナリーファイルに実行ビットを設定します。Linux および macOS の例
-
$ gunzip ec-amd64.gz
-
$ chmod +x ec-amd64
-
ec
バイナリーファイルを$PATH
環境内のディレクトリーに移動します。例
$ sudo mv ec-amd64 /usr/local/bin/ec
他のイメージ検証コマンドオプションをすべて確認するには、ec validate image --help
コマンドを実行します。
コンテナーイメージの署名および検証用にシェル環境を設定します。
ターミナルを開き、
sigstore-ocp
ディレクトリーからtas-env-variables.sh
スクリプトを実行します。例
cd sigstore-ocp source tas-env-variables.sh
cd sigstore-ocp source tas-env-variables.sh
Copy to Clipboard Copied! (オプション) 環境変数を手動で設定します。
例
export OPENSHIFT_APPS_SUBDOMAIN=apps.$(oc get dns cluster -o jsonpath='{ .spec.baseDomain }') export OIDC_AUTHENTICATION_REALM=sigstore export FULCIO_URL=https://fulcio.$OPENSHIFT_APPS_SUBDOMAIN export OIDC_ISSUER_URL=https://keycloak-keycloak-system.$OPENSHIFT_APPS_SUBDOMAIN/auth/realms/$OIDC_AUTHENTICATION_REALM export REKOR_URL=https://rekor.$OPENSHIFT_APPS_SUBDOMAIN export TUF_URL=https://tuf.$OPENSHIFT_APPS_SUBDOMAIN
export OPENSHIFT_APPS_SUBDOMAIN=apps.$(oc get dns cluster -o jsonpath='{ .spec.baseDomain }') export OIDC_AUTHENTICATION_REALM=sigstore export FULCIO_URL=https://fulcio.$OPENSHIFT_APPS_SUBDOMAIN export OIDC_ISSUER_URL=https://keycloak-keycloak-system.$OPENSHIFT_APPS_SUBDOMAIN/auth/realms/$OIDC_AUTHENTICATION_REALM export REKOR_URL=https://rekor.$OPENSHIFT_APPS_SUBDOMAIN export TUF_URL=https://tuf.$OPENSHIFT_APPS_SUBDOMAIN
Copy to Clipboard Copied! 例
$ source ./tas-env-vars.sh
Update Framework (TUF) システムを初期化します。
例
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
コンテナーイメージに署名します。
構文
cosign sign -y --fulcio-url=$FULCIO_URL --rekor-url=$REKOR_URL --oidc-issuer=$OIDC_ISSUER_URL IMAGE_NAME
例
cosign sign -y --fulcio-url=$FULCIO_URL --rekor-url=$REKOR_URL --oidc-issuer=$OIDC_ISSUER_URL example-hello-world@sha256:2788a47fd0ef1ece30898c1e608050ea71036d3329b9772dbb3d1f69313f745c
表示される Web ブラウザーで、メールアドレスを使用してコンテナーイメージに署名します。
predicate.json
ファイルを作成します。例
{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://example.com/tekton-pipeline", "invocation": {}, "buildConfig": {}, "metadata": { "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] }
{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://example.com/tekton-pipeline", "invocation": {}, "buildConfig": {}, "metadata": { "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] }
Copy to Clipboard Copied! predicate.json
ファイルをコンテナーイメージに関連付けます。構文
cosign attest -y --predicate ./predicate.json \ --type slsaprovenance IMAGE_NAME:TAG
cosign attest -y --predicate ./predicate.json \ --type slsaprovenance IMAGE_NAME:TAG
Copy to Clipboard Copied! 例
cosign attest -y --predicate ./predicate.json \ --type slsaprovenance example.io/hello-world:latest
$ cosign attest -y --predicate ./predicate.json \ --type slsaprovenance example.io/hello-world:latest
Copy to Clipboard Copied! コンテナーイメージにアテステーションと署名が 1 つ以上含まれていることを確認します。
構文
cosign tree IMAGE_NAME:TAG
例
cosign tree example.io/hello-world:latest
$ cosign tree example.io/hello-world:latest 📦 Supply Chain Security Related artifacts for an image: example.io/hello-world@sha256:7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35 └── 💾 Attestations for an image tag: example.io/hello-world:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.att └── 🍒 sha256:40d94d96a6d3ab3d94b429881e1b470ae9a3cac55a3ec874051bdecd9da06c2e └── 🔐 Signatures for an image tag: example.io/hello-world:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.sig └── 🍒 sha256:f32171250715d4538aec33adc40fac2343f5092631d4fc2457e2116a489387b7
Copy to Clipboard Copied! Enterprise Contract でコンテナーイメージを検証します。
構文
ec validate image --image IMAGE_NAME:TAG \ --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' \ --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' \ --output yaml --show-successes
ec validate image --image IMAGE_NAME:TAG \ --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' \ --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' \ --output yaml --show-successes
Copy to Clipboard Copied! 例
ec validate image --image example.io/hello-world:latest \ --certificate-identity 'jdoe@example.com' \ --certificate-oidc-issuer 'keycloak-keycloak-system' \ --output yaml --show-successes
$ ec validate image --image example.io/hello-world:latest \ --certificate-identity 'jdoe@example.com' \ --certificate-oidc-issuer 'keycloak-keycloak-system' \ --output yaml --show-successes success: true successes: - metadata: code: builtin.attestation.signature_check msg: Pass - metadata: code: builtin.attestation.syntax_check msg: Pass - metadata: code: builtin.image.signature_check msg: Pass ec-version: v0.1.2427-499ef12 effective-time: "2024-01-21T19:57:51.338191Z" key: "" policy: {} success: true
Copy to Clipboard Copied! Enterprise Contract は、セキュリティー違反の詳細を含む合格/不合格レポートを生成します。
--info
フラグを追加すると、違反に関する詳細と考えられる解決策がレポートに追加されます。