gcloud CLI를 사용하여 정책 구성

이 페이지에서는 Google Cloud CLI를 사용하여 Binary Authorization 정책을 구성하는 방법을 설명합니다. 또는 Google Cloud 콘솔 또는 REST API를 사용하여 이러한 작업을 수행할 수 있습니다. 이 단계는 Binary Authorization 설정의 일부입니다.

명령줄 도구를 사용하여 정책을 구성하려면 기존 정책을 YAML 파일로 내보냅니다. 파일을 수정한 후에는 이 가이드의 후반부에 설명된 대로 파일을 가져와서 정책을 업데이트할 수 있습니다. 정책 YAML 형식에 대한 자세한 내용은 정책 YAML 참조를 확인하세요.

시작하기 전에

  1. Binary Authorization을 사용 설정합니다.
  2. 클러스터 만들기
  3. 증명을 사용하려는 경우 정책을 구성하기 전에 증명자를 만드는 것이 좋습니다. 명령줄 도구를 사용하거나 Google Cloud 콘솔을 통해 증명자를 만들 수 있습니다.
  4. Binary Authorization을 사용 설정한 프로젝트로 프로젝트 ID를 설정합니다.

    PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    

정책 YAML 파일 내보내기

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

정책을 업데이트하려면 먼저 다음과 같이 로컬 YAML 파일로 내보내세요.

gcloud container binauthz policy export > /tmp/policy.yaml

기본적으로 파일 콘텐츠는 다음과 유사합니다.

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: EVALUATION_MODE
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/PROJECT_ID/policy

정책을 수정하려면 이 가이드의 뒷부분에 설명된 대로 파일을 수정하고 섹션을 추가하거나 업데이트합니다. 파일을 저장한 후에는 정책을 가져올 수 있습니다.

기본 규칙 설정

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

규칙은 컨테이너 이미지를 배포하기 전에 충족해야 하는 제약조건을 정의하는 정책의 일부입니다. 기본 규칙은 자체 클러스터별 규칙이 없는 모든 비예외 이미지에 적용되는 제약조건을 정의합니다. 모든 정책에는 기본 규칙이 있어야 합니다.

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

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

defaultAdmissionRule:
  evaluationMode: EVALUATION_MODE
  enforcementMode: ENFORCEMENT_MODE
  requireAttestationsBy:
  - ATTESTOR
  - ...

다음을 바꿉니다.

  • EVALUATION_MODE: 평가 모드는 배포 시 Binary Authorization 시행자가 적용하는 제약조건 유형을 지정합니다. EVALUATION_MODE를 다음 옵션 중 하나로 바꿉니다.

    • ALWAYS_ALLOW: 모든 이미지의 배포를 허용합니다.
    • ALWAYS_DENY: 모든 이미지의 배포를 허용하지 않습니다.
    • REQUIRE_ATTESTATION: 이 규칙에 추가하는 모든 증명자로 확인될 수 있는 하나 이상의 증명이 이미지에 포함된 경우 이미지 배포를 허용합니다. 배포 시 시행자는 이 규칙의 ATTESTOR 목록에 추가한 증명자를 사용하여 증명을 확인합니다. 증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요. REQUIRE_ATTESTATION을 지정하면 증명자가 하나 이상 포함된 requireAttestationsBy 블록도 추가해야 합니다. 증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요.
  • ENFORCEMENT_MODE: 시행 모드는 이미지가 규칙을 위반할 때 시행자가 대응하는 방법을 지정합니다. ENFORCEMENT_MODE를 다음 중 하나로 바꿉니다.

    • ENFORCED_BLOCK_AND_AUDIT_LOG: 규칙을 위반하는 이미지를 차단하고 위반에 대한 정보를 Cloud 감사 로그에 기록합니다(기본값).
    • DRYRUN_AUDIT_LOG_ONLY: 모든 이미지의 배포를 허용하되, 위반 관련 정보를 포함한 시행 정보를 Cloud 감사 로그에 기록합니다.
  • ATTESTOR: EVALUATION_MODEREQUIRE_ATTESTATION으로 설정하는 경우 requireAttesationsBy 블록도 추가해야 합니다. 블록에 하나 이상의 증명자를 리소스 ID별로 나열합니다. 리소스 ID의 형식은 다음과 같습니다.

    projects/PROJECT_ID/attestors/ATTESTOR_NAME입니다.

    증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요.

예외 이미지 관리

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

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

예외 이미지는 admissionWhitelistPatterns에 레지스트리 경로를 나열하여 지정합니다. 경로는 Container Registry 또는 다른 이미지 레지스트리를 나타냅니다. Binary Authorization은 배포 시에 시스템 정책으로 지정된 이미지 다음에 admissionWhitelistPatterns로 지정된 이미지 목록을 제외합니다.

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

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

시스템 정책 평가 모드를 사용 설정하려면 policy.yaml 파일에 다음 줄을 추가합니다.

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 클러스터에 적용됩니다.

클러스터에 한 개 이상의 클러스터별 규칙이 있을 수도 있습니다. 이 유형의 규칙은 특정 GKE 클러스터에 배포할 이미지에만 적용됩니다. 클러스터별 규칙은 정책의 선택적 부분입니다.

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

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

policy.yaml 파일에 clusterAdmissionRules 노드를 추가합니다.

clusterAdmissionRules:
  CLUSTER_SPECIFIER:
    evaluationMode: EVALUATION_MODE
    enforcementMode: ENFORCEMENT_MODE
    requireAttestationsBy:
    - ATTESTOR
    - ...

다음을 바꿉니다.

  • 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).

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

  • EVALUATION_MODE: 평가 모드는 배포 시 Binary Authorization 시행자가 적용하는 제약조건 유형을 지정합니다. EVALUATION_MODE를 다음 옵션 중 하나로 바꿉니다.

    • ALWAYS_ALLOW: 모든 이미지의 배포를 허용합니다.
    • ALWAYS_DENY: 모든 이미지의 배포를 허용하지 않습니다.
    • REQUIRE_ATTESTATION: 이 규칙에 추가하는 모든 증명자로 확인될 수 있는 하나 이상의 증명이 이미지에 포함된 경우 이미지 배포를 허용합니다. 배포 시 시행자는 이 규칙의 ATTESTOR 목록에 추가한 증명자를 사용하여 증명을 확인합니다. 증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요. REQUIRE_ATTESTATION을 지정하면 증명자가 하나 이상 포함된 requireAttestationsBy 블록도 추가해야 합니다. 증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요.
  • ENFORCEMENT_MODE: 시행 모드는 이미지가 규칙을 위반할 때 시행자가 대응하는 방법을 지정합니다. ENFORCEMENT_MODE를 다음 중 하나로 바꿉니다.

    • ENFORCED_BLOCK_AND_AUDIT_LOG: 규칙을 위반하는 이미지를 차단하고 위반에 대한 정보를 Cloud 감사 로그에 기록합니다(기본값).
    • DRYRUN_AUDIT_LOG_ONLY: 모든 이미지의 배포를 허용하되, 위반 관련 정보를 포함한 시행 정보를 Cloud 감사 로그에 기록합니다.
  • ATTESTOR: EVALUATION_MODEREQUIRE_ATTESTATION으로 설정하는 경우 requireAttesationsBy 블록도 추가해야 합니다. 블록에 하나 이상의 증명자를 리소스 ID별로 나열합니다. 리소스 ID의 형식은 다음과 같습니다.

    projects/PROJECT_ID/attestors/ATTESTOR_NAME입니다.

    증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요.

특정 규칙 설정(선택사항)

메시 서비스 ID, Kubernetes 서비스 계정 또는 Kubernetes 네임스페이스로 범위가 지정된 규칙을 만들 수 있습니다.

Anthos Service Mesh 서비스 ID 규칙 설정

Anthos Service Mesh(미리보기) 서비스 ID에 대한 규칙을 설정하려면 policy.yaml 파일을 수정하고 istioServiceIdentityAdmissionRules 블록을 추가합니다. 예를 들면 다음과 같습니다.

defaultAdmissionRule:
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
istioServiceIdentityAdmissionRules:
  SERVICE_IDENTITY_ID:
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    evaluationMode: ENFORCEMENT_MODE
    requireAttestationsBy:
    - <var>ATTESTOR</var>
    - ...

name: projects/PROJECT_ID/policy

다음을 바꿉니다.

  • SERVICE_IDENTITY_ID: 이 규칙의 범위를 지정할 Anthos Service Mesh 서비스 ID입니다. 서비스 ID의 형식은 PROJECT_ID.svc.id.goog/ns/NAMESPACE/sa/SERVICE_ACCOUNT입니다. 서비스 ID에서 다음을 바꿉니다.

    • PROJECT_ID: Kubernetes 리소스를 정의하는 프로젝트 ID입니다.
    • NAMESPACE: Kubernetes 네임스페이스입니다.
    • SERVICE_ACCOUNT: 서비스 계정입니다.
  • EVALUATION_MODE: 평가 모드는 배포 시 Binary Authorization 시행자가 적용하는 제약조건 유형을 지정합니다. EVALUATION_MODE를 다음 옵션 중 하나로 바꿉니다.

    • ALWAYS_ALLOW: 모든 이미지의 배포를 허용합니다.
    • ALWAYS_DENY: 모든 이미지의 배포를 허용하지 않습니다.
    • REQUIRE_ATTESTATION: 이 규칙에 추가하는 모든 증명자로 확인될 수 있는 하나 이상의 증명이 이미지에 포함된 경우 이미지 배포를 허용합니다. 배포 시 시행자는 이 규칙의 ATTESTOR 목록에 추가한 증명자를 사용하여 증명을 확인합니다. 증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요. REQUIRE_ATTESTATION을 지정하면 증명자가 하나 이상 포함된 requireAttestationsBy 블록도 추가해야 합니다. 증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요.
  • ENFORCEMENT_MODE: 시행 모드는 이미지가 규칙을 위반할 때 시행자가 대응하는 방법을 지정합니다. ENFORCEMENT_MODE를 다음 중 하나로 바꿉니다.

    • ENFORCED_BLOCK_AND_AUDIT_LOG: 규칙을 위반하는 이미지를 차단하고 위반에 대한 정보를 Cloud 감사 로그에 기록합니다(기본값).
    • DRYRUN_AUDIT_LOG_ONLY: 모든 이미지의 배포를 허용하되, 위반 관련 정보를 포함한 시행 정보를 Cloud 감사 로그에 기록합니다.
  • ATTESTOR: EVALUATION_MODEREQUIRE_ATTESTATION으로 설정하는 경우 requireAttesationsBy 블록도 추가해야 합니다. 블록에 하나 이상의 증명자를 리소스 ID별로 나열합니다. 리소스 ID의 형식은 다음과 같습니다.

    projects/PROJECT_ID/attestors/ATTESTOR_NAME입니다.

    증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요.

Kubernetes 서비스 계정 규칙 설정

Kubernetes 서비스 계정의 규칙을 설정하려면 policy.yaml 파일을 수정하고 kubernetesServiceAccountAdmissionRules 블록을 추가합니다. 예를 들면 다음과 같습니다.

defaultAdmissionRule:
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
kubernetesServiceAccountAdmissionRules:
  KUBERNETES_SERVICE_ACCOUNT_ID:
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    evaluationMode: ENFORCEMENT_MODE
    requireAttestationsBy:
    - <var>ATTESTOR</var>
    - ...
name: projects/PROJECT_ID/policy

다음을 바꿉니다.

  • KUBERNETES_SERVICE_ACCOUNT_ID: 규칙의 범위를 지정할 Kubernetes 서비스 계정입니다. 이 서비스 계정 ID의 형식은 NAMESPACE:SERVICE_ACCOUNT입니다. 서비스 계정 ID에서 다음을 바꿉니다.

    • NAMESPACE: Kubernetes 네임스페이스입니다.
    • SERVICE_ACCOUNT: 서비스 계정 이름입니다.
  • EVALUATION_MODE: 평가 모드는 배포 시 Binary Authorization 시행자가 적용하는 제약조건 유형을 지정합니다. EVALUATION_MODE를 다음 옵션 중 하나로 바꿉니다.

    • ALWAYS_ALLOW: 모든 이미지의 배포를 허용합니다.
    • ALWAYS_DENY: 모든 이미지의 배포를 허용하지 않습니다.
    • REQUIRE_ATTESTATION: 이 규칙에 추가하는 모든 증명자로 확인될 수 있는 하나 이상의 증명이 이미지에 포함된 경우 이미지 배포를 허용합니다. 배포 시 시행자는 이 규칙의 ATTESTOR 목록에 추가한 증명자를 사용하여 증명을 확인합니다. 증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요. REQUIRE_ATTESTATION을 지정하면 증명자가 하나 이상 포함된 requireAttestationsBy 블록도 추가해야 합니다. 증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요.
  • ENFORCEMENT_MODE: 시행 모드는 이미지가 규칙을 위반할 때 시행자가 대응하는 방법을 지정합니다. ENFORCEMENT_MODE를 다음 중 하나로 바꿉니다.

    • ENFORCED_BLOCK_AND_AUDIT_LOG: 규칙을 위반하는 이미지를 차단하고 위반에 대한 정보를 Cloud 감사 로그에 기록합니다(기본값).
    • DRYRUN_AUDIT_LOG_ONLY: 모든 이미지의 배포를 허용하되, 위반 관련 정보를 포함한 시행 정보를 Cloud 감사 로그에 기록합니다.
  • ATTESTOR: EVALUATION_MODEREQUIRE_ATTESTATION으로 설정하는 경우 requireAttesationsBy 블록도 추가해야 합니다. 블록에 하나 이상의 증명자를 리소스 ID별로 나열합니다. 리소스 ID의 형식은 다음과 같습니다.

    projects/PROJECT_ID/attestors/ATTESTOR_NAME입니다.

    증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요.

Kubernetes 네임스페이스 규칙 설정

Kubernetes 네임스페이스에 대한 규칙을 설정하려면 policy.yaml 파일을 수정하고 kubernetesNamespaceAdmissionRules 블록을 추가합니다. 예를 들면 다음과 같습니다.

defaultAdmissionRule:
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
kubernetesNamespaceAdmissionRules:
  KUBERNETES_NAMESPACE:
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    evaluationMode: EVALUATION_MODE
    requireAttestationsBy:
    - <var>ATTESTOR</var>
    - ...
name: projects/PROJECT_ID/policy

다음을 바꿉니다.

  • KUBERNETES_NAMESPACE: 이 규칙의 범위를 지정할 Kubernetes 네임스페이스입니다.

  • EVALUATION_MODE: 평가 모드는 배포 시 Binary Authorization 시행자가 적용하는 제약조건 유형을 지정합니다. EVALUATION_MODE를 다음 옵션 중 하나로 바꿉니다.

    • ALWAYS_ALLOW: 모든 이미지의 배포를 허용합니다.
    • ALWAYS_DENY: 모든 이미지의 배포를 허용하지 않습니다.
    • REQUIRE_ATTESTATION: 이 규칙에 추가하는 모든 증명자로 확인될 수 있는 하나 이상의 증명이 이미지에 포함된 경우 이미지 배포를 허용합니다. 배포 시 시행자는 이 규칙의 ATTESTOR 목록에 추가한 증명자를 사용하여 증명을 확인합니다. 증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요. REQUIRE_ATTESTATION을 지정하면 증명자가 하나 이상 포함된 requireAttestationsBy 블록도 추가해야 합니다. 증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요.
  • ENFORCEMENT_MODE: 시행 모드는 이미지가 규칙을 위반할 때 시행자가 대응하는 방법을 지정합니다. ENFORCEMENT_MODE를 다음 중 하나로 바꿉니다.

    • ENFORCED_BLOCK_AND_AUDIT_LOG: 규칙을 위반하는 이미지를 차단하고 위반에 대한 정보를 Cloud 감사 로그에 기록합니다(기본값).
    • DRYRUN_AUDIT_LOG_ONLY: 모든 이미지의 배포를 허용하되, 위반 관련 정보를 포함한 시행 정보를 Cloud 감사 로그에 기록합니다.
  • ATTESTOR: EVALUATION_MODEREQUIRE_ATTESTATION으로 설정하는 경우 requireAttesationsBy 블록도 추가해야 합니다. 블록에 하나 이상의 증명자를 리소스 ID별로 나열합니다. 리소스 ID의 형식은 다음과 같습니다.

    projects/PROJECT_ID/attestors/ATTESTOR_NAME입니다.

    증명자 만들기에 대한 자세한 내용은 증명자 만들기를 참조하세요.

정책 YAML 파일 가져오기

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

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

gcloud container binauthz policy import /tmp/policy.yaml

다음 단계