테스트 실행 모드 사용 설정

개요

이 페이지에서는 테스트 실행 모드를 사용 설정하는 방법을 설명합니다. 테스트 실행 모드가 사용 설정된 경우 Binary Authorization은 실제로 pod가 생성되는 것을 차단하지 않고 pod 생성 시에 정책 준수를 확인합니다. 대신 정책 준수 상태 메시지가 Cloud Logging에 로깅됩니다. 이 정보를 사용하여 컨테이너 이미지가 의도치 않게 배포 차단되었는지 확인하고 해당 정책을 수정할 수 있습니다. 정책이 의도한대로 준수되면 테스트 실행 모드를 사용 중지해도 됩니다.

시작하기 전에

이 가이드에서는 Binary Authorization을 설정했다고 가정합니다. 간단한 설정 과정은 빠른 시작을 참조하세요.

증명 기반의 완전한 엔드 투 엔드 가이드는 CLI를 사용하여 시작하기 또는 Console을 사용하여 시작하기를 참조하세요.

테스트 실행 사용 설정

테스트 실행을 사용 설정하려면 다음 단계를 따르세요.

gcloud

  1. 기본 Binary Authorization 정책을 내보냅니다.

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. 텍스트 편집기에서 enforcementMode를 DRYRUN_AUDIT_LOG_ONLY로 설정합니다.

    정책 YAML 파일은 다음과 같아야 합니다.

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/*
    - namePattern: gke.gcr.io/*
    - namePattern: gcr.io/stackdriver-agents/*
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: DRYRUN_AUDIT_LOG_ONLY
    name: projects/PROJECT_ID/policy
    
  3. 정책 YAML 파일을 Binary Authorization으로 다시 가져옵니다.

    gcloud container binauthz policy import /tmp/policy.yaml
    
  4. 로컬 kubeconfig 파일을 업데이트합니다.

    gcloud container clusters get-credentials \
    --zone us-central1-a \
    CLUSTER_NAME
    

    여기서 CLUSTER_NAME은 GKE 클러스터의 이름입니다.

Console

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

    Binary Authorization 페이지로 이동

  2. 정책 구성을 클릭하거나 정책이 있는 경우 정책 수정을 클릭합니다.

  3. 정책의 evaluationMode를 ALWAYS_ALLOW에서 ALWAYS_DENY로 변경하고 enforcementMode를 DRYRUN_AUDIT_LOG_ONLY로 설정합니다.

    정책 YAML 파일은 다음과 같이 표시될 수 있습니다.

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/*
    - namePattern: gke.gcr.io/*
    - namePattern: gcr.io/stackdriver-agents/*
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: DRYRUN_AUDIT_LOG_ONLY
    name: projects/PROJECT_ID/policy
    
  4. 정책 저장을 클릭합니다.

컨테이너 배포

  1. 컨테이너 이미지를 배포합니다.

    1. [선택사항]: 다음과 같은 pod.yaml 파일을 만듭니다.

      apiVersion: v1
      kind: Pod
      metadata:
        name: test-pod
      spec:
        containers:
        - name: test-container
          image: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
      
    2. 컨테이너 이미지를 배포합니다.

      kubectl apply -f pod.yaml
      
  2. pod가 실행 중인지 확인합니다.

    pod가 실행 중이어야 합니다. 확인하려면 다음을 실행합니다.

    kubectl get pods
    

    test-pod가 실행 중인 것을 확인할 수 있습니다.

  3. 감사 로그를 확인합니다.

    Cloud Logging에서 테스트 실행 감사 로그 항목을 보려면 Cloud Logging의 테스트 실행 이벤트를 참조하세요.

    테스트 실행 감사 로그의 예시는 다음과 같습니다.

    {
     insertId: "f87d1ef8-fa7b-4079-be90-d0638e7983ba"
     labels: {
      authorization.k8s.io/decision: "allow"
      authorization.k8s.io/reason: ""
      imagepolicywebhook.image-policy.k8s.io/dry-run: "true"
      imagepolicywebhook.image-policy.k8s.io/overridden-verification-result: "'gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4': Denied by an ALWAYS_DENY admission rule
    "
     }
     logName: "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
     operation: {…}
     protoPayload: {…}
     receiveTimestamp: "2020-06-10T15:59:23.857650559Z"
     resource: {…}
     timestamp: "2020-06-10T15:59:00.185878Z"
    }
    

    여기서 PROJECT_ID는 프로젝트 ID입니다.

정리

pod 삭제

kubectl delete -f /tmp/pod.yaml

테스트 실행 모드 사용 중지

Binary Authorization 정책의 defaultAdmissionRule에서 enforcementMode를 변경하여 테스트 실행 모드를 사용 중지해야 합니다. 예를 들면 다음과 같습니다.

   enforcementMode: ALWAYS_ALLOW