Binary Authorization 정책 업데이트
이 문서에서는 Binary Authorization 정책에서 이미지를 예외 처리하는 방법을 설명합니다.
이 문서에서는 Container Registry 및 Artifact Registry의 컨테이너 이미지를 Binary Authorization 시행 대상에서 제외하도록 정책을 업데이트하고 다른 모든 컨테이너의 배포를 허용하지 않도록 기본 규칙을 설정합니다.
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a 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.
-
Enable the Artifact Registry, Binary Authorization APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Cloud Shell을 사용하지 않는 경우
kubectl
을 설치합니다.
Binary Authorization이 사용 설정된 클러스터 만들기
Binary Authorization이 사용 설정된 GKE 클러스터를 만듭니다. 배포된 컨테이너 이미지를 실행할 클러스터입니다.
Google Cloud 콘솔
Google Cloud 콘솔에서 GKE 클러스터 페이지로 이동합니다.
콘솔에 Google Cloud 프로젝트의 GKE 클러스터 목록이 표시됩니다.
클러스터 만들기를 클릭합니다.
이름 필드에
test-cluster
를 입력합니다.위치 유형 옵션에서 영역을 선택합니다.
영역 드롭다운 목록에서
us-central1-a
를 선택합니다.보안 링크를 클릭하여 보안 패널을 표시합니다.
보안 패널에서 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/<var>PROJECT_ID</var>/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", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
예외 이미지만 허용
이 섹션에서는 이미지를 예외 처리하고 다른 모든 이미지의 배포를 허용하지 않도록 정책을 수정하는 방법을 설명합니다.
Google Cloud 콘솔
정책을 수정하려면 다음을 수행합니다.
Google Cloud 콘솔에서 Binary Authorization 페이지로 돌아갑니다.
정책 수정을 클릭합니다.
모든 이미지 차단을 선택합니다.
배포 규칙에서 예외 처리된 이미지에서 이미지 경로를 확장합니다.
이미지 경로 추가를 클릭합니다.
Container Registry
새 이미지 경로에서 Container Registry 저장소의 다음 경로를 붙여넣습니다.
gcr.io/google-samples/hello-app:1.0
Artifact Registry
새 이미지 경로에서 Artifact Registry 저장소의 다음 경로를 붙여넣습니다.
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
완료를 클릭하여 이미지 경로를 저장합니다.
정책 저장을 클릭합니다.
gcloud
Container Registry 및 Artifact Registry에서 예외 이미지를 허용하도록 정책을 수정하려면 다음을 수행합니다.
정책 YAML 파일을 내보냅니다.
gcloud container binauthz policy export > /tmp/policy.yaml
텍스트 편집기에서
evaluationMode
를ALWAYS_ALLOW
에서ALWAYS_DENY
로 변경하고 예외 이미지를admissionWhitelistPatterns
에 추가합니다.Container Registry 및 Artifact Registry에서 다음 예시 이미지를 예외 처리하려면 정책 YAML 파일을 다음과 같이 수정합니다.
admissionWhitelistPatterns: - namePattern: gcr.io/google-samples/hello-app:1.0 - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/<var>PROJECT_ID</var>/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", "admissionWhitelistPatterns": [ { "namePattern": "gcr.io/google-samples/hello-app:1.0" }, { "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" } ], "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"
정책 테스트
Exempt image
허용 목록에 추가한 이미지를 배포하여 정책을 테스트하려면 다음을 수행합니다.
예외 이미지를 클러스터에 배포합니다.
Google Cloud 콘솔
예외 이미지를 배포합니다.
Google Cloud 콘솔에서 GKE 클러스터 페이지로 이동합니다.
배포를 클릭합니다.
콘솔에 배포에 대한 세부정보를 입력하라는 메시지가 표시됩니다.
기존 컨테이너 이미지를 선택합니다.
컨테이너 이미지 경로를 입력합니다.
Container Registry
Container Registry에서 이미지를 배포하려면 다음을 입력합니다.
gcr.io/google-samples/hello-app:1.0
Artifact Registry
Artifact Registry에서 이미지를 배포하려면 다음을 입력합니다.
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
계속을 클릭합니다.
애플리케이션 이름 필드에
hello-server
를 입력합니다.배포를 클릭합니다.
kubectl
Container Registry
Container Registry에서 이미지를 배포합니다.
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Artifact Registry
Artifact Registry에서 이미지를 배포합니다.
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
이미지가 배포하도록 허용되었는지 확인합니다.
Google Cloud 콘솔
이미지가 배포되었는지 확인하려면 다음을 수행합니다.
- GKE 페이지로 이동합니다.
- 워크로드 페이지로 이동합니다.
hello-server
워크로드는 실행 중임을 나타내는 녹색 아이콘으로 표시됩니다.kubectl
이미지가 배포하도록 허용되었는지 확인하려면 다음 명령어를 입력합니다.
kubectl get pods
이미지가 실행되는 것이 확인됩니다.
포드를 삭제합니다.
Google Cloud 콘솔
GKE 워크로드 페이지에서 다음을 수행합니다.
hello-server 워크로드를 선택합니다.
삭제를 클릭합니다.
리소스를 삭제하라는 메시지가 나타나면 삭제를 클릭합니다.
kubectl
kubectl delete pod hello-server
삭제
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.
GKE에서 만든 클러스터를 삭제합니다.
콘솔
클러스터를 삭제하려면 다음을 수행합니다.
Google Cloud 콘솔에서 GKE 클러스터 페이지로 이동합니다.
test-cluster
클러스터를 선택하고 삭제를 클릭합니다.
gcloud
클러스터를 삭제하려면 다음 명령어를 입력합니다.
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
다음 단계
- 와일드 카드를 사용하여 여러 이미지를 제외하는 등 이미지를 제외하는 방법에 대해 자세히 알아보려면 이미지 제외를 참조하세요.
- 증명이 필요한 정책을 설정하고 시행하는 방법을 설명하는 엔드 투 엔드 튜토리얼은 다음을 참조하세요.
- DevOps 관련 리소스를 읽고 DevOps 연구 및 평가(DORA) 연구 프로그램 살펴보기