연합 서명과 배포할 수 없는 그림을 가진 용기를 어떻게 보호합니까
10698 단어 securitykubernetesdevopscloudnative
배포할 수 없는 컨테이너 이미지는 무엇입니까?
배포할 수 없는 컨테이너 이미지는 운영 체제가 아닌 언어 중심 Docker 이미지입니다.이것은 응용 프로그램과 실행 시 의존 항목만 포함하고, 일반적인 운영체제 패키지 관리자, 리눅스 셸, 또는 표준 리눅스 버전에서 사용하고자 하는 모든 프로그램은 포함하지 않는다는 것을 의미합니다.기본 이미지가 없는 패키지는 해당 이미지의 패키지보다 작습니다.이것은 공격면을 감소시켰다. 공격을 받기 쉬운 부품이 더욱 적기 때문에 안전성을 높였다.
자료 출처: https://github.com/GoogleContainerTools/distroless
배포 컨테이너 이미지의 이점 없음:
응용 프로그램에 용기 이미지를 나누어 주고 연합 서명 검증을 진행합니다
Cosign은 구글이 sigstore라는 Linux 재단 프로젝트와 협력해 개발한 도구로 용기 이미지의 서명과 검증을 간소화하는 데 쓰인다.구글은 현재 게시할 수 없는 이 사진들에 Cosign이 서명했다고 발표했다.따라서 디스트로레스의 모든 사용자는 이미지 구축을 시작하기 전에 그들이 원하는 기본 이미지를 사용하고 있는지 확인하고 디스트로레스 이미지를 더욱 신뢰할 수 있음을 의미한다.
공통 공동 서명 워크플로우
배포할 수 없는 컨테이너 이미지와 함께 Cosign을 사용해야 하는 이유는 무엇입니까?
협동 서명이 필요한 이유는 배포할 수 없는 이미지를 사용해도 오삽 공격이나 악성 이미지 수신 등 보안 위협에 직면할 수 있기 때문이다.디스트로레스 구축 과정이 파괴되면 사용자는 실제 디스트로레스 이미지가 아닌 악성 이미지를 의외로 사용할 수 있습니다.
TypoShucking은 공격자가 악성 패키지를 등록표에 발표하여 유사한 패키지나 등록표/도메인 이름을 사용해서 설치하도록 유인하는 사회 공학 공격이다.
어떻게 여현과 배포할 수 없는 이미지를 사용하여 응용 프로그램 용기 이미지를 구축합니까?
Cosign verification을 사용하여 배포 컨테이너의 기본 이미지가 없는지 확인합니다.
분포 이미지 gcr의 검증이 없습니다.io/distroless/static이 게시자 Google과 공유하는 공동 서명 키입니다.이것은 이미지 메이킹 과정의 첫걸음이어야 한다.
$ cosign verify -key publisher-shared-cosign-pub.key gcr.io/distroless/static
Verification for gcr.io/distroless/static --The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key - Any certificates were verified against the Fulcio roots.{"critical":{"identity":{"docker- reference":"gcr.io/distroless/static"},"image":{"docker-manifest-digest":"sha256:c9320b754c2fa2cd2dea50993195f104a24f4c7ebe6e0297c6ddb40ce3679e7d"},"type":"cosign container image signature"},"optional":null}
공동 서명 검증을 거친 배포 기반 이미지가 없는 응용 프로그램 용기 이미지 구축
응용 프로그램 이미지를 배포할 수 없는 용기 이미지로 구축할 수 있는 몇 가지 방법이 있습니다.
FROM golang:1.15 as builder
COPY . /usr/local
WORKDIR /usr/local/
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w -extldflags "-static"' -o cmd/app
FROM gcr.io/distroless/static
USER nonroot:nonroot
COPY --from=builder --chown=nonroot:nonroot /usr/local/cmd/app /bin/app
ENTRYPOINT ["/bin/app"]
FROM golang:1.15 as builder
COPY . /usr/local
WORKDIR /usr/local/
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /bin/app
ENTRYPOINT ["/bin/app"]
FROM golang:1.15 as builderstage
COPY . /usr/local
WORKDIR /usr/local/
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o cmd/app
FROM ubuntu:21.04
COPY --from=builderstage /usr/local/cmd/app /bin/app
ENTRYPOINT ["/bin/app"]
다음 테마에서 Docker scan 보고서의 상세한 정보를 찾을 수 있습니다. 이 테마는 프로그램에서 Distorless 기본 이미지를 사용하는 중요성을 결정합니다.컨테이너 이미지 스캔: 컨테이너 이미지와 표준 컨테이너 이미지가 나누어지지 않음
Docker 기본 검색 도구 Synk를 사용했습니다. Docker 패키지의 업데이트 버전에서 사용할 수 있습니다.docker 명령을 사용하여 "docker scan image name"유틸리티를 사용할 수 있습니다.
이미지 스캔 보고서
정적 무실진 기본 이미지
알프스 산의 표준 기지 이미지
Ubuntu의 표준 기본 이미지로 사용
$docker scan local distroless:v1 로컬 distroless:v1을 테스트합니다.조직:jeswinjknPackage 관리자: 프로젝트 이름:docker 이미지 | 로컬 버전 docker 이미지:로컬 버전:v1Platform:linux/AMD64 라이센스:사용 가능✔ 알려진 문제 의존 항목 3개를 테스트했지만 공격받기 쉬운 경로를 찾지 못했습니다.
$docker scan 로컬 표준: v1 테스트 로컬 표준: v1.조직 기구:jeswinjknPackage 매니저:DEB 프로젝트 이름:docker image | 로컬 표준 docker image: 로컬 표준:v1Platform:linux/AMD64 허가증: 200개의 알려진 문제에 대한 의존항을 테스트하여 169개의 문제를 발견했습니다.
$docker가 로컬 ubuntu: v1을 스캔해서 로컬 ubuntu: v1을 테스트합니다.조직:jeswinjknPackage 매니저:deb Project name:docker image | local ubuntu Docker image:local ubuntu:v1 플랫폼:linux/AMD64 허가증:enabled Tested 103개의 알려진 문제 의존항, 12개의 문제 발견.
참고: Synk scan 전체 보고서는 참조 자료에서 찾을 수 있습니다.
Cosign을 사용하여 작성된 릴리스 없는 응용 프로그램 컨테이너 이미지에 서명합니다.
여현 키 쌍 생성
$ cosign generate-key-pair
Enter password for private key:
Enter again:
Private key written to cosign.key
Public key written to cosign.pub
로컬 구축된 용기 이미지를 등록표에 상세하게 표시하고 원격 등록표로 전송해야 합니다.생성된 개인 키를 사용하여 원격 용기 이미지에 서명합니다.
$ cosign sign -key cosign.key jeswinkninan/distroless:v1
Enter password for private key:
Pushing signature to: index.docker.io/jeswinkninan/distroless:sha256-41fd2ec0997d91c5df7c7d58d0a2433a5744119d79a803123541cdd2b0e93f08.sig
생성된 연합 서명 키 검증 프로그램 용기 이미지 사용하기
$ cosign verify -key cosign.pub jeswinkninan/distroless:v1
Verification for jeswinkninan/distroless:v1 --
The following checks were performed on each of these signatures:
- The cosign claims were validated
- The signatures were verified against the specified public key
- Any certificates were verified against the Fulcio roots.
{"critical":{"identity":{"docker-reference":"index.docker.io/jeswinkninan/distroless"},"image":{"docker-manifest- digest":"sha256:41fd2ec0997d91c5df7c7d58d0a2433a5744119d79a803123541cdd2b0e93f08"},"type":"cosign container image signature"},"optional":null}
요점
도구책
Reference
이 문제에 관하여(연합 서명과 배포할 수 없는 그림을 가진 용기를 어떻게 보호합니까), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jeswinkninan/how-to-secure-containers-with-cosign-and-distroless-images-420f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)