REST API를 사용하여 정책 구성

이 페이지에서는 REST API를 사용하여 Binary Authorization 정책을 구성하는 방법을 설명합니다. 또는 Google Cloud CLI 또는 Google Cloud Console을 사용하여 이러한 태스크를 수행해도 됩니다. 이 단계는 Binary Authorization 설정의 일부입니다.

개요

정책은 한 개 이상의 컨테이너 이미지 배포를 제어하는 규칙 집합입니다.

REST API를 사용하여 정책을 구성할 때 서비스와의 gcloud 상호작용에 사용되는 YAML 구조와 동일한 JSON 형식으로 값을 채웁니다. 자세한 내용은 정책 YAML 참조를 확인하세요.

정책을 구성하려면 다음을 수행해야 합니다.

  • 정책 JSON 파일 내보내기
  • 예외 이미지 추가(선택사항)
  • 기본 규칙 설정
  • 클러스터별 규칙 추가(선택사항)
  • 정책 JSON 파일 가져오기

대부분의 경우 실제 정책을 통해 모든 필수 증명자가 컨테이너 이미지를 배포할 준비가 되었는지 확인합니다. 이 경우 정책을 구성할 때 증명자를 만들어야 합니다.

기본 프로젝트 설정

아직 기본 Google Cloud 프로젝트를 설정하지 않은 경우 설정합니다.

PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}

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

정책 내보내기

이 섹션은 GKE, GKE 클러스터, Cloud Run, Anthos Service Mesh에 적용됩니다.

로컬 시스템에 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" \
    -o "/tmp/policy.json"

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

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

정책 내보내기의 기본 admissionWhitelistPatterns 목록에 이 가이드에 표시된 것과 다른 이미지 경로가 표시될 수 있습니다.

예외 이미지 관리

이 섹션은 GKE, GKE 클러스터, Cloud Run, Anthos Service Mesh에 적용됩니다.

예외 이미지는 정책 규칙에서 제외되는 컨테이너 이미지입니다. Binary Authorization에서는 항상 예외 이미지를 배포할 수 있습니다.

예외 이미지는 admissionWhitelistPatterns에 레지스트리 경로를 나열하여 지정합니다. 이 경로는 Container Registry 또는 다른 이미지 레지스트리를 참조할 수 있습니다. 시행자는 시스템 정책 평가 모드에서 제외된 이미지 다음에 admissionWhitelistPatterns의 예외 이미지를 처리합니다.

예외 이미지를 추가하려면 정책 JSON 파일의 admissionWhitelistPatterns 목록 아래에 namePattern 노드를 추가합니다.

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "MATCHING_PATTERN"
    }
  ],
  ...
}

여기서 MATCHING_PATTERN은 정확하게 일치하는 레지스트리 내 단일 이미지 또는 와일드카드 기호(*, **)를 사용하여 패턴과 일치하는 이미지에 대한 경로입니다.

Cloud Run

이 섹션은 Cloud Run에 적용됩니다.

태그가 포함된 이미지 이름을 직접 지정할 수 없습니다. 예를 들어 IMAGE_PATH:latest를 지정할 수 없습니다.

태그가 포함된 이미지 이름을 지정하려면 다음과 같이 와일드 카드를 사용해서 이미지 이름을 지정해야 합니다.

  • 단일 이미지의 모든 버전에 *을 사용합니다(예: us-docker.pkg.dev/myproject/container/hello@*).
  • 프로젝트의 모든 이미지에 **을 사용합니다(예: us-docker.pkg.dev/myproject/**).

경로 이름을 사용하여 IMAGE_PATH@DIGEST 형식으로 다이제스트를 지정할 수 있습니다.

시스템 정책 평가 모드

이 섹션은 GKE 및 GKE 클러스터에 적용됩니다.

시스템 정책 평가 모드의 정책 설정을 사용하면 구성한 정책을 평가하기 전에 Binary Authorization에서 시스템 정책을 평가할 수 있습니다. GKE에서 사용하는 Google 관리 시스템 이미지 목록을 제외하는 시스템 정책은 Google에서 관리합니다. 시스템 정책에 나열된 이미지는 정책 시행으로 차단되지 않습니다. 이 설정을 사용 설정하지 않을 경우 예외 이미지 목록을 직접 관리해야 합니다. 예외 이미지 관리 방법을 알아보세요.

다음 명령어를 사용하여 시스템 정책의 콘텐츠를 확인할 수 있습니다.

gcloud alpha container binauthz policy export-system-policy

시스템 정책 평가 모드를 사용 설정하려면 정책 JSON 파일에 다음 최상위 노드를 추가합니다.

"globalPolicyEvaluationMode": "ENABLE"

시스템 정책 평가 모드를 사용 중지하려면 다음을 추가합니다.

"globalPolicyEvaluationMode": "DISABLE"

다음과 같이 특정 리전과 연결된 시스템 정책을 내보낼 수 있습니다.

gcloud alpha container binauthz policy export-system-policy \
  --location=REGION > /tmp/policy.yaml

REGION을 내보내려는 시스템 정책과 연결된 리전(또는 'global')으로 바꿉니다. 예를 들면 asia-east1, europe-west1, us-central1 등이 있습니다.

--location을 생략하거나 --location=global을 지정하면 명령어가 업데이트를 수신할 마지막 리전 그룹의 리전에서 시스템 정책을 출력합니다. 시스템 정책에 대한 대부분의 변경사항은 추가 항목이므로 현재 모든 리전에서 허용되는 시스템 이미지 집합이 출력에 표시됩니다.

기본 규칙 설정

이 섹션은 GKE, GKE 클러스터, Cloud Run, Anthos Service Mesh에 적용됩니다.

규칙은 컨테이너 이미지를 배포하기 전에 전달해야 하는 제약조건을 정의하는 정책의 일부입니다. 모든 허용 요청에는 연결된 GKE 클러스터가 있습니다. 요청이 클러스터별 규칙에 부합되지 않으면 기본 규칙이 사용됩니다.

기본 규칙은 정책의 defaultAdmissionRule 노드에 정의되어 있습니다. 이 규칙에 대한 자세한 내용은 정책 YAML 참조의 ADMISSION_RULE을 참조하세요. 기본 규칙의 예시는 정책 예시를 참조하세요.

기본 규칙을 설정하려면 필요에 따라 정책 JSON 파일에서 defaultAdmissionRule 노드를 수정하세요.

  "defaultAdmissionRule": {
    "evaluationMode": "EVAL_MODE",
    "enforcementMode": "ENFORCEMENT_MODE"
    requireAttestationsBy: [
      ATTESTOR,
      ...
    ]
  }

각 항목의 의미는 다음과 같습니다.

  • EVAL_MODE는 컨테이너 이미지의 배포를 허용하기 전에 Binary Authorization에서 평가하는 제약조건의 유형을 지정합니다.
  • ENFORCEMENT_MODE는 컨테이너 이미지가 규칙에 정의되어 있는 제약조건을 준수하지 않을 경우 취해야 하는 조치를 지정합니다.
  • ATTESTOR는 컨테이너 이미지를 배포하기 전에 이를 서명해야 하는 증명(필요한 경우)을 지정합니다. 증명자에는 projects/PROJECT_ID/attestors/ATTESTOR_NAME 형식으로 된 정규화된 경로를 사용하세요.

규칙을 통해 모든 필수 증명자가 컨테이너 이미지를 서명했는지 확인한 경우 이 단계를 완료하기 전에 증명자를 만들어야 합니다.

클러스터별 규칙 설정(선택사항)

이 섹션은 GKE 및 GKE 클러스터에 적용됩니다.

클러스터에 한 개 이상의 클러스터별 규칙이 있을 수도 있습니다. 이 유형의 규칙은 지정된 GKE 클러스터에만 적용됩니다. 클러스터에 자체 규칙이 없으면 기본 규칙이 사용됩니다. 클러스터별 규칙은 정책의 선택적 부분입니다.

클러스터별 규칙은 정책 JSON 파일의 clusterAdmissionRules 노드에 정의되어 있습니다. 이 규칙에 대한 자세한 내용은 정책 YAML 참조의 ADMISSION_RULE을 참조하세요. 예시를 보려면 정책 예시에서 클러스터별 규칙 사용을 참조하세요.

클러스터별 규칙을 추가하려면 다음 안내를 따르세요.

정책 JSON 파일에 clusterAdmissionRules 노드를 추가합니다.

"clusterAdmissionRules": {
    "us-central1-a.test-cluster": {
      "evaluationMode": "REQUIRE_ATTESTATION",
      "requireAttestationsBy": [
        "ATTESTOR",
        ...
      ],
      "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
    }
  },

여기서 CLUSTER_SPECIFIER는 규칙이 적용되는 클러스터의 리소스 ID입니다.

  • GKE, GKE 연결 클러스터, AWS용 GKE의 경우 형식은 CLUSTER_LOCATION.CLUSTER_NAME입니다(예: us-central1-a.test-cluster).
  • 베어메탈용 GKE 및 VMware용 GKE의 경우 형식은 FLEET_MEMBERSHIP_LOCATION.FLEET_MEMBERSHIP_ID입니다(예: global.test-membership).

다른 속성은 이 가이드 앞부분의 기본 규칙 설정에 설명되어 있습니다. 클러스터별 규칙의 예시는 정책 예시를 참조하세요.

규칙을 통해 모든 필수 증명자가 컨테이너 이미지를 서명했는지 확인한 경우 이 단계를 완료하기 전에 증명자를 만들어야 합니다.

정책 JSON 파일 가져오기

이 섹션은 GKE, GKE 클러스터, Cloud Run, Anthos Service Mesh에 적용됩니다.

다음을 입력하여 정책 JSON 파일을 Binary Authorization으로 다시 가져옵니다.

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"

다음 단계