빠른 시작

이 빠른 시작에서는 Binary Authorization에서 간단한 정책을 구성하고 테스트하는 방법을 보여줍니다.

이 빠른 시작에서는 기본 정책을 보고 테스트한 다음 Container Registry에서 Google Kubernetes Engine(GKE) 클러스터로의 모든 컨테이너 이미지 배포를 거부하도록 정책을 구성합니다. 이는 실제 정책이 아닙니다. 실제 정책에서는 일반적으로 컨테이너 이미지를 배포하기 전에 사용자 환경에서 증명자에 의한 증명이 필요합니다.

필수 증명으로 정책을 구성하는 방법을 설명하는 가이드는 CLI를 사용하여 시작하기 또는 Console을 사용하여 시작하기를 참조하세요.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Cloud SDK 설치 및 초기화
  5. kubectl을 설치합니다.

필요한 API 사용 설정

GKE, 컨테이너 분석, Binary Authorization에 API를 사용 설정합니다.

gcloud

  1. gcloud 명령어에 사용되는 기본 Google Cloud 프로젝트를 설정합니다.

    PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    

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

  2. 필요한 API를 사용 설정합니다.

    gcloud services enable \
        container.googleapis.com \
        containeranalysis.googleapis.com \
        binaryauthorization.googleapis.com
    

Console

필요한 API를 사용 설정합니다.

API 사용 설정

이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

Binary Authorization이 사용 설정된 클러스터 만들기

이제 Binary Authorization이 사용 설정된 GKE 클러스터를 만듭니다. 배포된 컨테이너 이미지를 실행할 클러스터입니다.

gcloud

--enable-binauthz 플래그가 사용 설정된 gcloud container clusters create를 실행합니다.

gcloud container clusters create \
    --enable-binauthz \
    --zone us-central1-a \
    test-cluster

Console

  1. Cloud Console에서 GKE 클러스터 페이지로 이동합니다.

    GKE 페이지로 이동

    Console에 Google Cloud 프로젝트의 GKE 클러스터 목록이 표시됩니다.

  2. 클러스터 만들기를 클릭합니다.

  3. 이름 필드에 test-cluster를 입력합니다.

    표준 클러스터 템플릿의 이름 필드

  4. 위치 유형 옵션에서 영역을 선택합니다.

  5. 영역 드롭다운 목록에서 us-central1-a를 선택합니다.

  6. 가용성, 네트워킹, 보안, 추가 기능을 클릭합니다.

  7. 보안 섹션에서 Binary Authorization 사용 설정을 선택합니다.

    Binary Authorization 옵션 사용 설정

  8. 만들기를 클릭합니다.

기본 정책

기본적으로 Binary Authorization 정책은 모든 컨테이너 이미지를 배포하도록 구성됩니다.

gcloud

기본 정책을 보려면 정책 YAML 파일을 내보내세요.

gcloud container binauthz policy export

기본적으로 파일에 포함되는 내용은 다음과 같습니다.

admissionWhitelistPatterns:
- namePattern: gcr.io/google_containers/*
- namePattern: gcr.io/google-containers/*
- namePattern: k8s.gcr.io/*
- namePattern: gke.gcr.io/*
- namePattern: gcr.io/stackdriver-agents/*
globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
  evaluationMode: ALWAYS_ALLOW
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/PROJECT_ID/policy

REST API

기본 정책을 보려면 JSON 형식으로 검색하세요.

curl \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "x-goog-user-project: ${PROJECT_ID}" \
    "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"

REST API는 다음을 반환합니다.

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "gcr.io/google_containers/*"
    },
    {
      "namePattern": "gcr.io/google-containers/*"
    },
    {
      "namePattern": "k8s.gcr.io/*"
    },
    {
      "namePattern": "gke.gcr.io/*"
    },
    {
      "namePattern": "gcr.io/stackdriver-agents/*"
    }
  ],
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

Console

기본 정책을 보려면 다음 안내를 따르세요.

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

    Binary Authorization 페이지로 이동

    Console에 정책의 세부정보가 표시됩니다.

    기본 규칙을 보여주는 정책 탭 스크린샷

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

  3. 프로젝트 기본 규칙에서 모든 이미지 허용 옵션이 선택됩니다.

    기본 규칙 유형을 선택하는 옵션 스크린샷

정책 테스트

클러스터에 샘플 컨테이너 이미지를 배포하여 정책을 테스트할 수 있습니다.

이 빠른 시작에서는 Container Registry의 경로 gcr.io/google-samples/hello-app에 있는 샘플 컨테이너 이미지를 사용합니다. 이 샘플 이미지는 Google에서 만든 공개 컨테이너 이미지로 Hello, World! 샘플 애플리케이션을 포함합니다.

kubectl

정책을 테스트하려면 다음을 수행하세요.

  1. 로컬 kubeconfig 파일을 업데이트합니다.

    gcloud container clusters get-credentials \
        --zone us-central1-a \
        test-cluster
    

    이 파일은 GKE에서 클러스터에 액세스하는 데 필요한 사용자 인증 정보와 엔드포인트 정보를 제공합니다.

  2. 이미지를 배포합니다.

    kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
    

Console

정책을 테스트하려면 다음을 수행하세요.

  1. Cloud Console에서 GKE 클러스터 페이지로 이동합니다.

    GKE 페이지로 이동

  2. 배포를 클릭합니다.

    Console에 배포에 대한 세부정보를 입력하라는 메시지가 표시됩니다.

  3. 기존 컨테이너 이미지를 선택합니다.

    배포 만들기 페이지 스크린샷

  4. 컨테이너 이미지 경로로 gcr.io/google-samples/hello-app:1.0을 입력합니다.

  5. 계속을 클릭합니다.

    배포 구성 페이지 스크린샷

  6. 애플리케이션 이름 필드에 hello-server를 입력합니다.

  7. 배포를 클릭합니다.

이제 Binary Authorization에서 배포를 허용했는지 확인합니다.

kubectl

이미지가 배포되었는지 확인하려면 다음을 실행하세요.

kubectl get pods

위 명령어가 반환하는 메시지는 다음과 같으며, 배포가 성공했음을 나타냅니다.

NAME                            READY     STATUS    RESTARTS   AGE
hello-server-579859fb5b-h2k8s   1/1       Running   0          1m

Console

이미지가 배포되었는지 확인하려면 Google Cloud Console의 GKE 워크로드 페이지로 이동합니다.

GKE 페이지로 이동

배포의 워크로드는 이미지가 성공적으로 배포되었음을 나타내는 녹색 아이콘으로 나타납니다.

배포 성공 메시지 스크린샷

다음 단계를 진행하려면 배포를 삭제해야 합니다.

kubectl

배포를 삭제하려면 다음 안내를 따르세요.

kubectl delete deployment hello-server

Console

배포를 삭제하려면 다음 안내를 따르세요.

  1. Google Cloud Console의 GKE 워크로드 페이지로 돌아갑니다.

    GKE 페이지로 이동

  2. test-server 워크로드를 선택합니다.

  3. 삭제를 클릭합니다.

모든 이미지를 허용하지 않도록 정책 구성

이제 모든 이미지의 배포를 허용하는 대신 차단하도록 정책을 수정합니다.

gcloud

정책을 수정하려면 다음을 수행하세요.

  1. 정책 YAML 파일을 내보냅니다.

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. 텍스트 편집기에서 evaluationModeALWAYS_ALLOW에서 ALWAYS_DENY로 변경합니다.

    정책 YAML 파일은 다음과 같이 표시됩니다.

    globalPolicyEvaluationMode: ENABLE
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    name: projects/PROJECT_ID/policy
    
  3. 정책 YAML 파일을 Binary Authorization으로 다시 가져옵니다.

    gcloud container binauthz policy import /tmp/policy.yaml
    

REST API

정책을 수정하려면 다음을 수행하세요.

  1. JSON 형식으로 업데이트된 정책을 사용하여 텍스트 파일을 만듭니다.

    cat > /tmp/policy.json << EOM
    {
      "name": "projects/${PROJECT_ID}/policy",
      "globalPolicyEvaluationMode": "ENABLE",
      "defaultAdmissionRule": {
        "evaluationMode": "ALWAYS_DENY",
        "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
      }
    }
    EOM
    
  2. 업데이트된 정책을 REST API로 보냅니다.

    curl -X PUT \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "x-goog-user-project: ${PROJECT_ID}" \
        --data-binary @/tmp/policy.json  \
        "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
    

Console

정책을 수정하려면 다음을 수행하세요.

  1. Google Cloud Console의 Binary Authorization 페이지로 돌아갑니다.

    Binary Authorization 페이지로 이동

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

  3. 모든 이미지 차단을 선택합니다.

    기본 규칙 유형을 선택하는 옵션 스크린샷

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

정책 다시 테스트

다시 샘플 컨테이너 이미지를 클러스터에 배포하여 정책을 테스트합니다. 이번에는 Binary Authorization에서 이미지의 배포를 차단합니다.

kubectl

이미지를 배포합니다.

kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080

Console

이미지를 배포합니다.

  1. Cloud Console에서 GKE 클러스터 페이지로 이동합니다.

    GKE 페이지로 이동

  2. 배포를 클릭합니다.

    Console에 배포에 대한 세부정보를 입력하라는 메시지가 표시됩니다.

  3. 기존 컨테이너 이미지를 선택합니다.

    배포 만들기 페이지 스크린샷

  4. 컨테이너 이미지 경로로 gcr.io/google-samples/hello-app:1.0을 입력합니다.

  5. 계속을 클릭합니다.

    배포 구성 페이지 스크린샷

  6. 애플리케이션 이름 필드에 hello-server를 입력합니다.

  7. 배포를 클릭합니다.

이제 정책이 차단되었는지 확인할 수 있습니다.

kubectl

이미지가 배포되지 않았는지 확인하려면 다음 안내를 따르세요.

kubectl get pods

이 명령어는 이미지가 배포되지 않았음을 나타내는 다음 메시지를 출력합니다.

No resources found.

배포에 대한 세부정보를 확인할 수 있습니다.

kubectl get event --template \
'{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'

위 명령어는 정책에서 배포를 허용하지 않았음을 나타냅니다.

FailedCreate:Error creating: pods "hello-server-579859fb5b-lvfgd" is forbidden:
image policy webhook backend denied one or more images: Denied by default admission
rule. Overridden by evaluation mode

Console

이미지가 배포되지 않았는지 확인하려면 다음 안내를 따르세요.

Google Cloud Console의 GKE 워크로드 페이지로 돌아갑니다.

GKE 페이지로 이동

컨테이너 이미지의 워크로드는 이미지를 배포할 수 없음을 나타내는 빨간색 아이콘으로 나타납니다.

실패한 배포 메시지 스크린샷

정리

이 빠른 시작에서 사용한 리소스의 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.

GKE에서 만든 클러스터를 삭제합니다.

gcloud

클러스터를 삭제하려면 다음을 실행하세요.

gcloud container clusters delete \
    --zone=us-central1-a \
    test-cluster

Console

클러스터를 삭제하려면 다음 안내를 따르세요.

  1. Cloud Console에서 GKE 클러스터 페이지로 이동합니다.

    GKE 페이지로 이동

  2. test-cluster 클러스터를 선택하고 삭제를 클릭합니다.

다음 단계