breakglass 사용(GKE, GKE 클러스터)

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

시작하기 전에

이 가이드에서는 Binary Authorization이 설정되었다고 가정합니다.

개요

breakglass를 사용하여 Binary Authorization에서 차단하는 컨테이너 이미지를 배포합니다.

breakglass는 정책에서 허용하지 않는 이미지까지 배포하도록 Binary Authorization 정책 시행을 재정의할 수 있는 긴급 대비책을 제공합니다.

이 기능은 Kubernetes 허용 컨트롤러 사양의 권장사항과 일치하도록 구현됩니다.

breakglass를 사용하여 이미지를 배포하면 breakglass 이벤트는 배포가 정책을 충족하거나 위반하는지 여부와 관계없이 자동으로 Cloud 감사 로그에 로깅됩니다. Cloud 감사 로그에서는 수동으로 감사를 수행하거나 감사 또는 기타 다운스트림 이벤트를 자동으로 트리거할 수 있습니다.

breakglass를 사용 설정하려면 break-glass 정책 플래그를 사용하여 포드 사양에 label 필드를 추가합니다.

Break Glass 이벤트 시연

이 섹션에서는 Binary Authorization 정책을 위반하는 이미지를 포함하여 breakglass를 사용하여 이미지를 배포하는 방법을 보여줍니다.

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

모든 이미지가 배포되지 않도록 정책을 업데이트하려면 다음 단계를 수행합니다.

Google Cloud Console

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

    Binary Authorization으로 이동

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

  3. 정책 수정 페이지의 프로젝트 기본 규칙에서 원래 평가 모드를 확인한 후 모든 이미지 허용 안함을 클릭합니다.

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

gcloud

  1. 현재 프로젝트에 기존 정책을 저장하려면 다음 명령어를 실행합니다.

    gcloud container binauthz policy export > SAVE_POLICY_YAML
    

    SAVE_POLICY_YAML을 내보내기 파일 경로로 바꿉니다(예: /tmp/save_policy.yaml).

  2. 정책 파일을 만듭니다.

    cat > TEST_POLICY_YAML << EOM
    admissionWhitelistPatterns:
    defaultAdmissionRule:
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      evaluationMode: ALWAYS_DENY
    globalPolicyEvaluationMode: DISABLE
    EOM
    

    TEST_POLICY_YAML을 파일 경로로 바꿉니다(예: /tmp/policy.yaml).

  3. 정책을 가져옵니다.

    gcloud container binauthz policy import TEST_POLICY_YAML
    

    TEST_POLICY_YAML을 파일 경로로 바꿉니다(예: /tmp/policy.yaml).

기본적으로 모든 이미지가 배포되지 않도록 차단됩니다.

이미지 배포 시도

이 섹션에서는 이미지 배포를 시도합니다. 모든 이미지가 배포되지 않도록 정책의 기본 규칙이 구성되어 있으므로 배포 요청이 실패합니다.

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

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

    kubectl create -f /tmp/create_pod.yaml
    

    정책에서 이미지를 차단했음을 나타내는 오류가 표시됩니다. 이 오류는 다음과 유사합니다.

    Error from server (Forbidden): error when creating "/tmp/create_pod.yaml": pods "breakglass-pod" is forbidden: image policy webhook backend denied one or more images: Image gcr.io/google-samples/hello-app denied by Binary Authorization default
    admission rule. Denied by always_deny admission rule`.

Break Glass 사용 설정 및 다시 배포

이 섹션에서는 breakglass를 사용 설정합니다. breakglass는 Binary Authorization에만 적용되지만 포드 사양의 label 필드를 업데이트하여 사용 설정해야 합니다.

breakglass를 사용 설정하려면 다음 명령어를 실행합니다.

  1. YAML 형식으로 구성 파일을 만듭니다.

    다음 명령어는 포드를 만드는 데 필요한 break-glass 라벨 및 기타 정보가 포함된 파일을 만듭니다.

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

    kubectl create -f /tmp/create_pod.yaml
    

    출력을 확인합니다. pod/pod-name created

Cloud 감사 로그에서 breakglass 로그 항목 찾기

Cloud 감사 로그에서 breakglass 이벤트를 확인합니다.

annotations: alpha.image-policy.k8s.io/break-glass를 지정하는 이전 PodSpec도 breakglass를 트리거하고 로그 항목을 생성합니다. 이 주석을 사용하는 것은 더 이상 권장되지 않지만 이전 버전과의 호환성을 유지하기 위해 계속 지원됩니다.

삭제

포드를 삭제하고 breakglass를 사용 중지하려면 다음 안내를 따르세요.

  1. 포드를 삭제합니다.

      kubectl delete -f /tmp/create_pod.yaml
      

    pod <var>pod-name</var> deleted와 같은 출력을 수신했는지 확인합니다.

  2. 포드 사양에서 label 블록을 삭제합니다.

  3. 정책을 재설정합니다.

    Google Cloud Console

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

      Binary Authorization으로 이동

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

    3. 정책 수정 페이지의 프로젝트 기본 규칙에서 평가 모드를 이전 설정으로 재설정합니다.

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

    gcloud

    1. 원래 정책을 다시 가져옵니다.

        gcloud container binauthz policy import SAVE_POLICY_YAML
      

      SAVE_POLICY_YAML을 이 가이드의 앞부분에서 만든 파일 경로로 바꿉니다.

    정책이 재설정되었습니다.

다음 단계