Skip to main content

Kubernetes 어드미션 컨트롤러를 사용하여 아티팩트 증명서 적용

허용 컨트롤러를 사용하여 Kubernetes 클러스터에서 아티팩트 증명을 적용합니다.

참고

계속하기 전에 push-to-registry에 설명된 대로, attest 작업에서 속성을 설정하는 것을 포함하여 컨테이너 이미지에 대한 빌드 출처를 사용 설정했는지 확인하세요. 이는 정책 컨트롤러가 증명을 확인하는 데 필요합니다.

Kubernetes 어드미션 컨트롤러 기본 사용법

GitHub 아티팩트 증명을 적용하기 위한 허용 컨트롤러를 설정하려면 다음을 수행해야 합니다.

  1.        [Sigstore Policy Controller](#deploy-the-sigstore-policy-controller)를 배포합니다.
    
  2.        [GitHub `TrustRoot` 및 `ClusterImagePolicy`를 클러스터에 추가합니다](#add-the-github-trustroot-and-a-clusterimagepolicy).
    
  3.        [네임스페이스에서 정책을 사용하도록 설정합니다](#enable-the-policy-in-your-namespace).
    

Sigstore Policy Controller 배포

Sigstore 정책 컨트롤러는 패키지화되어 Helm 차트를 통해 제공되었습니다. 시작하기 전에 다음과 같은 필수 구성 요소가 있는지 확인합니다.

  • 버전 1.27 이상이 있는 Kubernetes 클러스터
  •         [Helm](https://helm.sh/docs/intro/install/) 3.0 이상
    
  •         [kubectl](https://kubernetes.io/docs/tasks/tools/)
    

먼저 Sigstore Policy Controller를 배포하는 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

그러면 Policy Controller가 artifact-attestations 네임스페이스에 설치됩니다. 이 시점에서는 정책이 구성되지 않았으며 증명을 적용하지 않습니다.

GitHub TrustRootClusterImagePolicy 추가

정책 컨트롤러가 배포되면 GitHub TrustRootClusterImagePolicy를 클러스터에 추가해야 합니다. 제공된 Helm 차트를 사용하여 이 작업을 수행합니다. MY-ORGANIZATION을 GitHub 조직의 이름(예: github 또는octocat-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 패턴 목록으로 설정할 수 있습니다. 글로빙 구문은 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 이미지를 제외하려면 모든 이미지 버전과 일치하도록 도메인 및 이중별 글로브를 포함한 전체 이름(index.docker.io/library/busybox**)을 제공해야 합니다.

허용하려는 모든 이미지는 반드시 __ 목록의 glob 패턴과 일치 policy.images 한다는 점을 유념하세요. 이미지가 패턴과 일치하지 않으면 거부됩니다. 또한 이미지가 policy.imagespolicy.exemptImages에 모두 일치하는 경우 거부됩니다.

고급 사용

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 Policy Controller에 대한 자세한 내용은 Sigstore Policy Controller 설명서를 참조하세요.