Configura una política mediante la CLI

En esta página, se proporcionan instrucciones para configurar una política de autorización binaria en la línea de comandos mediante los comandos de gcloud. Como alternativa, también puedes realizar estas tareas con Google Cloud Console o la API de REST. Este paso forma parte de la configuración de la autorización binaria.

Descripción general

Una política es un conjunto de reglas que rigen la implementación de una o más imágenes de contenedor.

Cuando configuras una política en la línea de comandos, la editas de forma manual en formato YAML en un editor de texto. El formato YAML refleja la estructura interna de una política que almacena la autorización binaria. Para obtener más información sobre este formato, consulta la Referencia de las políticas en formato YAML.

Para configurar una política, debes hacer lo siguiente:

  • Exportar el archivo de políticas en formato YAML
  • Agregar cualquier imagen exenta adicional (opcional)
  • Configurar la regla predeterminada
  • Agregar cualquier regla específica del clúster (opcional)
  • Importar el archivo de políticas en formato YAML

La mayoría de las políticas reales comprueban que todos los certificadores necesarios verifiquen que una imagen de contenedor esté lista para implementarse. En este caso, también debes crear certificadores cuando configures la política.

Configura el proyecto predeterminado

Configura el proyecto predeterminado de Google Cloud si aún no lo hiciste:

PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}

Exporta el archivo de políticas en formato YAML

Exporta el archivo de políticas en formato YAML a tu sistema local:

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

De forma predeterminada, el archivo tiene el siguiente contenido:

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

Administra imágenes exentas

Una imagen exenta es una imagen de contenedor que está exenta de las reglas de política. La autorización binaria siempre permite que se implementen imágenes exentas.

Cada política puede tener una lista blanca de imágenes exentas especificadas por su ruta de registro. Esta ruta puede ser una ubicación en Container Registry o en otro registro de imágenes de contenedor. Esta lista blanca se suma a las imágenes exentas del modo de evaluación de políticas globales, si están habilitadas.

Para agregar una imagen exenta, agrega un nodo namePattern en una lista admissionWhitelistPatterns en el archivo policy.yaml:

admissionWhitelistPatterns:
- namePattern: MATCHING_PATTERN

En el ejemplo anterior, MATCHING_PATTERN es la ruta a una sola imagen en tu registro por coincidencia exacta o a cualquier imagen que coincida con un patrón que use el símbolo de comodín (*).

Modo de evaluación de políticas globales

El modo de evaluación de políticas globales es una configuración de política que hace que la autorización binaria evalúe una política global antes de evaluar la política que configuraste como usuario. Google proporciona la política global y exime a una lista de imágenes del sistema mantenidas por Google de una evaluación de políticas más detallada. Cuando habilitas esta configuración, la aplicación de las políticas no bloquea las imágenes que requiere Google Kubernetes Engine (GKE). Además de la política del usuario, antes se evalúa la política global.

Puedes ver el contenido de la política global mediante el siguiente comando:

gcloud container binauthz policy export --project=binauthz-global-policy

El modo de evaluación de políticas globales hace que no sea necesario especificar de forma explícita rutas a imágenes del sistema mantenidas por Google en una lista admissionWhitelistPatterns:

admissionWhitelistPatterns:
- namePattern: gcr.io/google_containers/*
- namePattern: gcr.io/google-containers/*
- namePattern: k8s.gcr.io/*
- namePattern: gke.gcr.io/*
- namePattern: gcr.io/stackdriver-agents/*

Para habilitar el modo de evaluación de políticas globales, agrega la siguiente línea al archivo policy.yaml:

globalPolicyEvaluationMode: ENABLE

Para inhabilitar el modo de evaluación de la política global, agrega lo siguiente:

globalPolicyEvaluationMode: DISABLE

Configura la regla predeterminada

Una regla es la parte de una política que define las restricciones que las imágenes de contenedor deben pasar antes de poder implementarlas. 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. Cada política debe tener una regla predeterminada.

La regla predeterminada se define en el nodo defaultAdmissionRule del archivo de políticas en formato YAML. Para obtener más información sobre las partes de esta regla, consulta ADMISSION_RULE en la referencia de políticas en formato YAML. Para ver ejemplos de reglas predeterminadas, consulta Políticas de ejemplo.

Para configurar la regla predeterminada, edita el nodo defaultAdmissionRule en el archivo policy.yaml según sea necesario:

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

En el ejemplo anterior, se ilustra lo siguiente:

  • EVAL_MODE especifica el tipo de restricción que la autorización binaria evalúa antes de permitir que se implemente una imagen de contenedor.
  • ENFORCEMENT_MODE especifica la acción que se realiza si una imagen de contenedor no cumple con las restricciones definidas en la regla.
  • ATTESTOR especifica los certificadores (si es necesario) que deben firmar una imagen de contenedor antes de implementarla. Usa la ruta completamente calificada al certificador en el formato projects/PROJECT_ID/attestors/ATTESTOR_NAME.

Si la regla verifica que todos los certificadores obligatorios hayan firmado una imagen de contenedor, debes crear certificadores antes de completar este paso.

Configura reglas específicas del clúster (opcional)

Un clúster también puede tener una o más reglas específicas del clúster. Este tipo de regla se aplica solo a las imágenes de contenedor que se deben implementar solo en clústeres de GKE específicos. Las reglas específicas del clúster son una parte opcional de una política.

Las reglas específicas del clúster se definen en los nodos clusterAdmissionRules en el archivo de la política en formato YAML. Para obtener más información sobre las partes de esta regla, consulta ADMISSION_RULE en la referencia de políticas en formato YAML. Para ver un ejemplo, consulta Usa una regla específica del clúster en las Políticas de ejemplo.

Para agregar una regla específica del clúster, haz lo siguiente:

En el archivo policy.yaml, agrega un nodo clusterAdmissionRules:

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

En el ejemplo anterior, CLUSTER_SPECIFIER es el ID de recurso del clúster al que se aplica la regla en el formato location.name, y las otras propiedades son las que se describieron antes en Establece la regla predeterminada. Consulta Políticas de ejemplo para ver un ejemplo de una regla específica del clúster.

Si la regla verifica que todos los certificadores obligatorios hayan firmado una imagen de contenedor, debes crear certificadores antes de completar este paso.

Importa el archivo de políticas en formato YAML

El último paso es volver a importar el archivo de la política en formato YAML a la autorización binaria.

Para importar el archivo, ingresa lo siguiente:

gcloud container binauthz policy import /tmp/policy.yaml

Próximos pasos