Skip to main content

Kubernetes 허용 컨트롤러를 사용하여 아티팩트 증명 적용

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

참고 항목

계속하기 전에 컨테이너 이미지의 빌드 출처 생성에 설명되어 있는 대로 attest-build-provenance 작업push-to-registry 특성을 설정하는 것을 포함하여 컨테이너 이미지의 빌드 출처를 사용하도록 설정했는지 확인합니다. 이는 정책 컨트롤러가 증명을 확인하는 데 필요합니다.

Kubernetes 허용 컨트롤러 시작하기

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

  1. Sigstore Policy Controller를 배포합니다.
  2. GitHub TrustRootClusterImagePolicy를 클러스터에 추가합니다.
  3. 네임스페이스에서 정책을 사용하도록 설정합니다.

Sigstore Policy Controller 배포

Sigstore Policy Controller를 GitHub 분산 Helm 차트로 패키징했습니다. 시작하기 전에 다음과 같은 필수 구성 요소가 있는지 확인합니다.

  • 버전 1.27 이상이 있는 Kubernetes 클러스터
  • RHEL 3.0 이상
  • kubectl

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

그러면 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.6.2 \
 --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.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 이미지를 제외하려면 모든 이미지 버전과 일치하도록 도메인 및 이중별 글로브를 포함한 전체 이름(index.docker.io/library/busybox**)을 제공해야 합니다.

수락하려는 모든 이미지에는 policy.images 목록에 일치하는 GLOB 패턴이 반드시 있어야 합니다. 이미지가 패턴과 일치하지 않으면 거부됩니다. 또한 이미지가 policy.imagespolicy.exemptImages에 모두 일치하는 경우 거부됩니다.

고급 사용

Helm 차트를 사용하여 구성할 수 있는 옵션의 전체 집합을 보기 위해 다음 명령 중 하나를 실행할 수 있습니다. 정책 컨트롤러 옵션의 경우:

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

신뢰 정책 옵션의 경우:

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

Sigstore Policy Controller에 대한 자세한 내용은 Sigstore Policy Controller 설명서를 참조하세요.