이 페이지에서는 Binary Authorization을 사용하여 Cloud Build에서 빌드된 이미지만 배포하도록 허용하는 방법을 설명합니다.
시작하기 전에
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에서 빌드한 이미지만 배포하도록 허용하려면 다음 단계를 수행합니다.
Console
Google Cloud Console의 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에 로깅됩니다. 이러한 로그를 사용하여 차단 정책이 올바르게 작동하는지 확인하고 거짓양성을 식별할 수 있습니다.
테스트 실행을 사용 설정하려면 다음을 수행합니다.
Console
Google Cloud Console의 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이 동일한 프로젝트에 있어야 합니다. 다른 프로젝트에서 배포 플랫폼을 실행하는 경우 Binary Authorization에 built-by-cloud-build
증명자를 추가할 때는 Cloud Build 프로젝트를 참조하세요.
비공개 풀에서 증명 사용 설정
기본적으로 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"