이 페이지에서는 Cloud Build를 사용하여 Cloud Run 및 Google Kubernetes Engine에 대해 이미지 배포를 보호하는 방법을 안내합니다.
빌드 증명을 확인하고 Cloud Build에서 생성되지 않은 이미지 배포를 차단하도록 Binary Authorization을 구성하는 방법을 알아봅니다. 이 프로세스는 승인되지 않은 소프트웨어를 배포할 위험을 줄여줄 수 있습니다.
시작하기 전에
Enable the Cloud Build, Binary Authorization, and Artifact Registry APIs.
이 가이드에서 명령줄 예시를 사용하려면 Google Cloud SDK를 설치하고 구성하세요.
Binary Authorization으로 배포 제어
Binary Authorization의 정책은 이미지 배포를 제어하는 규칙 집합입니다. 규칙에서 디지털 서명된 증명을 요구하도록 구성할 수 있습니다.
Cloud Build는 빌드 시 증명을 생성하고 서명합니다. Binary Authorization을 사용하면 built-by-cloud-build
증명자를 사용하여 증명을 확인하고 Cloud Build에서 빌드된 이미지만 배포할 수 있습니다.
프로젝트에서 built-by-cloud-build
증명자를 만들려면 해당 프로젝트에서 빌드를 실행하세요.
Cloud Build에서 빌드한 이미지만 배포하도록 허용하려면 다음 단계를 수행합니다.
콘솔
Google Cloud 콘솔의 Binary Authorization 페이지로 이동합니다.
정책 탭에서 정책 수정을 클릭합니다.
정책 수정 대화상자에서 다음 모든 증명자가 승인한 이미지만 허용을 선택합니다.
증명자 추가를 클릭합니다.
증명자 추가 대화상자에서 다음을 수행합니다.
- 프로젝트 및 증명자 이름으로 추가를 선택하고 다음 단계를 수행합니다.
- 프로젝트 이름 필드에 Cloud Build를 실행할 프로젝트를 입력합니다.
- 증명자 이름 필드를 클릭하고
built-by-cloud-build
증명자를 사용할 수 있는지 확인합니다. built-by-cloud-build
를 클릭합니다.
또는 증명자 리소스 ID로 추가를 선택합니다. 증명자 리소스 ID에 다음을 입력합니다.
projects/PROJECT_ID/attestors/built-by-cloud-build
PROJECT_ID
를 Cloud Build를 실행하는 프로젝트로 바꿉니다.
- 프로젝트 및 증명자 이름으로 추가를 선택하고 다음 단계를 수행합니다.
증명자 1개 추가를 클릭합니다.
정책 저장을 클릭합니다.
gcloud
다음 명령어를 사용하여 기존 정책을 파일로 내보냅니다.
gcloud container binauthz policy export > /tmp/policy.yaml
정책 파일을 수정합니다.
다음 규칙 중 하나를 수정합니다.
defaultAdmissionRule
clusterAdmissionRules
istioServiceIdentityAdmissionRules
kubernetesServiceAccountAdmissionRules
아직 규칙이 없으면
requireAttestationsBy
블록을 규칙에 추가합니다.requireAttestationsBy
블록에 다음을 추가합니다.projects/PROJECT_ID/attestors/built-by-cloud-build
PROJECT_ID
를 Cloud Build를 실행하는 프로젝트로 바꿉니다.정책 파일을 저장합니다.
정책 파일을 가져옵니다.
gcloud container binauthz policy import /tmp/policy.yaml
다음은
built-by-cloud-build-attestor
에 대한 참조가 포함된 정책 파일 예시입니다.defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/PROJECT_ID/attestors/built-by-cloud-build name: projects/PROJECT_ID/policy
PROJECT_ID
를 Cloud Build를 실행하는 프로젝트 ID로 바꿉니다.
GKE 또는 Cloud Run에 대한 Binary Authorization 로그 메시지에서 정책 오류를 볼 수 있습니다.
테스트 실행 모드 사용
테스트 실행 모드에서 Binary Authorization은 배포를 실제로 차단하지 않고 정책 규정 준수를 확인합니다. 대신 정책 규정 준수 상태 메시지가 Cloud Logging에 로깅됩니다. 이러한 로그를 사용하여 차단 정책이 올바르게 작동하는지 확인하고 거짓양성을 식별할 수 있습니다.
테스트 실행을 사용 설정하려면 다음을 수행합니다.
콘솔
Google Cloud 콘솔의 Binary Authorization 페이지로 이동합니다.
정책 수정을 클릭합니다.
기본 규칙이나 특정 규칙에서 테스트 실행 모드를 선택합니다.
정책 저장을 클릭합니다.
gcloud
Binary Authorization 정책을 YAML 파일로 내보냅니다.
gcloud container binauthz policy export > /tmp/policy.yaml
텍스트 편집기에서
enforcementMode
를DRYRUN_AUDIT_LOG_ONLY
로 설정하고 파일을 저장하세요.정책을 업데이트하려면 다음 명령어를 실행하여 파일을 가져옵니다.
gcloud container binauthz policy import /tmp/policy.yaml
GKE 또는 Cloud Run에 대한 Binary Authorization 로그 메시지에서 정책 오류를 볼 수 있습니다.
제한사항
Cloud Build와 Binary Authorization이 같은 프로젝트에 있어야 합니다. 다른 프로젝트에서 배포 플랫폼을 실행하는 경우 다중 프로젝트 설정의 IAM 역할을 구성하고 Binary Authorization에서
built-by-cloud-build
증명자를 추가할 때 Cloud Build 프로젝트를 참조합니다.명시적인
docker push
빌드 단계를 사용해서 Artifact Registry에 이미지를 푸시할 때는 Cloud Build에서 증명이 생성되지 않습니다.docker build
빌드 단계에서images
필드를 사용하여 Artifact Registry에 푸시해야 합니다.images
에 대한 자세한 내용은 Artifact Registry에서 이미지를 저장하는 다양한 방법을 참조하세요.빌드 파이프라인 및 배포 파이프라인에 대해 개별 빌드 구성 파일을 사용해야 합니다. 빌드 파이프라인이 성공적으로 완료된 후에만 Cloud Build가 증명을 생성하기 때문입니다. 그런 후 이미지를 배포하기 전 Binary Authorization이 증명을 확인합니다.
비공개 풀에서 증명 사용 설정
기본적으로 Cloud Build는 비공개 풀의 빌드에 대해 Binary Authorization 증명을 생성하지 않습니다. 증명을 생성하려면 빌드 구성 파일에 requestedVerifyOption: VERIFIED
옵션을 추가합니다.
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
requestedVerifyOption: VERIFIED
requestedVerifyOption
을 추가하면 Cloud Build가 이미지에 대해 증명 생성 및 출처 메타데이터를 사용 설정합니다.
증명자 메타데이터 보기
증명자는 프로젝트에서 빌드를 처음 실행할 때 생성됩니다. 증명자 ID는 projects/PROJECT_ID/attestors/built-by-cloud-build
형식이고, 여기서 PROJECT_ID
는 프로젝트 ID입니다.
다음 명령어를 사용하여 빌드 증명자 메타데이터를 확인할 수 있습니다.
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build
PROJECT_ID
를 Cloud Build를 실행하는 프로젝트로 바꿉니다.
출력에는 증명자 및 해당 공개 키에 대한 정보가 포함됩니다. 예를 들면 다음과 같습니다.
name": "projects/PROJECT_ID/attestors/built-by-cloud-build", "userOwnedDrydockNote": { "noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build", "publicKeys": [ { "id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1", "pkixPublicKey": { "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n", "signatureAlgorithm": "ECDSA_P256_SHA256" } }, ... } ], "delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com" }, "updateTime": "2021-09-24T15:26:44.808914Z", "description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"
다음 단계
- Binary Authorization에 대해 알아보기