환경 준비

Image Builder 파이프라인을 만들기 전에 먼저 Cloud de Confiance 환경을 준비해야 합니다. 환경을 준비하려면 다음 작업을 완료하세요.

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Cloud de Confiance by S3NS 서비스 및 API에 액세스하기 위해 ID를 확인합니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 Compute Engine에 인증하면 됩니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Cloud de Confiance 콘솔을 사용하여 Cloud de Confiance by S3NS 서비스 및 API에 액세스하는 경우 인증을 설정할 필요가 없습니다.

    gcloud

    1. Google Cloud CLI를 설치한 후 제휴 ID로 gcloud CLI에 로그인합니다. 로그인한 후 다음 명령어를 실행하여 Google Cloud CLI를 초기화합니다.

      gcloud init
  • 기본 리전 및 영역을 설정합니다.
  • REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치한 후 제휴 ID로 gcloud CLI에 로그인합니다.

    자세한 내용은 Cloud de Confiance 인증 문서의 REST 사용을 위한 인증을 참조하세요.

필요한 역할

환경을 준비하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

  • 서비스 사용량 관리자(roles/serviceusage.serviceUsageAdmin)
  • 프로젝트 ID 및 액세스 관리 (IAM) 관리자 (roles/resourcemanager.projectIamAdmin) 또는 서비스 계정 관리자 (roles/iam.serviceAccountAdmin)
  • Artifact Registry 관리자(roles/artifactregistry.admin)

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

온보딩 요청

Image Builder는 허용 목록 추가 방식으로 정식 제공되고 있습니다. 이미지 맞춤설정 파이프라인에 Cloud de Confiance 프로젝트를 온보딩하려면 액세스 요청 양식을 제출하거나 Cloud de Confiance 계정팀에 문의하세요.

API 사용 설정

Image Builder를 사용하려면 Compute Engine, Cloud Build, Artifact Registry, 서비스 사용량, Resource Manager API를 사용 설정해야 합니다. Cloud de Confiance 콘솔 또는 Google Cloud CLI를 사용하여 API를 사용 설정하려면 다음 탭 중 하나를 선택하세요.

콘솔

Compute Engine, Cloud Build, Artifact Registry, 서비스 사용량, Cloud Resource Manager API를 사용 설정합니다.

API 사용 설정에 필요한 역할

API를 사용 설정하려면 serviceusage.services.enable 권한이 필요합니다. 프로젝트를 만든 경우 소유자 역할 (roles/owner)을 통해 이 권한이 이미 있을 수 있습니다. 그렇지 않으면 서비스 사용량 관리자 역할 (roles/serviceusage.serviceUsageAdmin)을 통해 이 권한을 얻을 수 있습니다. 역할을 부여하는 방법 알아보기

API 사용 설정

gcloud

Compute Engine, Cloud Build, Artifact Registry, 서비스 사용량, Cloud Resource Manager API를 사용 설정합니다.

API 사용 설정에 필요한 역할

API를 사용 설정하려면 serviceusage.services.enable 권한이 필요합니다. 프로젝트를 만든 경우 소유자 역할 (roles/owner)을 통해 이 권한이 이미 있을 수 있습니다. 그렇지 않으면 서비스 사용량 관리자 역할 (roles/serviceusage.serviceUsageAdmin)을 통해 이 권한을 얻을 수 있습니다. 역할을 부여하는 방법 알아보기

gcloud services enable compute.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com serviceusage.googleapis.com cloudresourcemanager.googleapis.com

Image Builder 서비스 계정 구성

Image Builder 오케스트레이터는 사용자 관리형 서비스 계정을 사용하여 실행됩니다. 이미지 빌드 파이프라인을 실행하면 Cloud Build가 이 서비스 계정을 임시 작업자 VM 및 테스트 VM 인스턴스에 연결하여 맞춤설정 및 검증 작업을 실행합니다. 이 서비스 계정에는 다음 역할이 필요합니다.

  • Compute 관리자 (roles/compute.admin): VM 인스턴스, 영구 디스크, 게스트 OS 이미지를 관리합니다.
  • 서비스 계정 사용자 (roles/iam.serviceAccountUser): Cloud Build가 서비스 계정을 임시 작업자 및 테스트 VM 인스턴스에 연결할 수 있습니다.
  • 스토리지 관리자 (roles/storage.admin): Cloud Storage workdir 스테이징 버킷에서 임시 빌드 아티팩트와 로그를 읽고 씁니다.
  • Logging 로그 작성자 (roles/logging.logWriter): 실행 로그를 Cloud Logging에 작성합니다.
  • 서비스 사용량 뷰어 (roles/serviceusage.serviceUsageViewer): 파이프라인 실행 중에 프로젝트 서비스 상태를 확인합니다.
  • Cloud Build 편집자 (roles/cloudbuild.builds.editor): Cloud Build 작업을 트리거하고 실행하며 이미지를 내보냅니다.
  • (선택사항) Artifact Registry 관리자 (roles/artifactregistry.admin): 생성된 OS 이미지 tar 파일을 Artifact Registry에 업로드합니다.

기존 서비스 계정을 사용하거나 빌드 파이프라인을 위한 새 전용 서비스 계정을 만들 수 있습니다. Cloud de Confiance 콘솔 또는 gcloud CLI를 사용하여 새 전용 서비스 계정을 만들고 필요한 역할을 부여하려면 다음 탭 중 하나를 선택하세요.

콘솔

    서비스 계정 만들기 IAM 역할(roles/iam.serviceAccountCreator) 및 프로젝트 IAM 관리자 역할(roles/resourcemanager.projectIamAdmin)이 있는지 확인합니다. 역할을 부여하는 방법 알아보기
  1. Cloud de Confiance 콘솔에서 서비스 계정 만들기 페이지로 이동합니다.

    서비스 계정 만들기로 이동
  2. 프로젝트를 선택합니다.
  3. 서비스 계정 이름 필드에 이름을 입력합니다. Cloud de Confiance 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다.

    서비스 계정 설명 필드에 설명을 입력합니다. 예를 들면 Service account for quickstart입니다.

  4. 만들고 계속하기를 클릭합니다.
  5. 서비스 계정에 다음 역할을 부여합니다. Compute Engine > Compute 관리자, 서비스 계정 > 서비스 계정 사용자, Cloud Storage > 스토리지 관리자, Cloud Logging > 로그 작성자, 서비스 사용 > 서비스 사용량 보기 권한, Cloud Build > Cloud Build 편집자, Artifact Registry > Artifact Registry 관리자

    역할을 부여하려면 역할 선택 목록을 찾은 후 역할을 선택합니다.

    역할을 추가로 부여하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.

  6. 계속을 클릭합니다.
  7. 서비스 계정 사용자 역할 필드에 서비스 계정을 Compute Engine 인스턴스와 같은 다른 리소스에 연결할 주 구성원의 식별자를 입력합니다.

    일반적으로 직원 ID 풀의 사용자 식별자입니다. 자세한 내용은 IAM 정책에서 직원 풀 사용자 표현을 참고하세요.

  8. 완료를 클릭하여 서비스 계정 만들기를 마칩니다.

gcloud

  1. 빌드 파이프라인의 서비스 계정을 만듭니다.

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --display-name="Image Builder Service Account"
    
  2. 서비스 계정에 필요한 역할 (roles/compute.admin, roles/iam.serviceAccountUser, roles/storage.admin, roles/logging.logWriter, roles/serviceusage.serviceUsageViewer, roles/cloudbuild.builds.editor)을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/compute.admin"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/iam.serviceAccountUser"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/storage.admin"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/logging.logWriter"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/serviceusage.serviceUsageViewer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/cloudbuild.builds.editor"
    
  3. 선택사항: 서비스 계정에 선택적 역할 (roles/artifactregistry.admin)을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/artifactregistry.admin"
    

다음을 바꿉니다.

  • SERVICE_ACCOUNT_NAME: 만들 빌드 서비스 계정의 이름입니다. 예를 들면 custom-builder-sa입니다.
  • PROJECT_ID: Cloud de Confiance 프로젝트 ID입니다.
  • SERVICE_ACCOUNT_EMAIL: 빌드 서비스 계정의 이메일 주소입니다.

신뢰할 수 있는 이미지 조직 정책 구성

이미지 빌더는 빌드 실행 중에 내부적으로 표준 Compute Engine 이미지 가져오기 및 내보내기 도구를 사용하므로 프로젝트의 신뢰할 수 있는 이미지 정책 (compute.trustedImageProjects)에서 다음 프로젝트의 이미지를 명시적으로 허용해야 합니다.

  • projects/compute-image-import

조직 정책에서 이 프로젝트를 제한하는 경우 이미지 내보내기 단계가 실패합니다.

조직 정책을 업데이트하려면 다음 단계를 따르세요.

  1. compute.trustedImageProjects 제약 조건의 조직 정책에서 허용된 게시자 목록에 projects/compute-image-import를 추가합니다.
  2. 조직 정책 제약 조건을 구성하는 방법에 관한 자세한 안내는 신뢰할 수 있는 이미지 정책 설정커스텀 이미지를 Cloud Storage로 내보내기를 참고하세요.

VPC 네트워크 및 액세스 요구사항 구성

빌드 및 검증 단계에서 Image Builder는 Cloud de Confiance 프로젝트에 임시 작업자 및 테스트 VM을 프로비저닝합니다. 기본적으로 Image Builder는 인스턴스를 default VPC 네트워크에 연결하고 임시 외부 IP 주소를 할당합니다.

imagebuilder.yaml 레시피 파일에서 맞춤 network 또는 subnetwork를 지정하거나 externalIP: none를 구성하는 경우:

  • 비공개 Google 액세스 및 Cloud NAT: 작업자 또는 테스트 VM이 externalIP: none (외부 IP 없음)로 구성된 경우 인스턴스가 Google API 및 서비스 (예: Cloud Storage 및 Artifact Registry)에 연결할 수 있도록 VPC 서브네트워크에 비공개 Google 액세스가 사용 설정되어 있어야 합니다. 맞춤설정 단계에서 외부 인터넷 저장소에서 OS 패키지 또는 종속 항목을 다운로드하는 경우 서브넷에서 Cloud NAT도 구성해야 합니다.
  • 방화벽 규칙: VPC 방화벽 규칙이 Google API 및 필요한 소프트웨어 저장소로의 이그레스 트래픽을 허용하는지 확인합니다. 활성 작업자 VM에 연결하여 대화형 디버깅(debug: true)을 하려는 경우 방화벽 규칙이 TCP 포트 22에서 인그레스를 허용하는지 확인하세요. VM 인스턴스에 외부 IP가 없는 경우 TCP 전달을 위해 Identity-Aware Proxy (IAP) IP 범위 35.235.240.0/20에서 인그레스를 허용합니다.

Artifact Registry 구성

커스텀 OS 이미지, 보안 메타데이터, SLSA 빌드 출처 증명을 저장하고 관리하려면 Artifact Registry에 일반 저장소를 설정해야 합니다. Artifact Registry에 이미지를 저장하면 게시된 이미지의 안전하고 변경할 수 없는 기록을 유지할 수 있습니다.

Artifact Registry 대상을 구성하면 Image Builder는 다음 단계를 실행합니다.

  • 완료된 VM 부팅 디스크를 표준 tar 파일 (.tar.gz)로 내보냅니다.
  • Artifact Registry의 일반 저장소에 tar 파일을 업로드합니다.
  • 아티팩트의 SLSA 빌드 출처 기록 증명을 생성하고 서명하여 소스 메타데이터에 연결합니다.
  • Artifact Registry tar 파일 URI를 템플릿 소스로 사용하여 프로덕션 준비가 완료된 Compute Engine 이미지를 Compute Engine에 등록합니다.

일반 Artifact Registry를 구성하려면 다음 작업을 완료하세요.

  1. Image Builder 파이프라인을 실행하는 데 사용되는 서비스 계정에 저장소 또는 프로젝트 수준에서 Artifact Registry 관리자 역할(roles/artifactregistry.admin)이 있는지 확인합니다. 자세한 내용은 Image Builder 서비스 계정 구성을 참고하세요.

  2. generic 형식의 저장소를 만듭니다. 저장소를 만들려면 gcloud artifacts repositories create 명령어를 실행합니다.

    gcloud artifacts repositories create REPOSITORY_NAME \
        --repository-format=generic \
        --location=REPOSITORY_LOCATION
    

    다음 자리표시자를 바꿉니다.

    • REPOSITORY_NAME: 일반 저장소의 이름입니다. 예를 들면 custom-os-images입니다.
    • REPOSITORY_LOCATION: 지원되는 리전 예를 들면 us-central1입니다.

다음 단계