반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 오퍼레이터
- knative
- Kopf
- serving
- opensearch
- tekton
- Argo
- Continuous Deployment
- Kubernetes
- mlops
- Kubernetes 인증
- opentelemetry
- operator
- CANARY
- argocd
- Model Serving
- kubernetes operator
- 카오스 엔지니어링
- argo rollout
- nginx ingress
- seldon core
- keda
- MLflow
- CI/CD
- Kubeflow
- gitops
- Litmus
- blue/green
- Pulumi
- gitea
Archives
- Today
- Total
Kubernetes 이야기
Cosign 으로 Container 이미지 서명하기 본문
반응형
Cosign
사용자가 만든 Container가 운영서버에 배포될때 변조 되지 않았음을 확인하는 것은 보안상 매우 중요한 일이다. Cosign 프로젝트는 OCI 레지스트리에서 컨테이너 서명, 확인 및 저장을 지원한다.
(https://github.com/sigstore/cosign)
원래 컨테이너 이미지에 서명하는 것으로 잘 알려진 솔루션은 Docker Content Trust/Notary이다. 하지만 필자가 여러 자료를 찾고 있을 당시에는 Docker enginge없이 DCT/Notary를 사용하여 컨테이너 이미지를 서명하고 서명한 이미지를 Kubernetes에서 로딩할 때 검사하는 구성이 지원되지 않기(?) 때문이다. ( 지원이 안되는 것인지 못 찾은 것인지는 잘 모르겠다. )
현재 Kubernetes는 Container runtime으로 Docker를 더 이상 지원하지 않기 때문에 보통 Container runtime으로 containerd 또는 CRI-O를 사용한다. 그렇게 때문에 Kubernetes 운영서버에서도 Docker engine을 굳이 설치하지 않아도 운영이 가능하기 때문에 DCT/Notary 구조 보다는 다른 방법을 찾아 보았다.
Cosign 에서 지원하는 OCI Registry는 다음과 같다.
AWS Elastic Container Registry
GCP's Artifact Registry and Container Registry
Docker Hub
Azure Container Registry
JFrog Artifactory Container Registry
The CNCF distribution/distribution Registry
GitLab Container Registry
GitHub Container Registry
The CNCF Harbor Registry
Digital Ocean Container Registry
Sonatype Nexus Container Registry
Alibaba Cloud Container Registry
시작하기
1. 설치
# wget https://github.com/sigstore/cosign/releases/download/v1.5.2/cosign-linux-amd64
# chmod +x cosign-linux-amd64
# mv cosign-linux-amd64 cosign
# mv cosign /usr/local/bin/.
2. 이미지 서명을 위한 Key-pair 생성
# cosign generate-key-pair
# ls -al
-rw-------. 1 root root 178 Feb 22 17:33 cosign.pub
-rw-------. 1 root root 649 Feb 22 17:33 cosign.key
key pair를 Kubernetes상에서 CI/CD 용도로 활용할 계획이면 아래와 같이 secret으로 관리가 가능핟.
# kubectl create ns image-sign
# cosign generate-key-pair k8s://image-sign/cosignkey
Enter password for private key:
Enter password for private key again:
Successfully created secret cosignkey in namespace image-sign
Public key written to cosign.pub
# kubectl get secret -n image-sign
NAME TYPE DATA AGE
cosignkey Opaque 3 14s
3. Container build
# buildah build-using-dockerfile -t ghcr.io/kmaster8/image-sign .
# podman push --tls-verify=false ghcr.io/kmaster8/image-sign
4. Container image signing
# cosign sign --insecure-skip-verify --allow-insecure-registry --key k8s://image-sign/cosignkey ghcr.io/kmaster8/image-sign
Pushing signature to: ghcr.io/kmaster8/image-sign
# cosign verify --allow-insecure-registry --key k8s://image-sign/cosignkey ghcr.io/kmaster8/image-sign
Verification for ghcr.io/kmaster8/image-sign:latest --
The following checks were performed on each of these signatures:
- The cosign claims were validated
- The signatures were verified against the specified public key
[{"critical":{"identity":{"docker-reference":"ghcr.io/kmaster8/image-sign"},"image":{"docker-manifest-digest":"sha256:989c6bb6eedf1933b459efe50d33250207e768bd12e443ae84bb9c774322210f"},"type":"cosign container image signature"},"optional":null}]
만약 signing이 안된 이미지를 검사하면 아래와 같이 나타난다.
cosign verify --allow-insecure-registry --key k8s://image-sign/cosignkey ghcr.io/kmaster8/image-nosign
Error: no matching signatures:
main.go:46: error during command execution: no matching signatures:
이미지 서명을 알아봤는데 다음 글에서 이제 서명된 이미지를 Kubernetes에서 pod로 실행 시 어떻게 검증 (verify) 하는지를 테스트해보겠다.
반응형
'Kubernetes > 보안' 카테고리의 다른 글
Kubernetes 에서 Vault 활용 (0) | 2022.03.14 |
---|---|
Kubernetes에서 Secret 암호화 (0) | 2022.03.13 |
trivy를 활용한 Container Image 취약성 검사 (3) | 2022.03.06 |
Kubernetes에서 Connaisseur 를 사용하여 이미지 서명 검증하기 (0) | 2022.02.22 |
Kyverno ( Kubernetes Policy) (0) | 2022.02.20 |
Comments