Binary Authorization을 사용하여 이미지 배포 제어

이 페이지에서는 Binary Authorization을 사용하여 Cloud Build에서 빌드된 이미지만 배포하도록 허용하는 방법을 설명합니다.

시작하기 전에

  1. API Cloud Build, Binary Authorization, and Artifact Registry 사용 설정

    API 사용 설정

  2. 이 가이드에서 명령줄 예시를 사용하려면 Google Cloud SDK를 설치하고 구성하세요.

  3. 플랫폼에 Binary Authorization을 설정합니다.

Binary Authorization으로 배포 제어

Binary Authorization의 정책은 이미지 배포를 제어하는 규칙 집합입니다. 규칙에서 디지털 서명된 증명을 요구하도록 구성할 수 있습니다.

Cloud Build는 빌드 시 증명을 생성하고 서명합니다. Binary Authorization에서는 built-by-cloud-build 증명을 사용하여 증명을 확인하고 Cloud Build에서 빌드한 이미지만 배포할 수 있습니다.

프로젝트에서 built-by-cloud-build 증명자를 만들려면 해당 프로젝트에서 빌드를 실행하세요.

Cloud Build에서 빌드한 이미지만 배포하도록 허용하려면 다음 단계를 수행합니다.

Console

  1. Google Cloud Console의 Binary Authorization 페이지로 이동합니다.

    Binary Authorization으로 이동

  2. 정책 탭에서 정책 수정을 클릭합니다.

  3. 정책 수정 대화상자에서 다음 모든 증명자가 승인한 이미지만 허용을 선택합니다.

  4. 증명자 추가를 클릭합니다.

  5. 증명자 추가 대화상자에서 다음을 수행합니다.

    1. 프로젝트 및 증명자 이름으로 추가를 선택하고 다음 단계를 수행합니다.
      1. 프로젝트 이름 필드에 Cloud Build를 실행할 프로젝트를 입력합니다.
      2. 증명자 이름 필드를 클릭하고 built-by-cloud-build 증명자를 사용할 수 있는지 확인합니다.
      3. built-by-cloud-build를 클릭합니다.
    2. 또는 증명자 리소스 ID로 추가를 선택합니다. 증명자 리소스 ID에 다음을 입력합니다.

      projects/PROJECT_ID/attestors/built-by-cloud-build
      

      PROJECT_ID를 Cloud Build를 실행하는 프로젝트로 바꿉니다.

  6. 증명자 1개 추가를 클릭합니다.

  7. 정책 저장을 클릭합니다.

gcloud

  1. 다음 명령어를 사용하여 기존 정책을 파일로 내보냅니다.

    gcloud container binauthz policy export > /tmp/policy.yaml
    
  2. 정책 파일을 수정합니다.

  3. 다음 규칙 중 하나를 수정합니다.

    • defaultAdmissionRule
    • clusterAdmissionRules
    • istioServiceIdentityAdmissionRules
    • kubernetesServiceAccountAdmissionRules
  4. 아직 규칙이 없으면 requireAttestationsBy 블록을 규칙에 추가합니다.

  5. requireAttestationsBy 블록에 다음을 추가합니다.

    projects/PROJECT_ID/attestors/built-by-cloud-build
    

    PROJECT_ID를 Cloud Build를 실행하는 프로젝트로 바꿉니다.

  6. 정책 파일을 저장합니다.

  7. 정책 파일을 가져옵니다.

    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

  1. Google Cloud Console의 Binary Authorization 페이지로 이동합니다.

    Binary Authorization으로 이동

  2. 정책 수정을 클릭합니다.

  3. 기본 규칙이나 특정 규칙에서 테스트 실행 모드를 선택합니다.

  4. 정책 저장을 클릭합니다.

gcloud

  1. Binary Authorization 정책을 YAML 파일로 내보냅니다.

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. 텍스트 편집기에서 enforcementModeDRYRUN_AUDIT_LOG_ONLY로 설정하고 파일을 저장하세요.

  3. 정책을 업데이트하려면 다음 명령어를 실행하여 파일을 가져옵니다.

    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"

다음 단계