Skip to main content

Kubernetes アドミッション コントローラーを使用したアーティファクト構成証明の適用

アドミッション コントローラーを使用して、Kubernetes クラスターでアーティファクトの構成証明を適用します。

Kubernetes アドミッション コントローラーについて

アーティファクト構成証明 を使用することで、ビルドするソフトウェアに対して証明不可能な起源と整合性の保証を作成できます。 さらに、ソフトウェアを使用するユーザーは、ソフトウェアがビルドされた場所と方法の確認ができます。

Kubernetes アドミッション コントローラーは、Kubernetes API サーバーの動作を制御するプラグインです。 これらは一般的に、Kubernetes クラスターでセキュリティ ポリシーとベスト プラクティスを適用するために使用されます。

オープンソース Sigstore ポリシー コントローラー プロジェクトを使用すると、アーティファクト構成証明を適用できる Kubernetes クラスターにアドミッション コントローラーを追加できます。 これにより、有効な構成証明を持つアーティファクトのみを確実にデプロイできます。

コントローラーをインストールする ために、Sigstore ポリシー コントローラーをデプロイするためのチャートと、GitHub 信頼ルートと既定のポリシーを読み込むためのチャートの、2 つの Helm チャート が用意されています。

信頼のルートとポリシーについて

Sigstore ポリシー コントローラーは、主に、カスタム リソース TrustRootClusterImagePolicyによって表される信頼ルートとポリシーで構成されます。 TrustRoot は、構成証明の検証に使用されるパブリック キー マテリアルの信頼された配布チャネルを表します。 ClusterImagePolicy は、イメージに構成証明を適用するためのポリシーを表します。

また、TrustRoot には TUF リポジトリのルートが含まれている場合があるため、クラスターは、その信頼されたパブリック キー マテリアルの更新を継続的かつ安全に受信できます。 指定しないでおく場合は、ClusterImagePolicy は既定で オープンソース Sigstore Public Good Instance のキー マテリアルを使用します。 プライベート リポジトリ用に生成された構成証明を確認する場合、ClusterImagePolicy は GitHub TrustRoot を参照する必要があります。

Kubernetes アドミッション コントローラーの概要

GitHub アーティファクト構成証明を適用するためのアドミッション コントローラーを設定するには、次の操作を行う必要があります:

  1. Sigstore ポリシー コントローラーを展開します
  2. GitHub TrustRootClusterImagePolicy をクラスターに追加します
  3. 名前空間でポリシーを有効にします

Sigstore ポリシー コントローラーを展開する

Sigstore ポリシー コントローラーは、GitHub 分散型 Helm チャート としてパッケージ化されていました。 開始する前に、以下の前提条件を確認してください:

  • バージョン 1.27 以降の Kubernetes クラスター
  • RHEL 3.0 以降
  • kubectl

まず、Sigstore ポリシー コントローラーをデプロイする Helm チャートをインストールします:

Bash
helm upgrade policy-controller --install --atomic \
  --create-namespace --namespace artifact-attestations \
  oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \
  --version v0.10.0-github9

これにより、ポリシー コントローラーが artifact-attestations 名前空間にインストールされます。 この時点で、ポリシーは構成されておらず、構成証明は適用されません。

GitHub TrustRootClusterImagePolicy を追加します

ポリシー コントローラーがデプロイされたら、GitHub TrustRootClusterImagePolicy をクラスターに追加する必要があります。 これを行うには、提供されている Helm グラフを使用します。 MY-ORGANIZATION を GitHub 組織の名前 (githuboctocat-inc など) に必ず置き換えます。

Bash
helm upgrade trust-policies --install --atomic \
 --namespace artifact-attestations \
 oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
 --version v0.6.2 \
 --set policy.enabled=true \
 --set policy.organization=MY-ORGANIZATION

これで、GitHub 信頼ルートとアーティファクト構成証明ポリシーがクラスターにインストールされました。 このポリシーは、GitHub 組織内から発生していないアーティファクトを拒否します。

名前空間でポリシーを有効にする

Warning

このポリシーは、適用する名前空間を指定するまで適用されません。

クラスター内の各名前空間は、ポリシーを個別に適用できます。 名前空間で適用を有効にするには、名前空間に次のラベルを追加します:

metadata:
  labels:
    policy.sigstore.dev/include: "true"

ラベルが追加されると、GitHub アーティファクト構成証明ポリシーが名前空間に適用されます。

その代わりに、以下を実行する可能性があります:

Bash
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true

一致する画像

既定では、trust-policies Helm チャートと共にインストールされたポリシーは、クラスターに入る前にすべてのイメージの構成証明を検証します。 イメージのサブセットに対してのみ構成証明を適用する場合は、Helm 値 policy.imagespolicy.exemptImages を使用して、照合するイメージの一覧を指定できます。 これらの値は、イメージ名に一致する glob パターンのリストに設定できます。 globbing 構文では、Go filepath セマンティクスが使用され、スラッシュを含む任意の文字列に一致する ** が追加されています。

たとえば、パターン ghcr.io/MY-ORGANIZATION/* に一致するイメージに構成証明を適用し、有効な構成証明なしで busybox を許可するには、以下を実行します:

Bash
helm upgrade trust-policies --install --atomic \
 --namespace artifact-attestations \
 oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
 --version v0.6.2 \
 --set policy.enabled=true \
 --set policy.organization=MY-ORGANIZATION \
 --set-json 'policy.exemptImages=["index.docker.io/library/busybox**"]' \
 --set-json 'policy.images=["ghcr.io/MY-ORGANIZATION/**"]'

イメージが Docker Hub から生成された場合でも、すべてのパターンで完全修飾名を使用する必要があります。 この例では、イメージ busybox を除外する場合は、ドメインとダブルスターの glob を含むフル ネームを指定して、すべてのイメージ バージョン (index.docker.io/library/busybox**) と一致させる必要があります。

許可するイメージには、policy.images リストに一致する glob パターンが_必要_であることに注意してください。 画像がいずれのパターンにも一致しない場合、拒否されます。 さらに、イメージが policy.imagespolicy.exemptImages の両方に一致する場合は、拒否されます。

GitHub Enterprise アカウントに GHE.com のサブドメインがある場合は、GitHub 信頼ドメインの値を指定する必要があります。 この値は、GitHub Enterprise アカウントをホストするデータ所在地リージョンに関連付けられている信頼できるマテリアルをフェッチするために使用されます。 この値は、gh CLI ツールを使用してEnterprise アカウントにログインし、次のコマンドを実行することで確認できます。

Bash
gh api meta --jq .domains.artifact_attestations.trust_domain

この値は、次のように trust-policies グラフをインストールするときに追加する必要があります。

Bash
--set-json 'policy.trust.githubTrustDomain="YOUR-GHEC-TRUST-DOMAIN"'

詳細な使用方法

Helm チャートで構成できるオプションの完全なセットを表示するには、次のいずれかのコマンドを実行します。 ポリシー コントローラー オプションの場合:

Bash
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github9

信頼ポリシー オプションの場合:

Bash
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2

Sigstore ポリシー コントローラーの詳細については、「Sigstore ポリシー コントローラーのドキュメント」を参照してください。