Break Glass 사용(GKE)

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

시작하기 전에

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

개요

breakglass를 사용하여 Binary Authorization에서 일반적으로 차단되는 컨테이너 이미지를 배포할 수 있습니다.

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

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

breakglass를 사용하여 이미지를 배포하면 breakglass 이벤트가 Cloud 감사 로그에 자동으로 로깅됩니다. Cloud 감사 로그에서는 수동으로 감사를 수행하거나 감사 또는 기타 다운스트림 이벤트를 자동으로 트리거할 수 있습니다.

breakglass를 사용 설정하려면 break-glass 플래그를 사용하여 podspec에 라벨을 추가합니다.

Break Glass 이벤트 시연

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

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

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

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).

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

컨테이너 이미지 배포 시도

breakglass는 Binary Authorization에만 적용되지만 podspec의 라벨을 업데이트하여 사용 설정해야 합니다. 이렇게 하려면 다음 명령어를 실행하세요.

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

    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을 사용하여 Pod를 만듭니다.

    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 사용 설정 및 다시 배포

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

    다음 명령어는 Pod를 만드는 데 필요한 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
    

    모든 이전 Kubernetes 마스터 버전에서는 다음과 같이 alpha.image-policy.k8s.io/break-glassannotations 노드에 추가하여 breakglass를 사용 설정합니다.

    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 감사 로그에서 breakglass 로그 항목 찾기

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

삭제

  1. pod를 삭제합니다.

      kubectl delete -f /tmp/create_pod.yaml
      

    표시된 출력이 다음과 같은지 확인합니다. pod "pod-name" deleted

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

      gcloud container binauthz policy import /tmp/policy_save.yaml