2.3. エンタープライズコントラクトを使用したコンテナーイメージの署名の検証
Enterprise Contract (EC) は、ソフトウェアサプライチェーンのセキュリティーを維持するためのツールであり、これを使用してコンテナーイメージのポリシーを定義および適用できます。ec
バイナリーを使用すると、Red Hat の Trusted Artifact Signer (RHTAS) 署名フレームワークを使用するコンテナーイメージのアテステーションと署名を検証できます。
前提条件
- Red Hat OpenShift Container Platform バージョン 4.13 以降にインストールされた RHTAS。
-
oc
、cosign
、およびpodman
バイナリーがインストールされたワークステーション。 - OpenShift Web コンソールへのアクセス。
手順
OpenShift クラスターから
ec
バイナリーをダウンロードします。- OpenShift Web コンソールにログインします。ホームページから ? アイコンをクリックし、Command line tools をクリックして、ec ダウンロードセクションに移動してから、お使いのプラットフォームへのリンクをクリックします。
ワークステーションでターミナルを開き、バイナリー .gz ファイルを展開し、実行ビットを設定します。
例
$ gunzip ec-amd64.gz $ chmod +x ec-amd64
バイナリーを
$PATH
環境内の場所に移動し、名前を変更します。例
$ sudo mv ec-amd64 /usr/local/bin/ec
OpenShift クラスターにログインします。
構文
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
例
$ oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
注記OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。
RHTAS プロジェクトに切り替えます。
構文
oc project PROJECT_NAME
例
$ oc project trusted-artifact-signer
注記RHTAS インストールのプロジェクト名を使用します。
コンテナーイメージの署名と検証を行うためにシェル環境を設定します。
例
$ export TUF_URL=$(oc get tuf -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) $ export OIDC_ISSUER_URL=https://$(oc get route keycloak -n keycloak-system | tail -n 1 | awk '{print $2}')/auth/realms/trusted-artifact-signer $ export COSIGN_FULCIO_URL=$(oc get fulcio -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) $ export COSIGN_REKOR_URL=$(oc get rekor -o jsonpath='{.items[0].status.url}' -n trusted-artifact-signer) $ export COSIGN_MIRROR=$TUF_URL $ export COSIGN_ROOT=$TUF_URL/root.json $ export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer" $ export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL $ export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL $ export COSIGN_YES="true" $ export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL $ export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER $ export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL $ export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
The Update Framework (TUF) システムを初期化します。
例
$ cosign initialize
テストコンテナーイメージに署名します。
空のコンテナーイメージを作成します。
例
$ echo "FROM scratch" > ./tmp.Dockerfile $ podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
空のコンテナーイメージを
ttl.sh
一時レジストリーにプッシュします。例
$ podman push ttl.sh/rhtas/test-image:1h
コンテナーイメージに署名します。
構文
cosign sign -y IMAGE_NAME:TAG
例
$ cosign sign -y ttl.sh/rhtas/test-image:1h
Web ブラウザーが開いて、コンテナーイメージをメールアドレスで署名できます。
一時的な Docker ファイルを削除します。
例
$ rm ./tmp.Dockerfile
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": [] }
スキーマレイアウトの詳細は、SLSA provenance predicate specifications を参照してください。
predicate.json
ファイルをコンテナーイメージに関連付けます。構文
cosign attest -y --predicate ./predicate.json --type slsaprovenance IMAGE_NAME:TAG
例
$ cosign attest -y --predicate ./predicate.json --type slsaprovenance ttl.sh/rhtas/test-image:1h
コンテナーイメージにアテステーションと署名が 1 つ以上含まれていることを確認します。
構文
cosign tree IMAGE_NAME:TAG
例
$ cosign tree ttl.sh/rhtas/test-image:1h 📦 Supply Chain Security Related artifacts for an image: ttl.sh/rhtas/test-image@sha256:7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35 └── 💾 Attestations for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.att └── 🍒 sha256:40d94d96a6d3ab3d94b429881e1b470ae9a3cac55a3ec874051bdecd9da06c2e └── 🔐 Signatures for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.sig └── 🍒 sha256:f32171250715d4538aec33adc40fac2343f5092631d4fc2457e2116a489387b7
Enterprise Contact を使用してコンテナーイメージを確認します。
構文
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 ttl.sh/rhtas/test-image:1h --certificate-identity-regexp 'jdoe@example.com' --certificate-oidc-issuer-regexp '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
エンタープライズコントラクトは、セキュリティー違反の詳細を含む pass-fail レポートを生成します。
--info
フラグを追加すると、レポートには、検出された違反に対する詳細と考えられる解決策が含まれます。
関連情報
- OpenShift への Red Hat Trusted Artifact Signer のインストール
- Enterprise Contract によるコンプライアンス管理
- 詳細は、Enterprise Contract の Web サイト を参照してください。