정책 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 프로젝트의 이름입니다.

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

name: projects/example-project/policy

admissionWhitelistPatterns

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

admissionWhitelistPatterns:
  - namePattern: MATCHING_PATTERN
  - ...

MATCHING_PATTERN을 단일 이미지 경로 또는 와일드 카드 기호(*, **) 중 하나가 포함된 일치 패턴으로 바꿉니다.

와일드 카드는 패턴 끝에서만 유효합니다. 예를 들어 gcr.io/my-project/nginx*는 유효한 패턴이지만 gcr.io/my-project/n*x는 그렇지 않습니다. * 와일드 카드만 지정된 디렉터리의 이미지와 일치합니다. 예를 들어 gcr.io/my-project/nginx*gcr.io/my-project/nginx:latest와 일치하지만 gcr.io/my-project/nginx-images/nginx와는 일치하지 않습니다. ** 와일드 카드는 하위 디렉터리의 이미지와 일치합니다. 예를 들어 gcr.io/my-project/nginx** 경로는 gcr.io/my-project/nginx-1.14.2/image:latest와 일치합니다.

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

admissionWhitelistPatterns:
  - namePattern: gcr.io/google-containers/*
  - namePattern: k8s.gcr.io/**
  - namePattern: gke.gcr.io/**
  - namePattern: gcr.io/gke-release/asm/*
  - namePattern: gcr.io/stackdriver-agents/*
  - namePattern: gcr.io/example-project/helloworld
  - namePattern: loc-ref

허용 목록 패턴

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

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

지정된 경로의 하위 디렉터리에 있는 이미지를 허용 목록에 포함하려면 다음 안내를 따르세요.

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

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