Cloud Build는 Google Cloud에서 빌드를 실행하는 서비스입니다.
Cloud Build는 다양한 저장소 또는 Cloud Storage 공간에서 소스 코드를 가져오고, 사양에 맞게 빌드를 실행하고, Docker 컨테이너 또는 자바 아카이브와 같은 아티팩트를 생성할 수 있습니다.
또한 Cloud Build를 사용하여 소프트웨어 공급망을 보호할 수 있습니다. Cloud Build 기능은 소프트웨어 아티팩트(SLSA) 수준 3의 공급망 수준 요구사항을 충족합니다. 빌드 프로세스 보호에 대한 안내는 빌드 보호를 참조하세요.
빌드 구성 및 빌드 단계
수행할 작업에 대한 지침을 Cloud Build에 제공하는 빌드 구성을 작성할 수 있습니다. 종속 항목을 가져오고, 단위 테스트, 정적 분석, 통합 테스트를 실행하고, docker, gradle, maven, bazel, gulp와 같은 빌드 도구로 아티팩트를 만들도록 빌드를 구성할 수 있습니다.
Cloud Build는 빌드를 일련의 빌드 단계로 실행합니다. 각 빌드 단계는 Docker 컨테이너에서 실행됩니다. 빌드 단계를 실행하는 것은 스크립트에서 명령을 실행하는 것과 유사합니다.
Cloud Build에서 제공하는 빌드 단계와 Cloud Build 커뮤니티를 사용하거나 커스텀 빌드 단계를 직접 작성할 수 있습니다.
Cloud Build에서 제공한 빌드 단계: Cloud Build는 일반적인 언어 및 작업에 지원되는 오픈소스 빌드 단계 모음을 게시했습니다.
커뮤니티에서 제공한 빌드 단계: Cloud Build 사용자 커뮤니티는 오픈소스 빌드 단계를 제공했습니다.
커스텀 빌드 단계: 빌드에 사용할 자체 빌드 단계를 생성할 수 있습니다.
각 빌드 단계는 cloudbuild
라는 로컬 Docker 네트워크에 연결된 컨테이너를 사용하여 실행됩니다. 따라서 빌드 단계가 서로 통신하고 데이터를 공유할 수 있습니다. cloudbuild
네트워크에 대한 자세한 내용은 Cloud Build 네트워크를 참조하세요.
Cloud Build에서 Ubuntu 및 Gradle 같은 표준 Docker Hub 이미지를 사용할 수 있습니다.
빌드 시작하기
Cloud Build에서 Google Cloud CLI 또는 Cloud Build API를 사용하거나 Cloud Build의 빌드 트리거를 이용해 빌드를 수동으로 시작하여, 코드가 변경되면 새 빌드를 시작하는 자동화된 지속적 통합/지속적 배포(CI/CD) 워크플로를 만들 수 있습니다.
Cloud Source Repositories, GitHub, Bitbucket을 비롯한 여러 코드 저장소와 빌드 트리거를 통합할 수 있습니다.
빌드 결과 보기
gcloud CLI 또는 Cloud Build API를 사용하여 빌드 결과를 보거나 Google Cloud Console의 Cloud Build 섹션에 있는 빌드 기록 페이지를 사용할 수 있습니다. 여기에는 Cloud Build에서 실행되는 모든 빌드에 대한 세부정보 및 로그가 표시됩니다. 자세한 내용은 빌드 결과 보기를 참조하세요.
빌드의 작동 방식
다음 단계에서는 Cloud Build 빌드의 수명 주기를 대략적으로 설명합니다.
- 애플리케이션 코드와 필요한 애셋을 준비합니다.
- Cloud Build에 대한 지침이 포함된 YAML 또는 JSON 형식의 빌드 구성 파일을 만듭니다.
- Cloud Build에 빌드를 제출합니다.
- Cloud Build는 사용자가 제공한 빌드 구성을 기반으로 빌드를 실행합니다.
- 해당하는 경우 빌드된 아티팩트가 Artifact Registry에 푸시됩니다.
Docker
Cloud Build는 Docker를 사용하여 빌드를 실행합니다. 각 빌드 단계에서 Cloud Build는 docker run
의 인스턴스로 Docker 컨테이너를 실행합니다. 현재 Cloud Build는 Docker 엔진 버전 20.10.24를 실행합니다.
Cloud Build 인터페이스
Google Cloud Console, gcloud
명령줄 도구 또는 Cloud Build의 REST API로 Cloud Build를 사용할 수 있습니다.
Google Cloud Console에서는 빌드 기록 페이지에서 Cloud Build 빌드 결과를 보고, 빌드 트리거에서 빌드를 자동화할 수 있습니다.
gcloud CLI를 사용하여 빌드를 만들고 관리할 수 있습니다. 명령어를 실행하여 빌드 제출, 빌드 나열, 빌드 취소 같은 작업을 수행할 수 있습니다.
Cloud Build REST API를 사용하여 빌드를 요청할 수 있습니다.
다른 Cloud Platform API와 마찬가지로 OAuth2를 사용하여 액세스 권한을 부여해야 합니다. 액세스 권한을 부여한 후에는 API를 사용하여 새 빌드를 시작하고, 빌드 상태 및 세부 정보를 볼 수 있으며, 프로젝트당 빌드 목록을 나열하고, 현재 진행 중인 빌드를 취소할 수 있습니다.
자세한 내용은 API 문서를 참조하세요.
기본 풀 및 비공개 풀
기본적으로 Cloud Build에서 빌드를 실행하면 빌드가 공개 인터넷에 액세스하는 안전한 호스팅 환경에서 실행됩니다. 각 빌드는 자체 작업자에서 실행되며 다른 워크로드로부터 격리됩니다. 머신 유형의 크기를 늘리거나 디스크 공간을 더 할당하는 등 여러 방법으로 빌드를 맞춤설정할 수 있습니다. 기본 풀에는 비공개 네트워크 액세스와 관련하여 환경을 맞춤설정할 수 있는 정도에 대한 제한이 있습니다.
비공개 풀은 비공개 네트워크의 리소스에 액세스하는 기능을 포함하여 빌드 환경을 더 효과적으로 맞춤설정할 수 있는 비공개 전용 작업자 풀입니다. 기본 풀과 마찬가지로 비공개 풀은 Cloud Build에 의해 호스팅되는 완전 관리형 풀이며 인프라를 설정하거나, 업그레이드하거나, 확장할 필요 없이 확장하고 0으로 축소할 수 있습니다. 비공개 풀은 고객별 리소스이므로 다양한 방식으로 구성할 수 있습니다.
비공개 풀과 기본 풀 및 비공개 풀의 기능 차이에 대한 자세한 내용은 비공개 풀 개요를 참조하세요.
빌드 보안
Cloud Build는 빌드를 보호하는 다음과 같은 여러 기능을 제공합니다.
자동 빌드
자동 빌드 또는 스크립트 빌드는 소스 코드 검색 단계와 코드 빌드 단계를 포함하여 빌드 스크립트 또는 빌드 구성의 모든 빌드 단계를 정의합니다. 수동 명령어가 있다면 빌드를 실행하는 명령어뿐입니다. Cloud Build는 빌드 구성 파일을 사용하여 Cloud Build에 빌드 단계를 제공합니다.
자동 빌드는 빌드 단계의 일관성을 제공합니다. 그러나 일관되고 신뢰할 수 있는 환경에서 빌드를 실행하는 것도 중요합니다.
로컬 빌드는 디버깅에 유용할 수 있지만 로컬 빌드에서 소프트웨어를 출시하면 빌드 프로세스에 많은 보안 문제, 비일관성, 비효율성이 발생할 수 있습니다.
- 로컬 빌드를 허용하면 악성 의도를 가진 공격자가 빌드 프로세스를 수정할 수 있는 방법이 제공됩니다.
- 개발자 로컬 환경과 개발자 관행의 비일관성으로 인해 빌드를 재현하고 빌드 문제를 진단하기가 어렵습니다.
SLSA 프레임워크 요구사항에서 자동 빌드는 SLSA 레벨 1의 요구사항이며 빌드에 개발자 환경 대신 빌드 서비스 사용은 SLSA 레벨 2의 요구사항입니다.
빌드 출처
빌드 출처는 빌드에 대한 검증 가능한 데이터 모음입니다.
출처 메타데이터에는 빌드된 이미지의 다이제스트, 입력 소스 위치, 빌드 도구 모음, 빌드 기간과 같은 세부정보가 포함됩니다.
빌드 출처를 생성하면 다음을 수행하는 데 도움이 됩니다.
- 빌드된 아티팩트가 신뢰할 수 있는 소스 위치 및 신뢰할 수 있는 빌드 시스템에서 생성되었는지 확인합니다.
- 신뢰할 수 없는 소스 위치 또는 빌드 시스템에서 삽입된 코드를 식별합니다.
알림 및 정책 메커니즘을 사용하여 빌드 출처 데이터를 사전에 사용할 수 있습니다. 예를 들어 확인된 소스에서 빌드된 코드 배포만 허용하는 정책을 만들 수 있습니다.
Cloud Build는 SLSA 수준 3 보증을 제공하는 컨테이너 이미지의 빌드 출처를 생성할 수 있습니다. 자세한 내용은 빌드 출처 보기를 참조하세요.
임시 빌드 환경
임시 환경은 단일 빌드 호출을 위해 지속되는 임시 환경입니다. 빌드 후에는 환경이 완전 삭제되거나 삭제됩니다. 임시 빌드는 빌드 서비스 및 빌드 단계가 컨테이너 또는 VM과 같은 임시 환경에서 실행되도록 합니다. 기존 빌드 환경을 재사용하는 대신 빌드 서비스는 각 빌드에 새로운 환경을 프로비저닝한 다음 빌드 프로세스가 완료되면 삭제합니다.
임시 환경에는 빌드 프로세스를 방해할 수 있는 이전 빌드의 잔여 파일 또는 환경 설정이 없으므로 클린 빌드를 보장합니다. 비임시 환경은 공격자가 악성 파일과 콘텐츠를 삽입할 수 있는 기회를 제공합니다. 또한 임시 환경은 유지보수 오버헤드를 줄이고 빌드 환경의 불일치를 줄여줍니다.
Cloud Build는 모든 빌드에 대해 새로운 가상 머신 환경을 설정하고 빌드 후에 폐기합니다.
배포 정책
Cloud Build를 Binary Authorization과 통합하여 빌드 증명을 확인하고 Cloud Build에서 생성되지 않은 이미지의 배포를 차단할 수 있습니다. 이 프로세스는 승인되지 않은 소프트웨어를 배포할 위험을 줄여줄 수 있습니다.
고객 관리 암호화 키
Cloud Build는 기본적으로 고객 관리 암호화 키(CMEK) 규정 준수를 제공합니다. 사용자가 특별히 구성할 사항은 없습니다. Cloud Build는 각 빌드에 대해 생성되는 임시 키로 빌드 시 영구 디스크(PD)를 암호화하여 CMEK 규정 준수를 제공합니다. 키는 빌드별로 고유하게 생성됩니다.
빌드가 완료되는 즉시 메모리에서 키가 지워지고 삭제됩니다. 키는 다른 위치에 저장되지 않으며, Google 엔지니어 또는 지원 담당자가 액세스할 수 없으며, 복원할 수도 없습니다. 이러한 키를 사용해서 보호되는 데이터는 영구적으로 액세스가 불가능합니다. 자세한 내용은 Cloud Build의 CMEK 규정 준수를 참조하세요.
보안 통계 패널
Cloud Build에는 여러 보안 측정항목에 대한 대략적인 개요를 표시하는 Google Cloud 콘솔의 보안 통계 패널이 있습니다. 이 패널을 사용하여 빌드 프로세스의 위험을 식별하고 완화할 수 있습니다.
이 패널에는 다음과 같은 정보가 표시됩니다.
SLSA(Supply-chain Levels for Software Artifacts) 수준: SLSA 사양에 따라 소프트웨어 빌드 프로세스의 성숙도 수준을 식별합니다.
취약점: 아티팩트에서 발견된 취약점 개요 및 Artifact Analysis로 검사한 이미지의 이름입니다. 이미지 이름을 클릭하여 취약점 세부정보를 볼 수 있습니다. 예를 들어 스크린샷에서 ava-guestbook-backend를 클릭할 수 있습니다.
빌드 세부정보: 빌더 및 로그 보기 링크와 같은 빌드 세부정보입니다.
빌드 출처: 빌드의 출처입니다.
다른 Google Cloud 제품 및 기능과 함께 Cloud Build를 사용하여 소프트웨어 공급망을 보호하는 방법을 알아보려면 소프트웨어 공급망 보안을 참고하세요.
다음 단계
- Docker 빠른 시작을 읽으면서 Cloud Build를 사용하여 Docker 이미지를 빌드하는 방법 알아보기.
- Cloud Build에서 아티팩트를 빌드, 테스트, 배포하는 방법 알아보기
- 여러 유형의 Cloud Build 트리거에 대해 알아보기
- DevOps 관련 리소스를 읽고 DevOps 연구 및 평가 연구 프로그램 살펴보기