Red Hat Training

A Red Hat training course is available for RHEL 8

8장. 컨테이너 이미지 서명

GPG(GNU 개인 정보 보호 ECDHE) 서명 또는 sigstore 서명을 사용하여 컨테이너 이미지에 서명할 수 있습니다. 두 서명 기술 모두 일반적으로 모든 OCI 호환 컨테이너 레지스트리와 호환됩니다. Podman을 사용하여 원격 레지스트리로 푸시하고 서명되지 않은 이미지가 거부되도록 소비자를 구성할 수 있습니다. 컨테이너 이미지에 서명하면 공급망 공격을 방지하는 데 도움이 됩니다.

GPG 키를 사용하여 서명하려면 별도의 조회 서버를 배포해야 합니다. lookaside 서버는 모든 HTTP 서버일 수 있습니다. Podman 버전 4.2부터 컨테이너 서명의 sigstore 형식을 사용할 수 있습니다. GPG 키와 비교하면 sigstore 서명이 컨테이너 레지스트리에 저장되므로 별도의 조회 서버가 필요하지 않습니다.

8.1. GPG 서명으로 컨테이너 이미지 서명

GPG(GNU 개인 정보 보호 ECDHE) 키를 사용하여 이미지에 서명할 수 있습니다.

사전 요구 사항

  • container-tools 모듈이 설치되어 있습니다.
  • GPG 툴이 설치되어 있어야 합니다.
  • lookaside 웹 서버가 설정되어 있으며 여기에 파일을 게시 할 수 있습니다.

    • /etc/containers/registries.d/default.yaml 파일에서 시스템 전체 레지스트리 구성을 확인할 수 있습니다. lookaside-staging 옵션은 서명 쓰기를 위한 파일 경로를 참조하며 일반적으로 서명을 게시하는 호스트에 설정됩니다.

      # cat /etc/containers/registries.d/default.yaml
      docker:
          <registry>:
              lookaside: https://registry-lookaside.example.com
              lookaside-staging: file:///var/lib/containers/sigstore
      ...

절차

  1. GPG 키를 생성합니다.

    # gpg --full-gen-key
  2. 공개 키를 내보냅니다.

    # gpg --output <path>/key.gpg --armor --export <username@domain.com>
  3. 현재 디렉터리에서 Containerfile 을 사용하여 컨테이너 이미지를 빌드합니다.

    $ podman build -t <registry>/<namespace>/<image>

    < registry > , < namespace > , < image >를 컨테이너 이미지 식별자로 바꿉니다. 자세한 내용은 컨테이너 레지스트리를 참조하십시오.

  4. 이미지에 서명하고 레지스트리에 푸시합니다.

     $  podman push \
        --sign-by <username@domain.com> \
        <registry>/<namespace>/<image>
    참고

    컨테이너 레지스트리에서 기존 이미지에 서명해야 하는 경우 skopeo copy 명령을 사용할 수 있습니다.

  5. 선택 사항: 새 이미지 서명을 표시합니다.

    # (cd /var/lib/containers/sigstore/; find . -type f)
    ./<image>@sha256=<digest>/signature-1
  6. 로컬 서명을 lookaside 웹 서버에 복사합니다.

    # rsync -a /var/lib/containers/sigstore <user@registry-lookaside.example.com>:/registry-lookaside/webroot/sigstore

서명은 lookaside-staging 옵션으로 결정된 위치에 저장됩니다(이 경우 /var/lib/containers/sigstore 디렉터리).

검증

추가 리소스