Docker Hardened Image 차트(Helm chart) 사용하기
Docker Hardened Image 차트(Helm chart) 사용하기
Docker가 제공하는 Helm 차트인 DHI 차트의 공급망 보안 기능과, 차트를 미러링하고 Kubernetes 시크릿을 만들며 차트를 설치하는 방법을 알아봐요.
출처: 문서
본문
Docker Hardened Image(DHI) 차트는 업스트림 소스에서 만든 Docker 제공 Helm 차트로, Docker Hardened Images와의 호환성을 위해 설계됐어요. 이 차트는 Docker Hub의 DHI 카탈로그에서 사용할 수 있어요.
DHI 차트는 업스트림 차트에는 없는 여러 계층의 공급망 보안을 통합해요.
- SLSA Level 3 준수: 각 차트는 상세한 빌드 provenance를 포함한 SLSA Build Level 3 표준으로 빌드됨
- 소프트웨어 자재명세서(SBOM): 포괄적인 SBOM이 차트 내에서 참조되는 모든 구성 요소를 상세히 설명함
- 암호화 서명: 모든 관련 메타데이터는 무결성과 정품성을 위해 Docker가 암호화 서명함
- 강화된 구성: 차트가 안전한 배포를 위해 자동으로 Docker Hardened Images를 참조함
- 테스트된 호환성: 차트는 Docker Hardened Images와 즉시 작동하도록 강력하게 테스트됨
DHI 차트는 OCI 레지스트리에 저장된 다른 Helm 차트처럼 사용할 수 있어요. Docker Hardened Images 구독이 있으면 커스터마이즈된 이미지와 미러링된 저장소를 참조하도록 DHI 차트를 커스터마이즈할 수도 있어요. 커스터마이즈된 차트 빌드 파이프라인은 커스터마이즈가 안전하게 빌드되고, 최신 베이스 차트를 사용하며, attestation을 포함하도록 보장해요.
Helm 차트 및/또는 이미지를 서드파티 레지스트리로 미러링하기
자체 서드파티 레지스트리로 미러링하려면 Mirror a Docker Hardened Image repository 문서의 지침을 차트, 이미지, 또는 둘 다에 대해 따라가면 돼요.
컨테이너 이미지 미러링에 사용하는 동일한 regctl 도구는 Helm 차트가 OCI 아티팩트이므로 Helm 차트 미러링에도 사용할 수 있어요.
예를 들면:
regctl image copy \
"${SRC_CHART_REPO}:${TAG}" \
"${DEST_REG}/${DEST_CHART_REPO}:${TAG}" \
--referrers \
--referrers-src "${SRC_ATT_REPO}" \
--referrers-tgt "${DEST_REG}/${DEST_CHART_REPO}" \
--force-recursive
이미지 풀용 Kubernetes 시크릿 만들기
dhi.io, Docker Hub, 또는 자체 레지스트리에서 이미지를 풀하려면 Kubernetes 시크릿을 만들어야 해요. Docker Hardened Image 저장소가 인증을 요구하기 때문이에요. 이미지를 자체 레지스트리로 미러링하더라도, 레지스트리가 인증을 요구하면 여전히 이 시크릿을 만들어야 해요.
-
dhi.io또는 Docker Hub의 경우 Docker 계정으로 personal access token(PAT)을 만들거나 organization access token(OAT)을 만들어요. 토큰이 Docker Hardened Image 저장소에 대해 최소한 읽기 전용 접근 권한을 가져야 해요. -
다음 명령을 사용해 Kubernetes에 시크릿을 만들어요.
<your-secret-name>,<your-username>,<your-personal-access-token>,<your-email>을 자신의 값으로 바꿔요.[!NOTE]
DHI를 사용하는 각 Kubernetes 네임스페이스에 이 시크릿을 만들어야 해요. DHI를 다른 레지스트리로 미러링했다면
dhi.io를 레지스트리 호스트 이름으로 바꿔요.<your-username>,<your-access-token>,<your-email>을 자신의 값으로 바꿔요.<your-username>은 PAT를 사용하면 Docker ID, OAT를 사용하면 조직 이름이에요.<your-secret-name>은 시크릿에 대해 선택한 이름이에요.$ kubectl create secret docker-registry <your-secret-name> \ --docker-server=dhi.io \ --docker-username=<your-username> \ --docker-password=<your-access-token> \ --docker-email=<your-email>예를 들면:
$ kubectl create secret docker-registry dhi-pull-secret \ --docker-server=dhi.io \ --docker-username=docs \ --docker-password=dckr_pat_12345 \ [email protected]
Helm 차트 설치하기
Docker Hardened Images에서 Helm 차트를 설치하려면:
-
Helm으로 레지스트리에 로그인해요.
$ echo $ACCESS_TOKEN | helm registry login dhi.io --username <your-username> --password-stdin<your-username>을 바꾸고$ACCESS_TOKEN을 설정해요. -
helm install을 사용해 차트를 설치해요. 선택적으로--dry-run플래그를 사용해 실제로 설치하지 않고 설치를 테스트할 수도 있어요.$ helm install <release-name> oci://dhi.io/<helm-chart-repository> --version <chart-version> \ --set "imagePullSecrets[0].name=<your-secret-name>"<helm-chart-repository>와<chart-version>을 그에 맞게 바꿔요. 차트가 자체 레지스트리나 다른 저장소에 있다면dhi.io/<helm-chart-repository>를 자신의 위치로 바꿔요.<your-secret-name>을 Kubernetes 시크릿 만들기에서 만든 이미지 풀 시크릿 이름으로 바꿔요.
Helm 차트 커스터마이즈하기
Docker Hardened Image Helm 차트를 커스터마이즈된 이미지와 미러링된 저장소를 참조하도록 커스터마이즈할 수 있어요. 자세한 내용은 Customize Docker Hardened Images and charts 문서를 봐요.
Helm 차트 검증 및 attestation 보기
Helm 차트를 검증할 수 있어요. 자세한 내용은 Verify Helm chart attestations 문서를 봐요.