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 en la línea de comandos mediante la API de REST. Como alternativa, también puedes realizar estas tareas con los comandos de gcloud en la línea de comandos o mediante 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)
  • Importar 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

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

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. Si se habilita, esta lista blanca se agrega a las imágenes exentas por el modo de evaluación de políticas globales.

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 (*).

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, se evalúa la política global.

Puedes ver el contenido de la política global en la línea de comandos 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 manera explícita rutas a imágenes del sistema mantenidas por Google en la lista blanca. Este modo está inhabilitado de forma predeterminada.

Para habilitar el modo de evaluación de políticas globales, 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 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. 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,
      ...
    ]
  }

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

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

Para importar el archivo, 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"

Próximos pasos