Referencia sobre las políticas en formato YAML

Esta página contiene información de referencia para las políticas de la autorización binaria especificadas en formato YAML. Cuando configuras una política mediante la interfaz de línea de comandos, editas un archivo con formato YAML que cumple con esta especificación. Para obtener ejemplos de políticas en formato YAML, consulta Políticas de ejemplo.

Los archivos de política en formato YAML tienen el siguiente formato:

name: projects/<PROJECT_ID>/policy
admissionWhitelistPatterns:
- namePattern: <MATCHING_PATTERN>
- ...
globalPolicyEvaluationMode: <GLOBAL_EVAL_MODE>
defaultAdmissionRule:
  <ADMISSION_RULE>
clusterAdmissionRules:
  <CLUSTER_SPECIFIER>:
    <ADMISSION_RULE>
  ...

Nodos

El formato YAML tiene los siguientes nodos de nivel superior:

Nodo Descripción Obligatorio
name Nombre de la política.
admissionWhitelistPatterns Especifica las imágenes de contenedor que siempre se pueden implementar. No
globalPolicyEvaluationMode Especifica si se debe aplicar una política global que exima las imágenes del sistema que son propiedad de Google. No
defaultAdmissionRule La regla que se usa cuando no se aplica ninguna regla específica.
clusterAdmissionRules Especifica las reglas que se aplican a clústeres específicos. No

name

El nodo name contiene el nombre de la política en el siguiente formato:

name: projects/PROJECT_ID/policy

En el ejemplo anterior, PROJECT_ID es el nombre del proyecto de Google Cloud en el que se define tu política.

Por ejemplo:

name: projects/example-project/policy

admissionWhitelistPatterns

admissionWhitelistPatterns especifica una lista de entidades permitidas de imágenes de contenedor que están exentas de la aplicación de la política. Especifica la ruta a las imágenes en Container Registry y Artifact Registry, otro registro o una referencia local en el subnodo namePattern:

admissionWhitelistPatterns:
  - namePattern: MATCHING_PATTERN
  - ...

Reemplaza MATCHING_PATTERN por una ruta de acceso a una sola imagen o un patrón coincidente que contenga uno de los símbolos de comodín (*, **).

Ten en cuenta que los comodines son válidos solo al final del patrón. Por ejemplo, gcr.io/my-project/nginx* es un patrón válido, pero gcr.io/my-project/n*x no lo es. El comodín * solo coincide con imágenes en el directorio especificado. Por ejemplo, gcr.io/my-project/nginx* coincide con gcr.io/my-project/nginx:latest, pero no con gcr.io/my-project/nginx-images/nginx. El comodín ** coincide con las imágenes de los subdirectorios. Por ejemplo, la ruta gcr.io/my-project/nginx** coincide con gcr.io/my-project/nginx-1.14.2/image:latest.

En el siguiente ejemplo, se agregan registros que contienen imágenes de Google Kubernetes Engine (GKE) de uso general, una imagen ubicada en gcr.io/example-project/helloworld y una referencia local a una imagen a la lista de imágenes exentas del política:

admissionWhitelistPatterns:
  - namePattern: gcr.io/google-containers/*
  - namePattern: k8s.gcr.io/**
  - namePattern: gke.gcr.io/**
  - namePattern: gcr.io/gke-release/asm/*
  - namePattern: gcr.io/stackdriver-agents/*
  - namePattern: gcr.io/example-project/helloworld
  - namePattern: loc-ref

Patrones de la lista de entidades permitidas

Para incluir en la lista de entidades permitidas a todas las imágenes de contenedor cuya ubicación de registro coincida con la ruta especificada, sigue estos pasos:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/*

Para incluir una imagen específica en la lista de entidades permitidas, haz lo siguiente:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld

Para incluir una versión etiquetada actual en la lista de entidades permitidas, sigue estos pasos:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld:latest
  - namePattern: gcr.io/example-project/helloworld:my-tag
  - namePattern: gcr.io/example-project/helloworld:v1.*

Para incluir en la lista de entidades permitidas una versión específica de una imagen según su resumen, sigue estos pasos:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld@sha256:77b0b75136b9bd0fd36fb50f4c92ae0dbdbbe164ab67885e736fa4374e0cbb8c

Para incluir en la lista de entidades permitidas las imágenes de los subdirectorios de una ruta de acceso determinada, haz lo siguiente:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/**

globalPolicyEvaluationMode

El modo de evaluación de políticas del sistema es una configuración de política que hace que la autorización binaria evalúe una política de sistema antes de evaluar la política que configuraste. Google proporciona la política del sistema y exime una lista de imágenes del sistema mantenidas por Google de una evaluación de política más detallada. Cuando tienes esta configuración habilitada, la aplicación de las políticas no bloquea las imágenes que requiere GKE. La política del sistema se evalúa antes de la evaluación de la política del usuario y además de ella, incluidos los admissionWhitelistPatterns.

Para permitir todas las imágenes del sistema mantenidas por Google, establece la propiedad globalPolicyEvaluationMode como ENABLE:

globalPolicyEvaluationMode: ENABLE

Para inhabilitar el modo de evaluación de la política del sistema, haz lo siguiente:

globalPolicyEvaluationMode: DISABLE

defaultAdmissionRule

defaultAdmissionRule especifica la regla predeterminada de la política. La regla predeterminada define las restricciones que se aplican a todas las imágenes de contenedor no exentas, excepto las que tienen su propia regla específica del clúster. Debes especificar la regla predeterminada mediante la colección ADMISSION_RULE:

defaultAdmissionRule:
  ADMISSION_RULE

En el siguiente ejemplo, se muestra una regla predeterminada que permite que solo se implementen las imágenes de contenedor que el certificador especificado autorizó. En el caso de que todos los certificadores necesarios no hayan autorizado la imagen, la autorización binaria bloquea la implementación y escribe en el registro de auditoría.

defaultAdmissionRule:
  evaluationMode: REQUIRE_ATTESTATION
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  requireAttestationsBy:
  - projects/example-project/attestors/secure-build

clusterAdmissionRules

clusterAdmissionRules declara reglas específicas del clúster para la política. Las restricciones de estas reglas se aplican solo al clúster especificado. Si la autorización binaria aplica una regla específica del clúster a una implementación, no se considera la regla predeterminada. Al igual que con las reglas predeterminadas, debes especificar reglas específicas del clúster mediante la colección ADMISSION_RULE:

clusterAdmissionRules:
  CLUSTER_SPECIFIER:
    ADMISSION_RULE

En el ejemplo anterior, CLUSTER_SPECIFIER es el ID de recursos del clúster al que se aplica la regla en el formato location.name (por ejemplo, us-east1-a.prod-cluster).

En los siguientes ejemplos, se muestra una regla específica del clúster que solo permite que se implementen las imágenes de contenedor que los certificadores especificados autorizaron:

clusterAdmissionRules:
  us-east1-a.prod-cluster:
    evaluationMode: REQUIRE_ATTESTATION
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    requireAttestationsBy:
    - projects/example-project/attestors/secure-build
    - projects/example-project/attestors/prod-qualified

Colecciones de nodos

ADMISSION_RULE

ADMISSION_RULE es una colección de nodos que especifica las restricciones de la regla en el siguiente formato:

evaluationMode: EVAL_MODE
enforcementMode: ENFORCEMENT_MODE
requireAttestationsBy:
- ATTESTOR
- ...

defaultAdmissionRule y clusterAdmissionRule hacen referencia a esta colección.

evaluationMode

evaluationMode especifica la operación que realiza la autorización binaria para evaluar si se debe implementar una imagen de contenedor. Los siguientes son los valores posibles:

  • ALWAYS_ALLOW: Siempre se permite la implementación de imágenes que esta regla evalúa.
  • ALWAYS_DENY: Siempre se rechaza la implementación de las imágenes que esta regla evalúa.
  • REQUIRE_ATTESTATION: Se requieren uno o más certificadores para autorizar la versión antes de la implementación.

Si el evaluationMode es REQUIRE_ATTESTATION, debes proporcionar una referencia a los certificadores necesarios en requireAttestationsBy.

enforcementMode

enforcementMode especifica la acción que realiza la autorización binaria si una imagen de contenedor no cumple con las restricciones definidas en la regla. Los siguientes son los valores posibles:

  • ENFORCED_BLOCK_AND_AUDIT_LOG: Bloquea la implementación y escribe en el registro de auditoría.
  • DRYRUN_AUDIT_LOG_ONLY: Permite la implementación de imágenes que no cumplen con las especificaciones y escribe detalles sobre la infracción en el registro de auditoría.

La mayoría de las reglas de producción usan el modo de aplicación ENFORCED_BLOCK_AND_AUDIT_LOG. DRYRUN_AUDIT_LOG_ONLY se usa, principalmente, para probar una política en el entorno antes de que entre en vigor.

requireAttestationsBy

requireAttestationsBy especifica uno o más certificadores que deben autorizar la versión antes de que se pueda implementar una imagen de contenedor. Esto es necesario solo para las reglas de REQUIRE_ATTESTATION. Este es el formato de este nodo:

requireAttestationsBy:
  - projects/PROJECT_ID/attestors/ATTESTOR_NAME
  - ...

En el ejemplo anterior, PROJECT_ID es el nombre del proyecto en el que se definen los certificadores y ATTESTOR_NAME es el nombre de un certificador que debe firmar la versión.

En el siguiente ejemplo, se muestra cómo especificar certificadores:

requireAttestationsBy:
- projects/example-project/attestors/secure-build
- projects/example-project/attestors/prod-qualified