Kubernetes admission controller로 아티팩트 증명 강제하기

Kubernetes admission controller로 아티팩트 증명 강제하기

Kubernetes 클러스터에서 admission controller를 사용해 아티팩트 증명(attestation)을 강제해보세요.

출처: 문서

본문

Kubernetes 클러스터에서 admission controller를 사용해 아티팩트 증명을 강제할 수 있어요.

[!NOTE] 진행하기 전에 Using artifact attestations to establish provenance for builds에 문서화된 대로 attest 액션에서 push-to-registry 속성을 설정하는 것을 포함해 컨테이너 이미지에 대한 빌드 출처(build provenance)를 활성화했는지 확인하세요. Policy Controller가 증명을 검증하려면 이것이 필요합니다.

Kubernetes admission controller 시작하기

GitHub 아티팩트 증명을 강제하기 위한 admission controller를 설정하려면 다음을 수행해야 해요:

  1. Sigstore Policy Controller 배포.
  2. 클러스터에 GitHub TrustRootClusterImagePolicy 추가.
  3. 네임스페이스에서 정책 활성화.

Sigstore Policy Controller 배포

Sigstore Policy Controller는 Helm chart를 통해 패키징되어 제공됩니다. 시작하기 전에 다음 사전 요구 사항이 있는지 확인하세요:

  • 버전 1.27 이상의 Kubernetes 클러스터
  • Helm 3.0 이상
  • kubectl

먼저 Sigstore Policy Controller를 배포하는 Helm chart를 설치하세요:

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 chart를 사용해 이 작업을 수행하세요. 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.7.0 \
 --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

이미지 매칭

기본적으로 trust-policies Helm chart로 설치된 정책은 모든 이미지에 대한 증명을 검증한 후 클러스터에 허용합니다. 이미지의 하위 집합에 대해서만 증명을 강제하려면 Helm 값 policy.imagespolicy.exemptImages를 사용해 매칭할 이미지 목록을 지정할 수 있어요. 이 값들은 이미지 이름과 일치하는 glob 패턴 목록으로 설정할 수 있습니다. Glob 구문은 슬래시를 포함한 임의의 문자 시퀀스와 일치하는 **가 추가된 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.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**.

허용하려는 모든 이미지는 policy.images 목록에 일치하는 glob 패턴이 있어야 합니다. 어떤 패턴과도 일치하지 않는 이미지는 거부됩니다. 또한 이미지가 policy.imagespolicy.exemptImages 모두에 일치하면 거부됩니다.

고급 사용법

Helm chart로 구성할 수 있는 전체 옵션 세트를 보려면 다음 명령 중 하나를 실행할 수 있어요. 정책 컨트롤러 옵션:

helm show values oci://ghcr.io/sigstore/helm-charts/policy-controller --version 0.10.5

신뢰 정책 옵션:

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

Sigstore Policy Controller에 대한 자세한 내용은 Sigstore Policy Controller documentation을 참고하세요.

더 알아보기 (Learn more)