Argo CD 아티팩트 검증
Argo CD 아티팩트 검증 (Verification of Argo CD Artifacts)
Argo CD 릴리스의 CLI 바이너리, 컨테이너 이미지, SBOM 등의 아티팩트가 정품인지 서명과 증명(attestation)으로 검증하는 방법을 알아봐요. 소프트웨어 공급망 보안을 강화하려면 공식적으로 검증하는 습관이 중요하답니다.
출처: 문서
본문
사전 요구사항 (Prerequisites)
릴리스 아티팩트 (Release Assets)
| 아티팩트 | 설명 |
|---|---|
| argocd-darwin-amd64 | CLI 바이너리 |
| argocd-darwin-arm64 | CLI 바이너리 |
| argocd-linux_amd64 | CLI 바이너리 |
| argocd-linux_arm64 | CLI 바이너리 |
| argocd-linux_ppc64le | CLI 바이너리 |
| argocd-linux_s390x | CLI 바이너리 |
| argocd-windows_amd64 | CLI 바이너리 |
| argocd-cli.intoto.jsonl | CLI 바이너리 증명 |
| argocd-sbom.intoto.jsonl | SBOM 증명 |
| cli_checksums.txt | 바이너리 체크섬 |
| sbom.tar.gz | SBOM |
| sbom.tar.gz.pem | sbom 서명에 사용된 인증서 |
| sbom.tar.gz.sig | sbom 서명 |
컨테이너 이미지 검증 (Verification of container images)
Argo CD 컨테이너 이미지는 cosign으로 identity 기반("keyless") 서명과 투명성(transparency)을 사용해 서명돼요. 다음 명령을 실행하면 컨테이너 이미지의 서명을 검증할 수 있어요:
cosign verify \
--certificate-identity-regexp https://github.com/argoproj/argo-cd/.github/workflows/image-reuse.yaml@refs/tags/v \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-github-workflow-repository "argoproj/argo-cd" \
quay.io/argoproj/argocd:v2.11.3 | jq
컨테이너 이미지가 올바르게 검증되면 이 명령은 다음을 출력해야 해요:
The following checks were performed on each of these signatures:
- The cosign claims were validated
- Existence of the claims in the transparency log was verified offline
- Any certificates were verified against the Fulcio roots.
[
{
"critical": {
"identity": {
"docker-reference": "quay.io/argoproj/argo-cd"
},
"image": {
"docker-manifest-digest": "sha256:63dc60481b1b2abf271e1f2b866be8a92962b0e53aaa728902caa8ac8d235277"
},
"type": "cosign container image signature"
},
"optional": {
"1.3.6.1.4.1.57264.1.1": "https://token.actions.githubusercontent.com",
"1.3.6.1.4.1.57264.1.2": "push",
"1.3.6.1.4.1.57264.1.3": "a6ec84da0eaa519cbd91a8f016cf4050c03323b2",
"1.3.6.1.4.1.57264.1.4": "Publish ArgoCD Release",
"1.3.6.1.4.1.57264.1.5": "argoproj/argo-cd",
"1.3.6.1.4.1.57264.1.6": "refs/tags/<version>",
...
SLSA 증명으로 컨테이너 이미지 검증 (Verification of container image with SLSA attestations)
SLSA Level 3 provenance은 slsa-github-generator로 생성돼요.
다음 명령은 증명의 서명과 발급 방식을 검증해요. payloadType, payload, signature를 포함할 거예요.
slsa-verifier 문서에 따라 다음 명령을 실행하세요:
# Get the immutable container image to prevent TOCTOU attacks https://github.com/slsa-framework/slsa-verifier#toctou-attacks
IMAGE=quay.io/argoproj/argocd:v2.7.0
IMAGE="${IMAGE}@"$(crane digest "${IMAGE}")
# Verify provenance, including the tag to prevent rollback attacks.
slsa-verifier verify-image "$IMAGE" \
--source-uri github.com/argoproj/argo-cd \
--source-tag v2.7.0
소스 리포지토리 태그의 major 또는 minor 버전까지만 검증하려면(전체 태그 대신) 시맨틱 버전 검증을 수행하는 --source-versioned-tag을 사용하세요:
slsa-verifier verify-image "$IMAGE" \
--source-uri github.com/argoproj/argo-cd \
--source-versioned-tag v2 # Note: May use v2.7 for minor version verification.
증명 payload는 base64로 인코딩된 위조 불가능한(non-forgeable) provenance이며, 위 명령에 --print-provenance 옵션을 전달해 볼 수 있어요:
slsa-verifier verify-image "$IMAGE" \
--source-uri github.com/argoproj/argo-cd \
--source-tag v2.7.0 \
--print-provenance | jq
cosign을 선호한다면 다음 지침을 따르세요.
[!TIP]
cosign과slsa-verifier는 둘 다 이미지 증명 검증에 사용할 수 있어요. 각 바이너리의 문서에서 자세한 지침을 확인하세요.
SLSA 증명으로 CLI 아티팩트 검증 (Verification of CLI artifacts with SLSA attestations)
각 릴리스에서 단일 증명(argocd-cli.intoto.jsonl)이 제공돼요. 이것을 slsa-verifier와 함께 사용해 CLI 바이너리가 GitHub의 Argo CD 워크플로로 생성되었고 암호학적으로 서명되었는지 검증할 수 있어요.
slsa-verifier verify-artifact argocd-linux-amd64 \
--provenance-path argocd-cli.intoto.jsonl \
--source-uri github.com/argoproj/argo-cd \
--source-tag v2.7.0
소스 리포지토리 태그의 major 또는 minor 버전까지만 검증하려면 시맨틱 버전 검증을 수행하는 --source-versioned-tag을 사용하세요:
slsa-verifier verify-artifact argocd-linux-amd64 \
--provenance-path argocd-cli.intoto.jsonl \
--source-uri github.com/argoproj/argo-cd \
--source-versioned-tag v2 # Note: May use v2.7 for minor version verification.
payload는 base64로 인코딩된 위조 불가능한 provenance이며, 위 명령에 --print-provenance 옵션을 전달해 볼 수 있어요:
slsa-verifier verify-artifact argocd-linux-amd64 \
--provenance-path argocd-cli.intoto.jsonl \
--source-uri github.com/argoproj/argo-cd \
--source-tag v2.7.0 \
--print-provenance | jq
SBOM 검증 (Verification of Sbom)
각 릴리스에서 sbom(sbom.tar.gz)과 함께 단일 증명(argocd-sbom.intoto.jsonl)이 제공돼요. 이것을 slsa-verifier와 함께 사용해 SBOM이 GitHub의 Argo CD 워크플로로 생성되었고 암호학적으로 서명되었는지 검증할 수 있어요.
slsa-verifier verify-artifact sbom.tar.gz \
--provenance-path argocd-sbom.intoto.jsonl \
--source-uri github.com/argoproj/argo-cd \
--source-tag v2.7.0
Kubernetes에서의 검증 (Verification on Kubernetes)
정책 컨트롤러 (Policy controllers)
[!NOTE] 모든 사용자가 선택한 admission/policy 컨트롤러로 서명과 provenance를 검증할 것을 권장해요. 이렇게 하면 이미지가 Kubernetes 클러스터에 배포되기 전에 우리가 만든 이미지인지 검증할 수 있어요.
Cosign 서명과 SLSA provenance은 여러 유형의 admission 컨트롤러와 호환돼요. 지원되는 컨트롤러는 cosign 문서와 slsa-github-generator를 참고하세요.