Break Glass 사용

이 페이지에서는 Binary Authorization과 함께 Break Glass를 사용하는 방법을 설명합니다.

개요

Binary Authorization은 GKE가 컨테이너 이미지를 배포할 수 있는지 여부를 관리하여 소프트웨어 공급망 보안을 제공합니다. Binary Authorization 시행자가 일반적으로 차단하는 컨테이너 이미지를 강제로 배포해야 하는 경우가 있습니다. 이러한 경우에 Binary Authorization은 Break Glass라는 기능을 제공합니다. 정책 제약조건을 무시하고 이미지 배포를 허용하려면 break-glass 정책 플래그를 사용하여 pod 정의에 주석을 추가합니다.

Break Glass는 Binary Authorization 정책 시행을 재정의하고, 정책에서 허용하지 않는 컨테이너 이미지를 포함한 컨테이너 이미지의 배포를 허용하는 긴급 대비책을 제공합니다.

마지막으로 Break Glass는 Break Glass 이벤트를 Cloud Logging에 자동으로 로깅합니다. Cloud Logging에서 알림 또는 기타 다운스트림 이벤트를 수동으로 감사하거나 자동으로 트리거할 수 있습니다.

Break Glass 이벤트 시연

모든 배포 요청을 거부하도록 Binary Authorization 정책 업데이트

Break Glass는 Binary Authorization에만 적용되지만 pod 사양에 있는 주석을 업데이트해야 합니다.

모든 컨테이너 이미지 배포 요청을 거부하도록 정책을 업데이트하려면 다음 단계를 수행하세요.

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

    Binary Authorization 페이지로 이동

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

  3. 프로젝트 기본 규칙을 Deny All으로 설정합니다.

정책 수정 페이지의 프로젝트 기본 규칙에서 모든 이미지 허용 안함을 클릭합니다.

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

컨테이너 이미지 배포 시도

  1. YAML 형식으로 구성 파일을 만듭니다. 이 파일에는 pod를 만드는 데 필요한 기본 정보가 포함되어 있습니다.

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. kubectl을 사용하여 pod를 만듭니다.

    kubectl create -f /tmp/create_pod.yaml
    

    다음 오류를 참고하세요. Error from server (Forbidden): error when creating "/tmp/create_pod.yaml": pods "pod-name" is forbidden: image policy webhook backend denied one or more images: Denied by default admission rule. Overridden by evaluation mode.

Break Glass 사용 설정 및 다시 배포

  1. YAML 형식으로 구성 파일을 만듭니다. 이제 이 파일에는 pod를 만드는 데 필요한 기타 정보뿐만 아니라 Break Glass 주석도 포함되어 있습니다.

    cat > /tmp/create_pod.yaml << EOM
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-name
      annotations:
        alpha.image-policy.k8s.io/break-glass: "true"
    spec:
      containers:
      - name: container-name
        image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    EOM
    
  2. kubectl을 사용하여 pod를 만듭니다.

    kubectl create -f /tmp/create_pod.yaml
    

    결과를 확인합니다. pod/pod-name created

Cloud Logging에서 Break Glass 로그 항목 찾기

  1. Cloud Logging 뷰어 페이지로 이동합니다.

    로그 뷰어 페이지로 이동

  2. 리소스 목록에서 Kubernetes 클러스터를 선택합니다.

  3. 시간 범위 선택기에서 시간 범위를 선택합니다.

  4. 다음을 복사하여 검색어 상자에 붙여넣습니다.

    imagepolicywebhook.image-policy.k8s.io/break-glass
    

    반환된 레코드를 펼쳐서 Break Glass 배포 이벤트에 대한 정보를 표시할 수 있습니다.

pod를 삭제하여 정리

kubectl delete -f /tmp/create_pod.yaml

표시된 결과가 다음과 같은지 확인합니다. pod "pod-name" deleted