보안 이미지 파이프라인 만들기

이 페이지에서는 기본 컨테이너 이미지 생성을 자동화하도록 보안 이미지 파이프라인을 설정하는 방법을 설명합니다.

개요

보안 이미지 파이프라인은 맞춤 설정된 보안 기본 이미지를 만들고 유지보수하기 위해 사용할 수 있는 Google Cloud 프로젝트, 리소스, GitHub 저장소의 프레임워크를 설정하는 오픈소스 도구입니다. Google Cloud 프로젝트의 이미지를 사용할 수 있습니다.

다음 이미지는 보안 이미지 파이프라인으로 생성된 리소스 프레임워크를 보여줍니다.

보안 이미지 파이프라인

파이프라인을 설정하면 다음 리소스가 생성됩니다.

  • 컨테이너 이미지에 대해 소스 코드를 호스팅하는 GitHub 저장소입니다.

  • 세 가지 Google Cloud 프로젝트인 빌드 프로젝트, 스테이징 프로젝트, 확인된 프로젝트입니다. 이미지 저장소에서 이미지가 업데이트될 때마다 빌드 프로젝트의 Cloud Build 트리거가 업데이트된 이미지를 빌드 및 서명하고 스테이징 프로젝트의 Artifact Registry 저장소에 푸시합니다. 스테이징 프로젝트의 이미지가 수동으로 확인된 뒤에는 파이프라인이 이미지를 확인된 프로젝트에 게시합니다.

비용

보안 이미지 파이프라인은 다음 Google Cloud 제품을 사용합니다.

가격 계산기를 사용하면 예상 사용량을 토대로 예상 비용을 산출할 수 있습니다.

시작하기 전에

필수 IAM 권한

보안 이미지 파이프라인을 설정하는 사용자는 Google Cloud 조직에 대해 roles/organization.adminroles/billing.admin Identity and Access Management 역할이 필요합니다. IAM 역할 부여에 대한 안내는 액세스 권한 부여, 변경, 취소를 참조하세요.

보안 이미지 파이프라인 설정

보안 이미지 파이프라인 GitHub 저장소에는 기본 이미지 생성을 자동화하기 위한 스크립트가 포함되어 있습니다.

보안 이미지 파이프라인을 설정하려 다음 안내를 따르세요.

  1. 보안 이미지 파이프라인 GitHub 저장소를 로컬 머신에 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/secure-image-pipeline
    
  2. secure-image-pipeline 디렉터리로 이동합니다.

    cd secure-image-pipeline/
    
  3. env.sh.tmplenv.sh에 복사합니다.

    cp env.sh.tmpl env.sh
    
  4. 원하는 편집기에서 env.sh를 엽니다.

  5. 다음 값을 수정합니다.

    • PARENT_ORGANIZATION: Google Cloud 조직의 ID를 입력합니다. 보안 이미지 파이프라인 스크립트는 이 조직을 사용해서 Google Cloud 프로젝트 및 기본 이미지를 생성합니다.
    • BASEIMGFCT_PROJECT: 생성되는 프로젝트의 프로젝트 ID를 생성하는 스크립트를 사용해서 문자열을 입력합니다. 문자열은 6~30자의 소문자, 숫자, 하이픈이어야 합니다. 문자로 시작해야 하며 뒤에 하이픈이 오면 안 됩니다. 예를 들어 foo라고 지정하면 스크립트가 ID가 foo-builder, foo-stage, foo-verified인 3개의 프로젝트를 만듭니다.
    • BASEIMGFCT_BUCKET: Terraform 자동화 코드 저장을 위해 스크립트가 만드는 Cloud Storage 버킷의 이름을 입력합니다. 이름이 버킷 이름 지정 요구사항을 충족하는지 확인합니다.
    • BASEIMGFCT_REGION: 사용할 리전의 이름을 입력하거나 기본값을 사용합니다.
    • BILLING_ACCOUNT: 조직과 연관된 청구 계정을 입력합니다.
    • GITHUB_TOKEN: GitHub 개인 액세스 토큰을 입력합니다. 스크립트가 이 토큰을 사용해서 기본 이미지의 소스 코드가 포함된 GitHub 저장소를 만듭니다.
  6. 설치 스크립트를 실행합니다.

    ./setup.sh
    
  7. 메시지가 표시되면 다음 GitHub 계정 정보를 입력합니다.

    1. GitHub 조직의 이름입니다.

    2. GitHub 이메일 주소입니다.

    3. GitHub 사용자 이름입니다.

    4. 기본 이미지를 저장할 새 프로젝트를 만들 수 있는 권한을 스크립트에 부여합니다.

    5. 'y'를 입력합니다.

    이 작업을 실행하는 데 몇 분 정도 걸립니다. 완료되면 GitHub 저장소를 연결하고 아무 키나 눌러 계속 진행하세요라는 메시지가 표시됩니다.

  8. 계속하려면 아무 키나 누르세요.

    스크립트가 GitHub 저장소를 Google Cloud 프로젝트와 연결하기 위해 새 Google Cloud 콘솔 브라우저 창을 엽니다.

  9. Cloud 콘솔 브라우저 창으로 전환합니다.

  10. GitHub 앱 설치 관리 팝업에서 GitHub 계정을 선택합니다.

  11. 다른 프로젝트 추가를 클릭합니다.

  12. 프로젝트 선택 드롭다운에서 YOUR_PROJECT_NAME-builder 형식의 프로젝트를 선택합니다.

  13. 동의 체크박스를 선택하고 다음을 클릭합니다.

  14. 저장소 목록에서 baseimgfact-[some number]-containers라는 저장소를 선택하고 (1) 저장소 연결을 클릭합니다.

  15. 푸시 트리거 만들기 페이지에서 건너뛰기를 클릭합니다. 스크립트가 푸시 트리거를 자동으로 만듭니다.

  16. 완료를 클릭합니다.

  17. 터미널로 돌아갑니다.

  18. 계속하려면 아무 키나 누르세요.

스크립트 실행을 완료하려면 몇 분 정도 걸립니다.

보안 이미지 파이프라인에서 생성한 리소스

설정 스크립트 실행이 완료되면 다음 리소스가 생성됩니다.

GitHub

  • 컨테이너 이미지 생성에 사용되는 소스 코드가 포함된 baseimgfct-[some number]-containers라는 저장소입니다. setup 스크립트는 널리 사용되는 각 Linux 배포판에 하나씩 간단한 Dockerfile로 이 저장소를 시드로 배정합니다.
  • 배포 키 - 저장소에 대한 개별 쓰기 액세스 배포 키입니다.

Google Cloud 프로젝트

  • GitHub 저장소에서 소스 코드가 업데이트될 때마다 이미지를 빌드하고 스테이징 프로젝트에 푸시할 리소스가 포함된 YOUR_PROJECT_NAME-builder라는 Google Cloud 프로젝트입니다.

    이 프로젝트에는 baseimgfct-[some number]-containers의 기본 분기에서 pull 요청 또는 병합을 수행할 때 빌드를 호출하는 Cloud Build 트리거가 포함됩니다. pull 요청은 이미지를 빌드하고 스테이징 프로젝트에 푸시합니다. 병합은 이미지를 빌드하고 확인된 프로젝트에 푸시합니다.

    YOUR_PROJECT_NAME-builder에 대한 IAM 권한: 파이프라인을 변경할 것으로 예상되는 팀 구성원에게만 이 프로젝트에 대한 액세스 권한을 부여하는 것이 좋습니다. 프로젝트에 액세스 권한 부여에 대한 자세한 내용은 액세스 권한 부여, 변경, 취소를 참조하세요.

  • 이미지가 확인된 프로젝트에 릴리스되기 전 수동 검토를 위해 이미지를 스테이징하는 데 사용된 YOUR_PROJECT_NAME-stage라는 Google Cloud 프로젝트입니다. 이 프로젝트에는 다음 리소스가 포함됩니다.

    • 빌드된 컨테이너 이미지가 포함된 Artifact Registry Docker 저장소
    • 프로젝트에서 각 이미지의 Cloud Functions(알려진 취약점에 대한 새로운 해결 방법이 발견될 때마다 이미지 재빌드를 트리거)
    • Cloud Functions를 실행하는 데 사용되는 Pub/Sub 주제
    • Cloud Run 배포로 실행되는 Voucher 서버의 인스턴스입니다. Voucher 서버는 보안 정책 요구사항 목록을 사용해서 이미지를 검사합니다. 파이프라인과 함께 제공되는 기본 정책 요구사항을 사용하거나 맞춤설정된 보안 정책을 지정할 수 있습니다. 보안 검사가 통과한 후 Voucher 서버가 Binary Authorization을 사용하여 이미지에 대한 증명을 만듭니다. 그런 후 서명된 이미지라고도 부르는 이 증명된 이미지가 확인된 프로젝트에 푸시됩니다.

    YOUR_PROJECT_NAME-stage에 대한 IAM 권한: Artifact Registry에서 스테이징된 이미지를 읽도록 허용된 개발자에게만 이 프로젝트에 대한 액세스 권한을 부여하는 것이 좋습니다. 프로젝트에 액세스 권한 부여에 대한 자세한 내용은 액세스 권한 부여, 변경, 취소를 참조하세요.

  • YOUR_PROJECT_NAME-verified라는 Google Cloud 프로젝트입니다. 이 프로젝트에는 수동으로 검토된 최종 서명된 이미지가 포함됩니다.

다음 단계