정책 YAML 참조

이 페이지에는 YAML 형식에 지정된 대로 Binary Authorization 정책을 구성하기 위한 참조 정보가 포함되어 있습니다. 명령줄 인터페이스를 사용하여 정책을 구성할 때 이 사양을 준수하는 YAML 형식의 파일을 수정합니다. YAML 형식의 정책 예시는 정책 예시를 참조하세요.

정책 YAML 파일에는 다음 형식이 사용됩니다.

name: projects/<PROJECT_ID>/policy
admissionWhitelistPatterns:
- namePattern: <MATCHING_PATTERN>
- ...
globalPolicyEvaluationMode: <GLOBAL_EVAL_MODE>
defaultAdmissionRule:
  <ADMISSION_RULE>
clusterAdmissionRules:
  <CLUSTER_SPECIFIER>:
    <ADMISSION_RULE>
  ...

노드

YAML 형식에는 다음과 같은 최상위 노드가 있습니다.

노드 설명 필수
name 정책의 이름입니다.
admissionWhitelistPatterns 항상 배포할 수 있는 컨테이너 이미지를 지정합니다. 아니요
globalPolicyEvaluationMode Google 소유 시스템 이미지를 제외하는 전역 정책을 적용할지 여부를 지정합니다. 아니요
defaultAdmissionRule 클러스터별 규칙이 없는 모든 클러스터에 적용되는 규칙을 지정합니다.
clusterAdmissionRules 특정 클러스터에 적용되는 규칙을 지정합니다. 아니요

name

name 노드에는 다음과 같은 형식의 정책 이름이 포함됩니다.

name: projects/PROJECT_ID/policy

여기서 PROJECT_ID는 정책이 정의된 Google Cloud Platform(GCP) 프로젝트의 이름입니다.

예를 들면 다음과 같습니다.

name: projects/example-project/policy

admissionWhitelistPatterns

admissionWhitelistPatterns정책 시행에서 제외되는 컨테이너 이미지의 허용 목록을 지정합니다. Container Registry 또는 namePattern 하위 노드의 다른 레지스트리에 있는 이미지의 경로를 지정합니다.

admissionWhitelistPatterns:
  - namePattern: MATCHING_PATTERN
  - ...

여기서 MATCHING_PATTERN은 정확하게 일치하는 단일 이미지 또는 와일드 카드 기호(*)를 사용하여 패턴과 일치하는 이미지에 대한 경로입니다. 와일드 카드는 패턴의 끝을 제외한 다른 위치에는 올 수 없습니다. 예를 들어 gcr.io/n*x는 허용되지 않지만 gcr.io/nginx*는 허용됩니다. 또한 와일드 카드는 /와 일치하지 않습니다. 예를 들어 gcr.io/nginx*gcr.io/nginx@latest와 일치하지만 gcr.io/nginx/image와는 일치하지 않습니다.

다음 예시는 일반적으로 사용되는 Google Kubernetes Engine(GKE)은 물론 gcr.io/example-project/helloworld에 있는 이미지를 포함하는 레지스트리를 정책의 예외 이미지 목록에 추가합니다.

admissionWhitelistPatterns:
  - namePattern: gcr.io/google_containers/*
  - namePattern: gcr.io/google-containers/*
  - namePattern: k8s.gcr.io/*
  - namePattern: gke.gcr.io/*
  - namePattern: gcr.io/stackdriver-agents/*
  - namePattern: gcr.io/example-project/helloworld

허용 목록 패턴

레지스트리 위치가 지정된 경로와 일치하는 모든 컨테이너 이미지를 허용하려면 다음을 실행하세요.

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/*

특정 이미지를 허용하려면 다음 안내를 따르세요.

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld

현재 태그가 지정된 버전을 허용하려면 다음을 실행하세요.

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld:latest
  - namePattern: gcr.io/example-project/helloworld:my-tag
  - namePattern: gcr.io/example-project/helloworld:v1.*

다이제스트를 기준으로 특정 이미지 버전을 허용하려면 다음을 실행하세요.

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld@sha256:77b0b75136b9bd0fd36fb50f4c92ae0dbdbbe164ab67885e736fa4374e0cbb8c

globalPolicyEvaluationMode

전역 정책 평가 모드의 정책 설정을 사용하면 사용자로 구성한 정책을 평가하기 전에 Binary Authorization에서 시스템 정책을 평가할 수 있습니다. 시스템 정책은 Google에서 제공하며 Google이 관리하는 시스템 이미지 목록을 추가 정책 평가에서 제외합니다. 이 설정을 사용하면 GKE에 필요한 이미지가 정책 시행으로 차단되지 않습니다. 전역 정책은 admissionWhitelistPatterns를 포함하여 사용자 정책 평가 이전에, 그리고 사용자 정책 평가에 추가하여 평가됩니다.

Google이 관리하는 모든 시스템 이미지를 허용하려면 globalPolicyEvaluationMode 속성을 ENABLE로 설정합니다.

globalPolicyEvaluationMode: ENABLE

전역 정책 평가 모드를 사용 중지하려면 다음을 실행하세요.

globalPolicyEvaluationMode: DISABLE

defaultAdmissionRule

defaultAdmissionRule은 정책의 기본 규칙을 지정합니다. 기본 규칙은 모든 비예외 컨테이너 이미지에 적용되는 제약조건을 정의합니다. 단, 자체 클러스터별 예외가 포함된 컨테이너 이미지는 제외됩니다. ADMISSION_RULE 모음을 사용하여 기본 규칙을 지정합니다.

defaultAdmissionRule:
  ADMISSION_RULE

다음 예시는 지정된 증명자가 승인한 컨테이너 이미지만 배포하도록 허용하는 기본 규칙을 보여줍니다. 일부 필수 증명자가 이미지를 승인하지 않은 경우 Binary Authorization은 배포를 차단하고 감사 로그에 기록합니다.

defaultAdmissionRule:
  evaluationMode: REQUIRE_ATTESTATION
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  requireAttestationsBy:
  - projects/example-project/attestors/secure-build

clusterAdmissionRules

clusterAdmissionRules은 정책의 클러스터 관련 규칙을 선언합니다. 이러한 규칙의 제약조건은 지정된 클러스터에만 적용됩니다. Binary Authorization에서 클러스터별 규칙을 배포에 적용하는 경우 기본 규칙은 사용되지 않습니다. 기본 규칙과 마찬가지로 ADMISSION_RULE 모음을 사용하여 클러스터별 규칙을 지정합니다.

clusterAdmissionRules:
  CLUSTER_SPECIFIER:
    ADMISSION_RULE

여기서 CLUSTER_SPECIFIERlocation.name 형식으로 규칙이 적용되는 클러스터의 리소스 ID입니다(예: us-east1-a.prod-cluster).

다음 예시는 지정된 증명자가 승인한 컨테이너 이미지만 배포하도록 허용하는 클러스터별 규칙을 보여줍니다.

clusterAdmissionRules:
  us-east1-a.prod-cluster:
    evaluationMode: REQUIRE_ATTESTATION
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    requireAttestationsBy:
    - projects/example-project/attestors/secure-build
    - projects/example-project/attestors/prod-qualified

노드 컬렉션

ADMISSION_RULE

ADMISSION_RULE은 규칙에 대한 제약조건을 다음 형식으로 지정하는 노드 모음입니다.

evaluationMode: EVAL_MODE
enforcementMode: ENFORCEMENT_MODE
requireAttestationsBy:
- ATTESTOR
- ...

defaultAdmissionRuleclusterAdmissionRule 모두 이 모음을 참조합니다.

evaluationMode

evaluationMode는 컨테이너 이미지 배포 여부를 평가하기 위해 Binary Authorization에서 수행하는 작업을 지정합니다. 사용할 수 있는 값은 다음과 같습니다.

  • ALWAYS_ALLOW: 이 규칙에서 평가한 이미지의 배포를 항상 허용합니다.
  • ALWAYS_DENY: 이 규칙에서 평가한 이미지의 배포를 항상 거부합니다.
  • REQUIRE_ATTESTATION: 배포 전 출시를 승인하기 위해 1개 이상의 증명자가 필요합니다.

evaluationModeREQUIRE_ATTESTATION인 경우 requireAttestationsBy의 필수 증명자에 대한 참조를 제공해야 합니다.

enforcementMode

enforcementMode는 컨테이너 이미지가 규칙에 정의된 제약조건을 준수하지 않는 경우 Binary Authorization에서 수행하는 작업을 지정합니다. 사용할 수 있는 값은 다음과 같습니다.

  • ENFORCED_BLOCK_AND_AUDIT_LOG: 배포를 차단하고 감사 로그에 기록합니다.
  • DRYRUN_AUDIT_LOG_ONLY: 규칙을 준수하지 않는 이미지의 배포를 허용하지만 위반 관련 세부정보를 감사 로그에 기록합니다.

대부분의 프로덕션 규칙은 ENFORCED_BLOCK_AND_AUDIT_LOG 시행 모드를 사용합니다. DRYRUN_AUDIT_LOG_ONLY는 사용자 환경에 정책이 적용되기 전에 해당 정책을 테스트하는 데 주로 사용됩니다.

requireAttestationsBy

requireAttestationsBy는 컨테이너 이미지를 배포하기 전에 출시를 승인해야 하는 1개 이상의 증명자를 지정합니다. 이는 REQUIRE_ATTESTATION 규칙에만 필요합니다. 이 노드의 형식은 다음과 같습니다.

requireAttestationsBy:
  - projects/PROJECT_ID/attestors/ATTESTOR_NAME
  - ...

여기서 PROJECT_ID는 증명자가 정의된 프로젝트의 이름이고 ATTESTOR_NAME은 출시를 서명해야 하는 증명자의 이름입니다.

다음 예시에서는 증명자를 지정하는 방법을 보여줍니다.

requireAttestationsBy:
- projects/example-project/attestors/secure-build
- projects/example-project/attestors/prod-qualified