Skip to main content

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

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

Kubernetes 허용 컨트롤러 정보

아티팩트 증명을 사용하면 빌드한 소프트웨어에 대해 수정할 수 없는 출처 및 무결성 보장을 생성할 수 있습니다. 따라서 소프트웨어를 사용하는 사용자는 소프트웨어가 빌드된 위치와 방법을 확인할 수 있습니다.

Kubernetes 허용 컨트롤러는 Kubernetes API 서버의 동작을 제어하는 플러그 인입니다. 일반적으로 Kubernetes 클러스터에서 보안 정책 및 모범 사례를 적용하는 데 사용됩니다.

오픈 소스 Sigstore Policy Controller 프로젝트를 사용하여 아티팩트 증명을 적용할 수 있는 허용 컨트롤러를 Kubernetes 클러스터에 추가할 수 있습니다. 이렇게 하면 유효한 증명이 있는 아티팩트만 배포할 수 있습니다.

컨트롤러를 설치하기 위해 두 개의 Helm 차트를 제공합니다. 하나는 Sigstore Policy Controller를 배포하고 다른 하나는 GitHub 트러스트 루트 및 기본 정책을 로드하기 위한 것입니다.

신뢰 루트 및 정책 정보

Sigstore Policy Controller는 주로 사용자 지정 리소스 TrustRootClusterImagePolicy로 표현되는 신뢰 루트와 정책으로 구성됩니다. TrustRoot는 증명을 확인하는 데 사용되는 공개 키 자료의 신뢰할 수 있는 배포 채널을 나타냅니다. ClusterImagePolicy는 이미지에 증명을 적용하기 위한 정책을 나타냅니다.

또한 TrustRootTUF 리포지토리 루트를 포함할 수 있으므로 클러스터가 신뢰할 수 있는 공개 키 자료에 대한 업데이트를 지속적으로 안전하게 받을 수 있습니다. 지정되지 않은 상태로 두면 ClusterImagePolicy는 기본적으로 오픈 소스 Sigstore Public Good Instance의 키 자료를 사용합니다. 프라이빗 리포지토리에 대해 생성된 증명을 확인할 때 ClusterImagePolicy는 GitHub TrustRoot를 참조해야 합니다.

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.10.0-github8

그러면 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.1 \
 --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 패턴 목록으로 설정할 수 있습니다. 와일드카드 구문은 슬래시를 포함한 모든 문자 시퀀스를 일치시키기 위해 **을(를) 추가하여 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.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 이미지를 제외하려면 모든 이미지 버전과 일치하도록 도메인 및 이중별 글로브를 포함한 전체 이름(index.docker.io/library/busybox**)을 제공해야 합니다.

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

GitHub Enterprise 계정에 GHE.com 하위 도메인이 있는 경우 GitHub 트러스트 도메인에 대한 값을 지정해야 합니다. 이 값은 GitHub Enterprise 계정을 호스트하는 데이터 보존 지역과 연결된 신뢰할 수 있는 자료를 가져오는 데 사용됩니다. 이 값은 gh CLI 도구를 사용하여 엔터프라이즈 계정에 로그인하고 다음 명령을 실행하여 찾을 수 있습니다.

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-github8

신뢰 정책 옵션의 경우:

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

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