Skip to main content

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

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

メモ

先に進む前に、コンテナーイメージのビルドの履歴を有効にし、「push-to-registry」属性を attest-build-provenance アクションに設定したことを、「コンテナーイメージのビルドの履歴を生成する方法」のドキュメントに従って確認します。 これは、ポリシー コントローラーで認証を検証するために必要です。

Kubernetes アドミッション コントローラーの導入方法

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

  1.        [Sigstore ポリシー コントローラーを展開します](#deploy-the-sigstore-policy-controller)。
    
  2.        [GitHub `TrustRoot` と `ClusterImagePolicy` をクラスターに追加します](#add-the-github-trustroot-and-a-clusterimagepolicy)。
    
  3.        [名前空間でポリシーを有効にします](#enable-the-policy-in-your-namespace)。
    

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

Sigstore Policy Controller がパッケージ化されており、Helm チャートから使用できます。 開始する前に、以下の前提条件を確認してください:

  • バージョン 1.27 以降の Kubernetes クラスター
  •         [RHEL](https://helm.sh/docs/intro/install/) 3.0 以降
    
  •         [kubectl](https://kubernetes.io/docs/tasks/tools/)
    

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

Bash
helm upgrade policy-controller --install --atomic \
  --create-namespace --namespace artifact-attestations \
  oci://ghcr.io/sigstore/helm-charts/policy-controller \
  --version 0.10.5

これにより、ポリシー コントローラーが 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.7.0 \
 --set policy.enabled=true \
 --set policy.organization=MY-ORGANIZATION

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

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

警告

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

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

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.7.0 \
 --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**) と一致させる必要があります。

許可するイメージには、__ リストに一致する glob パターンがpolicy.imagesであることに注意してください。 画像がいずれのパターンにも一致しない場合、拒否されます。 さらに、イメージが 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/sigstore/helm-charts/policy-controller --version 0.10.5

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

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

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