Configura una política mediante la API de REST

En esta página, se proporcionan instrucciones para configurar una política de autorización binaria mediante la API de REST. Como alternativa, también puedes realizar estas tareas con la herramienta de línea de comandos de gcloud o Google Cloud Console. 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 con la API de REST, propagas valores en un formato JSON cuya estructura es idéntica a la estructura YAML que se usa en las interacciones de gcloud con el servicio. Para obtener más información, consulta la Referencia de las políticas en formato YAML.

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

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

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}

En el ejemplo anterior, PROJECT_ID es el ID de tu proyecto.

Exporta la política

Esta sección se aplica a GKE, clústeres de Anthos alojados en VMware, Cloud Run y Anthos Service Mesh.

Exporta la política a un archivo JSON en tu sistema local:

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"

De forma predeterminada, el archivo tiene el siguiente contenido:

{
  "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"
  }
}

La lista admissionWhitelistPatterns predeterminada en tu exportación de políticas puede mostrar rutas de imagen diferentes de las que se muestran en esta guía.

Administra imágenes exentas

Esta sección se aplica a GKE, clústeres de Anthos alojados en VMware, Cloud Run y Anthos Service Mesh.

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

Para especificar imágenes exentas, enumera sus rutas de registro en admissionWhitelistPatterns. La ruta puede hacer referencia a Container Registry o a otro registro de imágenes. El ejecutor procesa imágenes exentas en admissionWhitelistPatterns después de que las imágenes estén exentas por el modo de evaluación de la política del sistema.

Para agregar una imagen exenta, agrega un nodo namePattern en una lista admissionWhitelistPatterns en el archivo de la política en formato JSON:

{
  "name": "projects/PROJECT_ID/policy",
  "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 (*, **).

Cloud Run

Esta sección se aplica a Cloud Run.

El nombre de la imagen debe tener el formato IMAGE_PATH@*, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello@*.

El nombre de la imagen no debe contener una etiqueta. Para dar formato a un nombre de imagen que exime a los nombres de imagen que contienen etiquetas, puedes usar * como comodín.

Los nombres de ruta de acceso pueden especificar un resumen.

Modo de evaluación de la política del sistema

Esta sección se aplica a GKE y clústeres de Anthos alojados en VMware.

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 del sistema antes de evaluar la política que configuraste. Google administra la política del sistema, que exime una lista de imágenes del sistema mantenidas por Google que GKE usa. La aplicación de las políticas no bloquea las imágenes enumeradas en la política del sistema. Si no habilitas la configuración, debes administrar la lista de imágenes exentas por tu cuenta. Obtén más información sobre cómo administrar imágenes exentas.

Puedes ver el contenido del sistema global mediante el siguiente comando:

gcloud alpha container binauthz policy export-system-policy

Para habilitar el modo de evaluación de políticas del sistema, agrega el siguiente nodo de nivel superior al archivo de la política en formato JSON:

"globalPolicyEvaluationMode": "ENABLE"

Para inhabilitar el modo de evaluación del sistema global, agrega lo siguiente:

"globalPolicyEvaluationMode": "DISABLE"

Puedes exportar la política del sistema asociada con una región específica de la siguiente manera:

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

Reemplaza REGION por la región asociada a la política del sistema que deseas exportar (o “global”). Estos son algunos ejemplos: asia-east1, europe-west1, us-central1.

Si omites --location o especificas --location=global, el comando genera una política del sistema de una región en el último grupo de regiones para recibir actualizaciones. Debido a que la mayoría de los cambios en la política del sistema son adiciones, el resultado muestra el conjunto de imágenes del sistema que están permitidas en todas las regiones.

Configura la regla predeterminada

Esta sección se aplica a GKE, clústeres de Anthos alojados en VMware, Cloud Run y Anthos Service Mesh.

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. Cada solicitud de admisión tiene un clúster de GKE asociado. Si una solicitud no coincide con una regla específica del clúster, se usa la regla predeterminada.

La regla predeterminada se define en el nodo defaultAdmissionRule de la política. 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 establecer la regla predeterminada, edita el nodo defaultAdmissionRule en el archivo de políticas en formato JSON según sea necesario:

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

Donde:

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

Esta sección se aplica a GKE y clústeres de Anthos alojados en VMware.

Un clúster también puede tener una o más reglas específicas del clúster. Este tipo de regla se aplica solo al clúster de GKE especificado. Si un clúster no tiene una regla propia, se usa la predeterminada. 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 JSON. 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 de la política en formato JSON, agrega un nodo clusterAdmissionRules:

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

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 JSON

Esta sección se aplica a GKE, clústeres de Anthos alojados en VMware, Cloud Run y Anthos Service Mesh.

Para volver a importar el archivo de la política en formato JSON a la autorización binaria, ingresa lo siguiente:

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"

¿Qué sigue?