이 페이지에서는 정책 평가 서비스 Google Cloud CLI 명령어를 사용하여 이미지나 Kubernetes 리소스가 지속적 검증 검사 기반 플랫폼 정책을 준수하는지 빠르게 평가하는 방법을 보여줍니다.
개요
정책 평가 서비스는 지속적 검증(CV) 검사 기반 플랫폼 정책과 함께 사용할 수 있는 Binary Authorization 기능입니다. 정책 평가 서비스는 요청에 따라 지정된 컨테이너 이미지가 CV 플랫폼 정책을 준수하는지 여부를 평가합니다. 정책 평가 서비스는 gcloud CLI 명령어 및 projects.platforms.gke.policies.evaluate 메서드로 사용 가능합니다.
CV는 최소 24시간마다 한 번씩 정책 위반을 검사합니다. 따라서 CV가 사용 설정되거나 Kubernetes 리소스가 배포된 후 CV 이벤트가 Logging에 표시되는 데 최대 24시간이 걸릴 수 있습니다. 또한 CV는 정책 위반을 감지하면 로그 항목을 생성합니다. Kubernetes 리소스가 정책을 준수하면 CV에서 로그 항목을 생성하지 않습니다.
정책 평가 서비스는 이미지가 정책을 준수하는지 또는 이미지가 정책을 위반하는지 여부를 나타내는 결과를 출력합니다.
정책 평가 서비스를 사용하면 이미지가 정책을 준수하는지 여부를 빠르게 확인할 수 있습니다.
서비스를 사용할 때 이미지 URL을 Kubernetes 리소스에 직접 또는 내에서 지정하고 GKE CV 검사 기반 정책 이름도 지정합니다.
이렇게 하면 CV를 사용하기 전에 정책 평가 서비스를 사용하여 정책을 개발하고 규칙을 준수하지 않는 Kubernetes 리소스를 디버깅할 수 있습니다.
이 기능은 GKE CV 검사 기반 정책만 지원합니다.
또한 이미지는 다음과 같은 경우를 제외하고 이미지 다이제스트를 IMAGE_URL@IMAGE_DIGEST
형식으로 지정해야 합니다.
- 신뢰할 수 있는 디렉터리 검사: 이미지가 지정된 디렉터리에 있으면 검사가 통과됩니다.
- 예외 이미지 허용 목록: 다른 모든 검사에는
IMAGE_URL@IMAGE_DIGEST
형식의 이미지 다이제스트가 필요합니다.
시작하기 전에
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
필요한 역할
정책 평가 서비스를 사용하는 데 필요한 권한을 얻으려면 관리자에게 정책 프로젝트에 대한 정책 평가자(roles/binaryauthorization.policyEvaluator
)를 IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
정책에서 특정 검사를 사용하는 경우 관리자에게 다음과 같은 검사별 필수 역할을 부여해 달라고 요청해야 할 수 있습니다.
검사 기반 플랫폼 정책 평가
정책 평가 서비스에서 단일 이미지 URL 또는 JSON 형식이나 YAML 형식의 Kubernetes 리소스에 지정된 이미지를 평가할 수 있습니다.
Kubernetes 리소스로 검사 기반 플랫폼 정책 평가
gcloud CLI를 사용하여 Kubernetes 리소스로 정책을 평가하려면 다음 명령어를 실행합니다.
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
POLICY_ID
: 플랫폼 정책 ID입니다. 정책이 다른 프로젝트에 있으면projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
와 같이 전체 리소스 이름을 사용할 수 있습니다.POD_SPECIFICATION_PATH
: 포드 사양 경로입니다.
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --resource=POD_SPECIFICATION_PATH
Windows(PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --resource=POD_SPECIFICATION_PATH
Windows(cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --resource=POD_SPECIFICATION_PATH
gke
로 설정해야 하는 플랫폼을 지정하는 정책을 평가하려면 다음 명령어를 실행합니다.
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
POLICY_ID
: 플랫폼 정책 ID입니다. 정책이 다른 프로젝트에 있으면projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
와 같이 전체 리소스 이름을 사용할 수 있습니다.POD_SPECIFICATION_PATH
: 포드 사양 경로입니다.
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --platform=gke \ --resource=POD_SPECIFICATION_PATH
Windows(PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --platform=gke ` --resource=POD_SPECIFICATION_PATH
Windows(cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --platform=gke ^ --resource=POD_SPECIFICATION_PATH
이미지 URL로 검사 기반 플랫폼 정책 평가
이미지 URL을 사용하여 정책을 평가하려면 다음 명령어를 실행합니다.
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
POLICY_ID
: 플랫폼 정책 ID입니다. 정책이 다른 프로젝트에 있으면projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
와 같이 전체 리소스 이름을 사용할 수 있습니다.IMAGE_URL
: 포드 사양 경로입니다.
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=IMAGE_URL
Windows(PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=IMAGE_URL
Windows(cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=IMAGE_URL
--image
플래그를 사용하면 네임스페이스와 서비스 계정이 비어 있다고 암시적으로 간주됩니다. 평가 중인 정책에서 범위가 kubernetesNamespace
또는 kubernetesServiceAccount
로 지정된 검사 집합을 사용하면 반환된 결과가 정확하지 않을 수 있습니다.
명령어 결과 검토
명령어 결과에는 포드의 적합성 상태를 나타내는 최상위 결과가 포함됩니다. 다음과 같은 적합성 상태가 반환될 수 있습니다.
CONFORMANT
: Kubernetes 리소스가 플랫폼 정책을 준수합니다.NON_CONFORMANT
: Kubernetes 리소스가 플랫폼 정책을 준수하지 않습니다.ERROR
: 평가가 오류로 종료되었습니다.
응답에는 Kubernetes 리소스에 포함된 각 이미지에 대해 평가된 모든 검사의 적합성 상태에 대한 자세한 정보가 포함된 중첩된 결과도 포함됩니다.
ImageResults
블록마다 이미지가 허용되거나 허용되지 않는 이유를 설명하는 인간이 읽을 수 있는 explanation
필드가 포함되어 있습니다.
스크립팅을 지원하기 위해 이 명령어는 포드 사양이 정책을 준수하지 않거나 평가가 실패할 때 0이 아닌 종료 코드를 반환합니다.
다음 출력 예시에서는 두 가지 사례를 보여줍니다. 첫 번째 경우 Kubernetes 리소스가 정책을 준수합니다. 두 번째 경우 리소스가 정책을 준수하지 않습니다.
규정 준수 결과 보기
이 섹션에서는 포드가 플랫폼 정책을 준수하는 정책 평가 서비스 검사 출력을 설명합니다.
results:
- imageResults:
- checkSetResult:
checkResults:
results:
- displayName: My trusted directory check
evaluationResult:
verdict: CONFORMANT
explanation: Image is in a trusted directory
type: TrustedDirectoryCheck
displayName: Default check set
scope: {}
imageUri: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
verdict: CONFORMANT
kubernetesNamespace: default
kubernetesServiceAccount: default
podName: my-pod
verdict: CONFORMANT
verdict: CONFORMANT
출력에서는 다음 유형의 평가에 대한 CONFORMANT
결과가 반환됩니다.
- 검사: 이미지가 개별 검사(이 경우 신뢰할 수 있는 디렉터리 검사)를 준수합니다.
- 검사 집합: 이미지가 검사 집합의 각 검사를 준수합니다.
- 정책: 이미지가 정책을 준수합니다.
이미지가 정책을 준수하므로 명령어에서 종료 코드 0을 반환합니다.
위반 결과 보기
이 섹션에서는 포드가 플랫폼 정책을 준수하지 않는 정책 평가 서비스 검사 출력을 설명합니다.
results:
- imageResults:
- checkSetResult:
checkResults:
results:
- displayName: My trusted directory check
evaluationResult:
verdict: NON_CONFORMANT
explanation: Image isn't in a trusted directory
type: TrustedDirectoryCheck
displayName: Default check set
scope: {}
imageUri: us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0
verdict: NON_CONFORMANT
kubernetesNamespace: default
kubernetesServiceAccount: default
podName: my-pod
verdict: NON_CONFORMANT
verdict: NON_CONFORMANT
출력에서 이미지가 개별 검사(이 경우 신뢰할 수 있는 디렉터리 검사)를 준수하지 않으므로 모든 검사 집합인 최상위 결과는 NON_CONFORMANT
이고 명령어가 0이 아닌 종료 코드를 반환합니다.
정책 평가 서비스 테스트
이 섹션에서는 정책 평가 서비스를 테스트하는 방법을 설명합니다. 신뢰할 수 있는 디렉터리 검사가 포함된 검사 기반 플랫폼 정책을 만듭니다. 그런 다음 첫 번째 테스트에서 정책을 준수하는 포드 사양을 평가할 수 있습니다. 두 번째 테스트에서는 정책을 준수하지 않는 포드 사양을 평가합니다.
신뢰할 수 있는 디렉터리 검사가 포함된 정책을 만들려면 다음 명령어를 실행합니다.
플랫폼 정책 파일을 만듭니다.
cat << EOF > my-policy.yaml gkePolicy: checkSets: - checks: - displayName: "My trusted directory check" trustedDirectoryCheck: trustedDirPatterns: - "us-docker.pkg.dev/google-samples/containers/gke/" displayName: "My default check set" EOF
정책을 만듭니다.
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
- POLICY_ID: 선택한 플랫폼 정책 ID. 정책이 다른 프로젝트에 있으면
projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
와 같이 전체 리소스 이름을 사용할 수 있습니다. - POLICY_PATH: 정책 파일의 경로
- POLICY_PROJECT_ID: 정책 프로젝트 ID
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=POLICY_PATH \ --project=POLICY_PROJECT_ID
Windows(PowerShell)
gcloud beta container binauthz policy create POLICY_ID ` --platform=gke ` --policy-file=POLICY_PATH ` --project=POLICY_PROJECT_ID
Windows(cmd.exe)
gcloud beta container binauthz policy create POLICY_ID ^ --platform=gke ^ --policy-file=POLICY_PATH ^ --project=POLICY_PROJECT_ID
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=my-policy.yaml
- POLICY_ID: 선택한 플랫폼 정책 ID. 정책이 다른 프로젝트에 있으면
규정 준수 이미지 평가
이 섹션에서는 이 가이드의 앞부분에서 만든 정책을 준수하는 포드 사양을 평가합니다. 포드 사양이 신뢰할 수 있는 디렉터리 검사의 trustedDirPatterns
에 지정된 디렉터리에 있는 이미지를 참조하므로 평가에서 포드 사양이 CONFORMANT
임을 나타내는 결과를 생성합니다.
포드 사양을 만듭니다.
cat << EOF > my-conforming-pod.json { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "" }, "spec": { "containers": [ { "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" } ] } } EOF
다음 명령어를 실행하여 정책 평가 서비스를 사용합니다.
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
POLICY_ID
: 플랫폼 정책 ID입니다. 정책이 다른 프로젝트에 있으면projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
와 같이 전체 리소스 이름을 사용할 수 있습니다.my-conforming-pod.json
: 포드 사양 경로입니다.
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=my-conforming-pod.json
Windows(PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=my-conforming-pod.json
Windows(cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=my-conforming-pod.json
위반 이미지 평가
이 섹션에서는 이 가이드의 앞부분에서 만든 정책을 준수하지 않는 포드 사양을 평가합니다. 포드 사양이 신뢰할 수 있는 디렉터리 검사의 trustedDirPatterns
에 지정된 디렉터리의 외부에 있는 이미지를 참조하므로 평가에서 포드 사양이 NON_CONFORMANT
임을 나타내는 결과를 생성합니다.
위반 이미지를 평가하려면 다음 명령어를 실행합니다.
포드 사양을 만듭니다.
cat << EOF > my-non-conforming-pod.json { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "" }, "spec": { "containers": [ { "image": "us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0" } ] } } EOF
다음 명령어를 실행하여 정책 평가 서비스를 사용합니다.
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
POLICY_ID
: 플랫폼 정책 ID입니다. 정책이 다른 프로젝트에 있으면projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID
와 같이 전체 리소스 이름을 사용할 수 있습니다.my-non-conforming-pod.json
: 포드 사양 경로입니다.
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud beta container binauthz policy evaluate POLICY_ID \ --image=my-non-conforming-pod.json
Windows(PowerShell)
gcloud beta container binauthz policy evaluate POLICY_ID ` --image=my-non-conforming-pod.json
Windows(cmd.exe)
gcloud beta container binauthz policy evaluate POLICY_ID ^ --image=my-non-conforming-pod.json