GKE로 Binary Authorization 정책 구성
이 빠른 시작에서는 Binary Authorization 정책에서 기본 규칙을 구성하고 테스트하는 방법을 보여줍니다.
이 빠른 시작에서는 정책의 기본 규칙을 보고 구성합니다. 기본 규칙은 모든 이미지 배포를 허용합니다. Google Kubernetes Engine(GKE) 클러스터에 컨테이너 이미지를 배포하여 이를 테스트합니다. 그런 후 모든 이미지 배포를 금지하도록 기본 규칙을 설정하고 이미지 배포를 시도합니다.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
kubectl
을 설치합니다.
Binary Authorization 시행이 사용 설정된 클러스터 만들기
이제 Binary Authorization이 사용 설정된 GKE 클러스터를 만듭니다. 배포된 컨테이너 이미지를 실행할 클러스터입니다.
Binary Authorization은 Autopilot 또는 Standard 클러스터에서 작동합니다.
Google Cloud 콘솔
다음 단계에서는 Autopilot 클러스터를 구성합니다.
Google Cloud 콘솔에서 GKE Kubernetes 클러스터 페이지로 이동합니다.
만들기를 클릭합니다.
Autopilot 클러스터 만들기에서 다음을 수행합니다.
이름 필드에
test-cluster
를 입력합니다.리전 메뉴에서
us-central1
을 선택합니다.고급 설정 섹션을 확장합니다.
보안 링크를 클릭하여 보안 패널을 표시합니다.
보안 패널에서 Binary Authorization 사용 설정 체크박스를 선택합니다.
시행 전용을 선택합니다.
다음을 클릭한 후 다음:검토 및 만들기를 클릭합니다.
만들기를 클릭하여 클러스터 만들기를 시작합니다.
gcloud
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
플래그가 사용 설정된 gcloud container clusters create
를 실행합니다.
gcloud container clusters create \ --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \ --zone us-central1-a \ test-cluster
클러스터를 만드는 데 몇 분 정도 걸릴 수 있습니다.
기본 정책
기본적으로 Binary Authorization 정책은 모든 컨테이너 이미지를 배포하도록 구성됩니다.
Google Cloud 콘솔
기본 정책을 보려면 다음을 수행합니다.
Google Cloud 콘솔에서 Binary Authorization 페이지로 이동합니다.
콘솔에 정책의 세부정보가 표시됩니다.
정책 수정을 클릭합니다.
프로젝트 기본 규칙에서 모든 이미지 허용 옵션이 선택됩니다.
gcloud
기본 정책을 보려면 다음과 같이 정책 YAML 파일을 내보냅니다.
gcloud container binauthz policy export
기본적으로 파일에 포함되는 내용은 다음과 같습니다.
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"
이 명령어는 다음 출력을 생성합니다.
{ "name": "projects/PROJECT_ID/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
시행 정책 테스트
클러스터에 샘플 컨테이너 이미지를 배포하여 시행 정책을 테스트할 수 있습니다.
이 빠른 시작에서는 Container Registry의 경로 gcr.io/google-samples/hello-app
에 있는 샘플 컨테이너 이미지를 사용합니다. 이 샘플 이미지는 Google에서 만든 공개 컨테이너 이미지로 Hello, World! 샘플 애플리케이션을 포함합니다.
Google Cloud 콘솔
정책을 테스트하려면 다음을 수행합니다.
Google Cloud 콘솔에서 GKE 클러스터 페이지로 이동합니다.
배포를 클릭합니다.
콘솔에 배포에 대한 세부정보를 입력하라는 메시지가 표시됩니다.
기존 컨테이너 이미지를 선택합니다.
컨테이너 이미지 경로로
gcr.io/google-samples/hello-app:1.0
을 입력합니다.계속을 클릭합니다.
애플리케이션 이름 필드에
hello-server
를 입력합니다.배포를 클릭합니다.
kubectl
정책을 테스트하려면 다음을 수행합니다.
로컬
kubeconfig
파일을 업데이트합니다.gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
이 파일은 GKE에서 클러스터에 액세스하는 데 필요한 사용자 인증 정보와 엔드포인트 정보를 제공합니다.
이미지를 배포합니다.
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
이제 Binary Authorization에서 배포를 허용했는지 확인합니다.
Google Cloud 콘솔
이미지가 배포되었는지 확인하려면 Google Cloud 콘솔에서 GKE 워크로드 페이지로 이동합니다.
배포의 워크로드는 이미지가 성공적으로 배포되었음을 나타내는 녹색 아이콘으로 나타납니다.
kubectl
이미지가 배포되었는지 확인하려면 다음을 수행합니다.
kubectl get pods
위 명령어가 반환하는 메시지는 다음과 같으며, 배포가 성공했음을 나타냅니다.
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
다음 단계를 진행하려면 배포를 삭제해야 합니다.
Google Cloud 콘솔
배포를 삭제하려면 다음을 수행합니다.
Google Cloud 콘솔에서 GKE 워크로드 페이지로 돌아갑니다.
hello-server
워크로드를 선택합니다.삭제를 클릭합니다.
kubectl
배포를 삭제하려면 다음을 수행합니다.
kubectl delete deployment hello-server
모든 이미지를 허용하지 않도록 시행 정책 구성
이제 모든 이미지의 배포를 허용하는 대신 차단하도록 정책을 수정합니다.
Google Cloud 콘솔
정책을 수정하려면 다음을 수행합니다.
Google Cloud 콘솔에서 Binary Authorization 페이지로 돌아갑니다.
정책 수정을 클릭합니다.
모든 이미지 차단을 선택합니다.
정책 저장을 클릭합니다.
gcloud
정책을 수정하려면 다음을 수행합니다.
정책 YAML 파일을 내보냅니다.
gcloud container binauthz policy export > /tmp/policy.yaml
텍스트 편집기에서
evaluationMode
를ALWAYS_ALLOW
에서ALWAYS_DENY
로 변경합니다.정책 YAML 파일은 다음과 같이 표시됩니다.
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
정책 YAML 파일을 Binary Authorization으로 다시 가져옵니다.
gcloud container binauthz policy import /tmp/policy.yaml
REST API
정책을 수정하려면 다음을 수행합니다.
JSON 형식으로 업데이트된 정책을 사용하여 텍스트 파일을 만듭니다.
cat > /tmp/policy.json << EOM { "name": "projects/${PROJECT_ID}/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_DENY", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } } EOM
업데이트된 정책을 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"
정책 다시 테스트
다시 샘플 컨테이너 이미지를 클러스터에 배포하여 정책을 테스트합니다. 이번에는 Binary Authorization에서 이미지의 배포를 차단합니다.
Google Cloud 콘솔
이미지를 배포합니다.
Google Cloud 콘솔에서 GKE 클러스터 페이지로 이동합니다.
배포를 클릭합니다.
콘솔에 배포에 대한 세부정보를 입력하라는 메시지가 표시됩니다.
기존 컨테이너 이미지를 선택합니다.
컨테이너 이미지 경로로
gcr.io/google-samples/hello-app:1.0
을 입력합니다.계속을 클릭합니다.
애플리케이션 이름 필드에
hello-server
를 입력합니다.배포를 클릭합니다.
kubectl
이미지를 배포합니다.
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
이제 정책이 차단되었는지 확인할 수 있습니다.
Google Cloud 콘솔
이미지가 배포되지 않았는지 확인하려면 다음을 수행합니다.
Google Cloud 콘솔에서 GKE 워크로드 페이지로 돌아갑니다.
컨테이너 이미지의 워크로드는 이미지를 배포할 수 없음을 나타내는 빨간색 아이콘으로 나타납니다.
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 POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Denied by always_deny admission rule
이 출력에서 각 항목의 의미는 다음과 같습니다.
- POD_NAME: 포드의 이름입니다.
- IMAGE_NAME: 이미지의 이름입니다.
- ATTESTOR_NAME: 증명자의 이름입니다.
삭제
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.
GKE에서 만든 클러스터를 삭제합니다.
콘솔
클러스터를 삭제하려면 다음을 수행합니다.
Google Cloud 콘솔에서 GKE 클러스터 페이지로 이동합니다.
test-cluster
클러스터를 선택하고 삭제를 클릭합니다.
gcloud
클러스터를 삭제하려면 다음을 수행합니다.
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
다음 단계
built-by-cloud-build
증명자를 사용하여 Cloud Build에서 빌드한 이미지만 배포 (미리보기)합니다.- 증명에 대한 엔드 투 엔드 튜토리얼은 다음을 참조하세요.
- DevOps 관련 리소스를 읽고 DevOps 연구 및 평가(DORA) 연구 프로그램 살펴보기