VPC 서비스 제어 사용

VPC 서비스 제어는 데이터 무단 반출을 방지하기 위해 보안 경계를 설정할 수 있는 Cloud Run Functions Google Cloud 기능입니다. 이 페이지에서는 Cloud Build 비공개 풀에 VPC 서비스 제어를 사용하여 빌드에 보안을 추가하는 방법을 보여줍니다.

시작하기 전에

  • 이 가이드에서 명령줄 예시를 사용하려면 Google Cloud CLI를 설치하고 구성합니다.

  • Virtual Private Cloud 네트워크와 비공개 풀이 있는 VPC 네트워크 간에 비공개 연결을 설정합니다. 자세한 내용은 비공개 풀을 만들기 위한 환경 설정을 참조하세요.

  • 서비스 경계 내에서 실행되는 빌드는 기본 Cloud Storage 로그 버킷의 빌드 로그를 저장할 권한이 없습니다. 빌드를 실행하기 전에 다음 옵션 중 하나를 사용하여 빌드 구성 파일을 설정합니다.

  • 빌드가 다른 Google Cloud 프로젝트의 Artifact Registry 또는 Cloud Storage에 이미지 및 아티팩트를 푸시하는 경우 빌드가 시작된 프로젝트와 동일한 서비스 경계에 해당 프로젝트를 추가합니다.

  • 선택사항: 머신 유형 구성 및 지역별 가용성을 숙지합니다. 자세한 내용은 비공개 풀 구성 파일 스키마 문서의 workerconfig을 참고하세요.

서비스 경계를 설정하는 데 필요한 권한을 얻으려면 관리자에게 서비스 계정에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

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

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

VPC 서비스 제어 경계에 비공개 풀 설정

Cloud Build에서 VPC 서비스 제어를 사용하려면 먼저 조직 수준에서 수행되는 서비스 경계를 만들고 구성해야 합니다. 이 설정을 사용하면 Cloud Build를 사용할 때 VPC 서비스 제어 검사가 시행되며 개발자는 VPC 서비스 제어를 준수하는 빌드만 실행할 수 있습니다.

VPC 서비스 제어 경계 만들기

VPC 서비스 제어 빠른 시작에 따라 다음을 수행합니다.

  1. 서비스 경계를 만듭니다.
  2. 비공개 풀을 만들려는 프로젝트를 경계에 추가합니다.

  3. Cloud Build API를 제한합니다.

서비스 경계를 설정한 후 Cloud Build API에 대한 모든 호출이 동일한 경계 내에서 발생한 호출인지 검사합니다.

서비스 계정에 VPC 서비스 제어 경계에 대한 액세스 권한 부여

다음과 같은 경우에는 빌드가 경계 내 리소스에 액세스할 수 있도록 VPC 서비스 제어 경계에 액세스할 수 있는 권한을 기존 Cloud Build 또는 Compute Engine 서비스 계정에 부여해야 합니다.

  • 기존 Cloud Build 또는 Compute Engine 서비스 계정을 사용하여 빌드 트리거, Cloud Build API 또는 명령줄로 빌드를 시작하는 경우

  • 사용자 지정 서비스 계정을 사용하여 빌드 트리거로 빌드를 시작하는 경우

Cloud Build API 또는 명령줄을 사용하여 빌드를 시작하기 위해 사용자 지정 서비스 계정을 사용하는 경우 VPC 서비스 제어 경계에 액세스할 수 있는 권한을 기존 Cloud Build 또는 Compute Engine 서비스 계정에 부여할 필요가 없습니다.

다음 단계를 수행하여 VPC 서비스 제어 경계에 대해 기존 Cloud Build 또는 Compute Engine 서비스 계정에 액세스 권한을 부여합니다.

  1. 기존 서비스 계정의 이메일 주소를 확인합니다.

    1. IAM 페이지 열기:

      IAM 페이지 열기

    2. 서비스 경계에 추가한 프로젝트를 선택합니다.

    3. 권한 테이블에서 기존 Cloud Build 서비스 계정에 해당하는 이메일 주소를 찾습니다.

  2. 서비스 계정에서 Cloud Build API를 호출할 수 있도록 서비스 경계의 인그레스 정책을 업데이트합니다. 이 인그레스 규칙은 서비스 계정이 CreateBuild API 호출을 수행할 수 있게 해줍니다. VPC 서비스 제어 인그레스 정책에 대한 자세한 내용은 인그레스 및 이그레스 정책 구성인그레스 및 이그레스 규칙을 참조하세요.

    - ingressFrom:
        identities:
        - serviceAccount:SERVICE_ACCOUNT_EMAIL
        sources:
        - accessLevel: '*'
      ingressTo:
        operations:
        - serviceName: 'cloudbuild.googleapis.com'
          methodSelectors:
          - method: '*'
        resources:
        - 'projects/PROJECT_NUMBER'
    
  3. 변수를 적절한 값으로 바꿔서 다음 명령어를 실행하여 경계 정책을 업데이트합니다.

    gcloud beta access-context-manager perimeters update PERIMETER_NAME \
        --set-ingress-policies=INGRESS-FILENAME \
        --policy=POLICY_ID
    

각 항목의 의미는 다음과 같습니다.

  • SERVICE_ACCOUNT_EMAIL: 서비스 계정의 이메일 주소입니다.
  • PROJECT_NUMBER: VPC 서비스 제어 경계에 추가한Google Cloud 프로젝트의 프로젝트 번호입니다.
  • PERIMETER_NAME: VPC 서비스 제어 경계의 이름입니다.
  • INGRESS-FILENAME: 인그레스 정책 파일의 이름입니다.
  • POLICY_ID: 액세스 정책의 ID입니다.

선택항목: 개발 머신에 경계 액세스 사용 설정

VPC 서비스 제어 검사는 Cloud Build API에 적용되므로 서비스 경계 내에서 발생하지 않는 한 Cloud Build API 호출이 실패합니다. 따라서 Cloud Build API, Google Cloud 콘솔의 Cloud Build UI 또는 Google Cloud CLI를 사용하여 빌드를 관리하려면 다음 옵션 중 하나를 선택합니다.

  • VPC 서비스 제어 경계 안에서 머신을 사용합니다. 예를 들어 VPN을 사용하여 VPC 네트워크에 연결된 Compute Engine VM 또는 온프레미스 머신을 사용할 수 있습니다.

  • 개발자에게 경계에 대한 액세스 권한을 부여합니다. 예를 들어 IP 주소나 사용자 ID를 기준으로 경계 액세스를 허용하는 액세스 수준을 만들 수 있습니다. 자세한 내용은 서비스 경계 외부에서 보호된 리소스에 액세스 허용을 참조하세요.

조직 정책 제약조건 설정

VPC 서비스 제어 검사가 올바르게 시행되고 지정된 비공개 풀만 사용하도록 Google Cloud 조직의 빌드를 제한하려면 constraints/cloudbuild.allowedWorkerPools 조직 정책 제약조건을 설정합니다. 조직 정책을 전체 조직 또는 조직 내 프로젝트 또는 폴더에 적용할 수 있습니다. 예를 들어 조직 정책에서 다음을 지정할 수 있습니다.

  • 조직 내 모든 빌드가 지정된 비공개 풀을 사용합니다.
  • 폴더 내 모든 빌드가 지정된 비공개 풀을 사용합니다.
  • 프로젝트 내 모든 빌드가 지정된 비공개 풀을 사용합니다.

IAM 권한: 조직 정책을 관리하려면 조직 정책 관리자(roles/orgpolicy.policyAdmin) 역할이 필요합니다. 역할 부여에 대한 안내는 Cloud Build 리소스에 대한 액세스 구성을 참조하세요.

gcloud resource-manager org-policies allow 명령어는 조직 내 빌드가 지정된 비공개 풀만 사용하도록 요구하는 조직 정책을 설정합니다.

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools \
     projects/PRIVATEPOOL_PROJECT_ID/locations/LOCATION/workerPools/PRIVATEPOOL_ID \
     --organization ORGANIZATION_ID

각 항목의 의미는 다음과 같습니다.

  • PRIVATEPOOL_ID: 빌드를 실행할 비공개 풀의 ID입니다.

  • PRIVATEPOOL_PROJECT_ID: 비공개 풀이 포함된 Google Cloud 프로젝트의 ID입니다.

  • LOCATION: 비공개 풀이 포함된 리전입니다.

  • ORGANIZATION_ID: 빌드를 실행하는 조직의 ID입니다.

이 명령어는 under:is 프리픽스를 지원합니다.

조직 내 모든 빌드가 조직에 속한 비공개 풀을 사용하도록 하는 조직 정책을 설정하는 방법은 다음과 같습니다.

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:organizations/ORGANIZATION_ID \
     --organization ORGANIZATION_ID

여기서 ORGANIZATION_ID는 비공개 풀이 포함된 조직의 ID입니다.

폴더에 속한 프로젝트 내 모든 빌드가 지정된 프로젝트의 비공개 풀을 사용하도록 하는 조직 정책을 설정하려면 다음 안내를 따르세요.

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:projects/PROJECT_ID \
     --folder FOLDER_ID

여기서 PROJECT_ID는 비공개 풀이 포함된 프로젝트의 ID이고 FOLDER_ID는 빌드를 실행 중인 프로젝트를 포함합니다.

프로젝트 내 모든 빌드가 지정된 프로젝트의 비공개 풀을 사용하도록 하는 조직 정책을 설정하려면 다음 안내를 따르세요.

 gcloud resource-manager org-policies allow \
     cloudbuild.allowedWorkerPools under:projects/PRIVATEPOOL_PROJECT_ID \
     --project BUILD_PROJECT_ID

여기서 PRIVATEPOOL_PROJECT_ID는 비공개 풀이 포함된 프로젝트의 ID이고 BUILD_PROJECT_ID는 빌드를 실행 중인 프로젝트의 ID입니다.

constraints/cloudbuild.allowedWorkerPools 조직 정책 제약조건을 시행할 때 다음 사항에 유의하세요.

  • 이 조직 정책 제약조건을 Google Cloud 프로젝트에 적용하는 경우 프로젝트 내 모든 빌드가 비공개 풀을 사용해야 합니다. 기본 공유 풀을 사용하려고 시도하는 빌드는 실패합니다.

  • Google Cloud 조직에 Cloud Build를 암시적으로 사용하는 App Engine 또는 Cloud Run Functions와 같은 서비스가 포함된 경우 조직 정책 제약조건에 따라 이러한 서비스가 예상대로 작동하지 않을 수 있습니다.

서비스 경계에 비공개 풀 만들기

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 작업자 풀 페이지를 엽니다.

    Cloud Build 작업자 풀 페이지 열기

  2. 비공개 풀 만들기를 클릭합니다.

    비공개 풀 만들기 페이지가 표시됩니다.

    다음 정보를 입력하여 비공개 풀을 만듭니다.

  3. 이름: 비공개 풀의 이름을 입력합니다. 이 값은 영숫자 문자 /[a-z][0-9]/ 또는 대시 -만 포함할 수 있습니다. 비공개 풀의 이름은 1~63자여야 합니다.

  4. 리전: 비공개 풀을 만들 리전을 선택합니다.

  5. 머신 구성: 다음을 구성합니다.

    1. 시리즈: 머신 시리즈를 선택합니다.

    2. 머신 유형: 이 설정은 선택한 머신 시리즈를 기반으로 작업자 풀에서 사용할 수 있는 머신 유형을 보여줍니다. 사용 가능한 머신 유형은 리전에 따라 다릅니다.

    3. 디스크 크기: 비공개 풀의 디스크 크기를 입력합니다. 100 이상이고 4,000 이하인 값을 지정합니다. 값을 제공하지 않으면 Cloud Build에서 디스크 크기 100을 사용합니다.

    4. 중첩된 가상화: C3 시리즈 머신을 선택한 경우 중첩된 가상화를 사용 설정할 수 있습니다. 이 기능을 사용하면 다른 VM 내에서 가상 머신 (VM) 인스턴스를 실행하여 자체 가상화 환경을 만들 수 있습니다.

  6. 네트워크 유형에서 비공개 네트워크를 선택한 후 다음을 선택합니다.

    1. 프로젝트: Google Cloud 프로젝트 ID를 선택합니다.

    2. 네트워크: 드롭다운 메뉴에서 네트워크를 선택합니다. 네트워크를 만들지 않은 경우 네트워크를 만드는 방법을 알아보려면 VPC 네트워크 만들기 및 관리를 참조하세요.

    3. IP 범위: Cloud Build 프로듀서 네트워크가 비공개 저장소와의 연결을 유지하는 VM에 할당하는 데 사용할 수 있는 내부 IP 범위를 입력합니다.

      클래스 없는 도메인 간 라우팅(CIDR) 라우팅 표기법을 사용하여 STARTING_IP_ADDRESS/SUBNET_PREFIX_SIZE 형식으로 범위를 지정할 수 있습니다. 예를 들어 192.0.2.0/24의 프리픽스 길이는 24입니다. IP 범위의 처음 24비트는 서브넷 마스크(192.0.2.0)로 사용되고 가능한 호스트 주소 범위는 192.0.2.0에서 192.0.2.255까지입니다.

      프리픽스 길이 값은 /29 이하여야 합니다. 범위에 지정된 값이 없으면 기본값인 /24가 자동으로 할당됩니다. 프리픽스 길이에 지정된 값이 없으면 피어링된 VPC 네트워크 내에서 IP 주소가 자동으로 할당됩니다. IP 주소에 값을 지정하지 않으면 피어링된 VPC 네트워크 내의 범위가 IP 주소에 자동으로 할당됩니다.

    4. 외부 IP 할당을 선택 해제하여 비공개 네트워크에 대한 액세스를 제한합니다.

  7. 만들기를 클릭하여 비공개 풀을 만듭니다.

gcloud

  1. YAML 또는 JSON 형식으로 비공개 풀 구성 파일을 만들고 egressOption 플래그를 NO_PUBLIC_EGRESS로 설정합니다.

    privatePoolV1Config:
      networkConfig:
        egressOption: NO_PUBLIC_EGRESS
        peeredNetwork: PEERED_NETWORK
      workerConfig:
        diskSizeGb: 'PRIVATE_POOL_DISK_SIZE'
        machineType: PRIVATE_POOL_MACHINE_TYPE
    

    각 항목의 의미는 다음과 같습니다.

    • PEERED_NETWORK는 서비스 제공업체 네트워크에 피어링된 네트워크의 네트워크 리소스 URL입니다. PEERED_NETWORKprojects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME 형식이어야 합니다. 여기서 NETWORK_PROJECT_ID는 VPC 네트워크를 보유한 Google Cloud 프로젝트의 프로젝트 ID이고 NETWORK_NAME은 VPC 네트워크의 이름입니다.
    • PRIVATE_POOL_MACHINE_TYPE은 비공개 풀 인스턴스의 Compute Engine 머신 유형입니다. 지원되는 머신 유형은 비공개 풀 구성 파일 스키마를 참조하세요.
    • PRIVATE_POOL_DISK_SIZE는 비공개 풀 인스턴스의 디스크 크기(GB)입니다. 100 이상이고 1,000 이하인 값을 지정합니다. 0을 지정하면 Cloud Build는 기본값 100을 사용합니다.
    • egressOption는 비공개 풀의 VPC 서비스 제어 경계를 사용 설정하는 플래그입니다. VPC 서비스 제어 경계 내에 비공개 풀을 만들려면 이를 NO_PUBLIC_EGRESS로 설정합니다.
  2. 다음 gcloud 명령어를 실행합니다. 여기서 PRIVATEPOOL_ID는 비공개 풀의 고유 식별자이고, PRIVATEPOOL_CONFIG_FILE은 비공개 풀 구성 파일 이름이며, REGION은 비공개 풀을 만들 리전입니다.

    gcloud builds worker-pools create PRIVATEPOOL_ID --config-from-file PRIVATEPOOL_CONFIG_FILE --region REGION
    

선택사항: VPC 네트워크에서 공개 인터넷 호출 사용 설정

VPC 네트워크에서 저장소가 호스팅되는 위치 (예: github.com)에 네트워크 연결을 허용하려면 다음 설정을 모두 구성하세요.

제한사항

  • VPC 서비스 제어 보호는 비공개 풀에서 실행되는 빌드에만 사용할 수 있습니다. 기본 풀에서 실행되는 빌드에는 VPC 서비스 제어를 사용할 수 없습니다.

  • VPC 서비스 제어를 사용하는 경우 Cloud Build Pub/Sub 트리거는 지원되지 않습니다.

다음 단계