Kubernetes アドミッション コントローラーについて
アーティファクト構成証明 を使用することで、ビルドするソフトウェアに対して証明不可能な起源と整合性の保証を作成できます。 さらに、ソフトウェアを使用するユーザーは、ソフトウェアがビルドされた場所と方法の確認ができます。
Kubernetes アドミッション コントローラーは、Kubernetes API サーバーの動作を制御するプラグインです。 これらは一般的に、Kubernetes クラスターでセキュリティ ポリシーとベスト プラクティスを適用するために使用されます。
オープンソース Sigstore ポリシー コントローラー プロジェクトを使用すると、アーティファクト構成証明を適用できる Kubernetes クラスターにアドミッション コントローラーを追加できます。 これにより、有効な構成証明を持つアーティファクトのみを確実にデプロイできます。
コントローラーをインストールする ために、Sigstore ポリシー コントローラーをデプロイするためのチャートと、GitHub 信頼ルートと既定のポリシーを読み込むためのチャートの、2 つの Helm チャート が用意されています。
信頼のルートとポリシーについて
Sigstore ポリシー コントローラーは、主に、カスタム リソース TrustRoot
と ClusterImagePolicy
によって表される信頼ルートとポリシーで構成されます。 TrustRoot
は、構成証明の検証に使用されるパブリック キー マテリアルの信頼された配布チャネルを表します。 ClusterImagePolicy
は、イメージに構成証明を適用するためのポリシーを表します。
また、TrustRoot
には TUF リポジトリのルートが含まれている場合があるため、クラスターは、その信頼されたパブリック キー マテリアルの更新を継続的かつ安全に受信できます。 指定しないでおく場合は、ClusterImagePolicy
は既定で オープンソース Sigstore Public Good Instance のキー マテリアルを使用します。 プライベート リポジトリ用に生成された構成証明を確認する場合、ClusterImagePolicy
は GitHub TrustRoot
を参照する必要があります。
Kubernetes アドミッション コントローラーの概要
GitHub アーティファクト構成証明を適用するためのアドミッション コントローラーを設定するには、次の操作を行う必要があります:
Sigstore ポリシー コントローラーを展開する
Sigstore ポリシー コントローラーは、GitHub 分散型 Helm チャート としてパッケージ化されていました。 開始する前に、以下の前提条件を確認してください:
まず、Sigstore ポリシー コントローラーをデプロイする Helm チャートをインストールします:
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-github8
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-github8
これにより、ポリシー コントローラーが artifact-attestations
名前空間にインストールされます。 この時点で、ポリシーは構成されておらず、構成証明は適用されません。
GitHub TrustRoot
と ClusterImagePolicy
を追加します
ポリシー コントローラーがデプロイされたら、GitHub TrustRoot
と ClusterImagePolicy
をクラスターに追加する必要があります。 これを行うには、提供されている Helm グラフを使用します。 MY-ORGANIZATION
を GitHub 組織の名前 (github
や octocat-inc
など) に必ず置き換えます。
helm upgrade trust-policies --install --atomic \ --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \ --version v0.6.1 \ --set policy.enabled=true \ --set policy.organization=MY-ORGANIZATION
helm upgrade trust-policies --install --atomic \
--namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
--version v0.6.1 \
--set policy.enabled=true \
--set policy.organization=MY-ORGANIZATION
これで、GitHub 信頼ルートとアーティファクト構成証明ポリシーがクラスターにインストールされました。 このポリシーは、GitHub 組織内から発生していないアーティファクトを拒否します。
名前空間でポリシーを有効にする
Warning
このポリシーは、適用する名前空間を指定するまで適用されません。
クラスター内の各名前空間は、ポリシーを個別に適用できます。 名前空間で適用を有効にするには、名前空間に次のラベルを追加します:
metadata:
labels:
policy.sigstore.dev/include: "true"
ラベルが追加されると、GitHub アーティファクト構成証明ポリシーが名前空間に適用されます。
その代わりに、以下を実行する可能性があります:
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
一致する画像
既定では、trust-policies
Helm チャートと共にインストールされたポリシーは、クラスターに入る前にすべてのイメージの構成証明を検証します。 イメージのサブセットに対してのみ構成証明を適用する場合は、Helm 値 policy.images
と policy.exemptImages
を使用して、照合するイメージの一覧を指定できます。 これらの値は、イメージ名に一致する glob パターンのリストに設定できます。 globbing 構文では、Go filepath セマンティクスが使用され、スラッシュを含む任意の文字列に一致する **
が追加されています。
たとえば、パターン ghcr.io/MY-ORGANIZATION/*
に一致するイメージに構成証明を適用し、有効な構成証明なしで busybox
を許可するには、以下を実行します:
helm upgrade trust-policies --install --atomic \ --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \ --version v0.6.1 \ --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/**"]'
helm upgrade trust-policies --install --atomic \
--namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
--version v0.6.1 \
--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.images
と policy.exemptImages
の両方に一致する場合は、拒否されます。
詳細な使用方法
Helm チャートで構成できるオプションの完全なセットを表示するには、次のいずれかのコマンドを実行します。 ポリシー コントローラー オプションの場合:
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github8
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github8
信頼ポリシー オプションの場合:
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.1
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.1
Sigstore ポリシー コントローラーの詳細については、「Sigstore ポリシー コントローラーのドキュメント」を参照してください。