Cloud Build 기본 서비스 계정 변경

이 동작을 재정의하지 않는 한 Cloud Build는 사용자 대신 빌드를 실행할 Cloud Build 서비스 계정을 자동으로 선택합니다. 이 기본 서비스 계정에는 Container Registry 저장소 및 프로젝트의 Cloud Storage 버킷에 대한 액세스 권한과 같이 사용 사례에 불필요한 권한이 다양하게 있을 수 있습니다.

2024년 5월과 6월 몇 주에 걸쳐 Cloud Build가 새 프로젝트에서 서비스 계정을 사용하는 방법에 대한 기본 동작이 변경되었습니다. 이러한 변경사항은 향후 고객의 기본 보안 상황을 개선합니다. 조직 정책 제약조건을 구성하여 이러한 변경사항을 선택 해제할 수 있습니다.

변경 전에는 Cloud Build에서 Cloud Build 전용 서비스 계정을 기본값으로 사용했는데 이제 Cloud Build 기존 서비스 계정이라고 합니다.

변경 후에는 Cloud Build에서 Compute Engine 기본 서비스 계정을 기본 서비스 계정으로 사용합니다.

프로젝트가 영향을 받는 방식은 조직에 속해 있는지 여부에 따라 다릅니다.

  • 조직이 없는 프로젝트. 변경 후 프로젝트에서 첫 번째 빌드를 실행하면 해당 프로젝트는 기본적으로 Cloud Build API 또는 Google Cloud CLI를 사용하여 제출된 빌드에 Compute Engine 서비스 계정을 사용합니다. 이러한 프로젝트에서는 Cloud Build 기존 서비스 계정을 사용할 수 없지만 사용자 지정 서비스 계정을 사용할 수 있습니다.

  • 조직이 포함된 프로젝트. 변경 후 프로젝트에서 첫 번째 빌드를 실행하면 해당 프로젝트는 기본적으로 Cloud Build API 또는 Google Cloud CLI를 사용하여 제출된 빌드에 Compute Engine 서비스 계정을 사용합니다. 사용자 지정 서비스 계정을 사용하거나 조직에서 Cloud Build 서비스 계정을 사용 설정하여 변경사항을 선택 해제할 수 있습니다.

  • 조직이 없는 기존 프로젝트. 변경 전에 프로젝트에서 첫 번째 빌드를 실행한 경우 해당 프로젝트는 모든 빌드에 기본적으로 Cloud Build 기존 서비스 계정을 사용하여 이전 동작을 계속 진행합니다. Compute Engine 서비스 계정을 선택하거나 직접 만들어 사용자 지정 서비스 계정을 계속 사용할 수 있습니다.

  • 조직이 있는 기존 프로젝트. 변경 전에 프로젝트에서 첫 번째 빌드를 실행한 경우 해당 프로젝트는 기본적으로 Cloud Build 기존 서비스 계정을 사용하여 이전 동작을 계속 진행합니다. 사용자 지정 서비스 계정을 계속 사용할 수도 있습니다.

  • 트리거. 프로젝트의 기본 서비스 계정이 Cloud Build 기존 서비스 계정이 아닌 경우 트리거를 만들거나 업데이트할 때 서비스 계정을 지정해야 합니다.

  • Cloud Build 서비스 계정 이름: Cloud Build 서비스 계정은 Cloud Build 기존 서비스 계정이라고 합니다.

취해야 할 조치는 무엇인가요?

조직에 속한 경우 조직은 선택한 제약조건으로 조직 정책을 설정하여 모든 프로젝트의 동작을 구성할 수 있습니다.

조직에서는 다음 조직 정책 불리언 제약조건을 설정하여 이러한 변경사항을 선택 해제할 수 있습니다.

  • 미적용: constraints/cloudbuild.disableCreateDefaultServiceAccount
  • 미적용: constraints/cloudbuild.useComputeServiceAccount
  • 적용됨: constraints/cloudbuild.useBuildServiceAccount

조직 정책을 조정할 수 없거나 조정하지 않으려 하고 변경 후 Cloud Build API를 사용 설정하면 Compute Engine 기본 서비스 계정 또는 사용자가 만든 서비스 계정에 빌드에 대한 충분한 권한이 있는지 검증합니다. 특히 빌드를 제출하는 사용자에게는 서비스 계정에 대한 iam.serviceAccounts.actAs 권한이 있어야 합니다.

새 조직 정책 제약조건

Cloud Build에서는 다음을 구성하는 새로운 조직 정책 불리언 제약조건을 도입했습니다.

  • Cloud Build 기존 서비스 계정을 사용할 수 있는 기능.
  • 조직의 모든 프로젝트에 대한 기본 서비스 계정.

조직 정책을 수정하려면 Google Cloud 콘솔 또는Google Cloud CLI를 사용할 수 있습니다.

조직 정책에 대해 자세히 알아보려면 조직 정책 서비스 소개를 참조하세요.

Cloud Build 기존 서비스 계정 가용성 구성

Cloud Build API를 사용 설정할 때 Cloud Build 기존 서비스 계정 가용성을 구성하기 위해 Cloud Build에서 다음 불리언 정책 제약조건을 도입합니다.

  • 미적용: constraints/cloudbuild.disableCreateDefaultServiceAccount. 새 프로젝트에서 Cloud Build 기존 서비스 계정을 사용할 수 있습니다.

  • 적용됨: constraints/cloudbuild.disableCreateDefaultServiceAccount. 새 프로젝트에서 Cloud Build 기존 서비스 계정을 사용할 수 없습니다. 이는 제약조건의 기본값입니다.

이 제약조건은 변경사항이 출시된 후에 첫 번째 빌드를 실행하는 프로젝트에만 영향을 미칩니다. 정책 제약조건을 적용하지 않으면 해당 구성이 활성화되었을 때 첫 번째 빌드를 실행하는 모든 프로젝트에 변경사항이 영구적으로 적용됩니다. 이전에 서비스 계정을 사용할 수 있었던 프로젝트에서는 Cloud Build 기존 서비스 계정 가용성을 중지할 수 없습니다. 하지만 서비스 계정을 사용할 수 있더라도 다음 섹션에 설명된 대로 조직의 사용자가 해당 계정을 사용하지 못하도록 할 수 있습니다.

모든 조직 정책 및 제약조건과 마찬가지로 이러한 정책은 조직 수준 또는 프로젝트 수준에서 설정할 수 있습니다.

조직의 기본 서비스 계정 구성

조직에서 어떤 기본 서비스 계정을 사용할지 구성하기 위해 Cloud Build에서는 두 가지 새로운 정책 불리언 제약조건을 도입합니다.

  • constraints/cloudbuild.useBuildServiceAccount: Cloud Build 기존 서비스 계정 사용을 구성합니다.
  • constraints/cloudbuild.useComputeServiceAccount: Compute Engine 기본 서비스 계정의 사용을 구성합니다.

이러한 정책을 서로 독립적으로 구성할 수 있지만 다음 시나리오에서 적용 규칙을 조합할 때 가장 유용합니다.

  • 수동으로 제출된 빌드 및 트리거된 빌드 모두에 Compute Engine 기본 서비스 계정을 사용합니다. 조직 정책에 다음 제약조건을 설정합니다.

    • 미적용: constraints/cloudbuild.useBuildServiceAccount
    • 적용됨: constraints/cloudbuild.useComputeServiceAccount
  • 수동으로 제출된 빌드와 트리거된 빌드 모두에 사용자 지정 서비스 계정을 사용합니다. 일반적으로 가장 안전한 옵션입니다. 조직 정책에 다음 제약조건을 설정합니다.

    • 미적용: constraints/cloudbuild.useBuildServiceAccount
    • 미적용: constraints/cloudbuild.useComputeServiceAccount
  • Cloud Build 기존 서비스 계정을 계속 사용합니다. 관련된 보안 절충안을 알고 있으면 조직 정책에 다음 제약조건을 설정합니다.

    • 미적용: constraints/cloudbuild.disableCreateDefaultServiceAccount
    • 미적용: constraints/cloudbuild.useComputeServiceAccount
    • 적용됨: constraints/cloudbuild.useBuildServiceAccount
  • 변경 전에 Cloud Build API를 사용 설정한 프로젝트에 대해 Cloud Build 기존 서비스 계정을 계속 사용하고, 새 프로젝트에는 Compute Engine 기본 서비스 계정을 사용합니다. 관련된 보안 장단점을 이해하고 조직 정책에 다음 제약조건을 설정합니다.

    • 적용됨: constraints/cloudbuild.disableCreateDefaultServiceAccount
    • 적용됨: constraints/cloudbuild.useComputeServiceAccount
    • 적용됨: constraints/cloudbuild.useBuildServiceAccount

프로젝트의 현재 기본 서비스 계정 가져오기

Cloud Build에서 프로젝트의 기본값으로 사용하는 서비스 계정을 확인하려면 Google Cloud CLI 또는 Cloud Build API를 사용하면 됩니다.

gcloud CLI

다음 명령어를 실행하여 현재 프로젝트의 기본 서비스 계정을 가져옵니다.

gcloud builds get-default-service-account

Cloud Build API

cURL을 사용하여 Cloud Build API를 호출합니다.

curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/defaultServiceAccount

자리표시자 값을 다음으로 바꿉니다.