En esta página se proporcionan instrucciones para configurar una política de autorización binaria mediante la API REST. También puedes realizar estas tareas con la CLI de Google Cloud o la consola deGoogle Cloud . Este paso forma parte de la configuración de la autorización binaria.
Información general
Una política es un conjunto de reglas que rigen el despliegue de una o varias imágenes de contenedor.
Cuando configuras una política mediante la API REST, rellenas los 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 YAML.
Para configurar una política, debes hacer lo siguiente:
- Exportar un archivo JSON de una política
- Añade las imágenes exentas que quieras (opcional).
- Definir la regla predeterminada
- Añadir reglas específicas del clúster (opcional)
- Importar el archivo JSON de la política
La mayoría de las políticas del mundo real comprueban si todos los attestors necesarios han verificado que una imagen de contenedor está lista para desplegarse. En ese caso, también debe crear verificadores al configurar la política.
Definir el proyecto predeterminado
Si aún no lo has hecho, define el proyecto predeterminado: Google Cloud
PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
donde PROJECT_ID es el ID de tu proyecto.
Exportar la política
Esta sección se aplica a GKE, Distributed Cloud, Cloud Run y Cloud 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", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
Gestionar imágenes exentas
Esta sección se aplica a GKE, Distributed Cloud, Cloud Run y Cloud Service Mesh.
Una imagen exenta es una imagen de contenedor que no está sujeta a las reglas de las políticas. La autorización binaria siempre permite que se desplieguen imágenes exentas.
Para especificar las imágenes exentas, debes incluir sus rutas de registro en admissionWhitelistPatterns
. La ruta puede hacer referencia a Container Registry u otro registro de imágenes. El
encargado del cumplimiento procesa las imágenes exentas en admissionWhitelistPatterns
después de que las imágenes
se hayan eximido mediante el modo de evaluación de la política del sistema.
Para añadir una imagen exenta, añade un nodo namePattern
en una lista admissionWhitelistPatterns
en el archivo JSON de la política:
{ "name": "projects/PROJECT_ID/policy", "admissionWhitelistPatterns": [ { "namePattern": "MATCHING_PATTERN" } ], ... }
donde MATCHING_PATTERN es la ruta a una sola imagen de su registro
por coincidencia exacta o a cualquier imagen que coincida con un patrón mediante el símbolo de comodín
(*
, **
).
Cloud Run
Esta sección se aplica a Cloud Run.
No puedes especificar directamente nombres de imágenes que contengan una etiqueta. Por ejemplo, no puedes especificar
IMAGE_PATH
:latest.
Si quieres especificar nombres de imágenes que contengan etiquetas, debes hacerlo con un comodín, como se indica a continuación:
*
para todas las versiones de una misma imagen. Por ejemplo,us-docker.pkg.dev/myproject/container/hello@*
**
para todas las imágenes de un proyecto. Por ejemplo,us-docker.pkg.dev/myproject/**
Puedes usar nombres de ruta para especificar un resumen con el formato
IMAGE_PATH
@DIGEST
.
Modo de evaluación de la política del sistema
Esta sección se aplica a GKE y Distributed Cloud.
El modo de evaluación de políticas del sistema es un ajuste de política que hace que la autorización binaria evalúe una política del sistema antes de evaluar la política que configures. Google gestiona la política del sistema, que exime a una lista de imágenes del sistema mantenidas por Google que usa GKE. Las imágenes que se indican en la política del sistema no se bloquean por la aplicación de la política. Si no habilita este ajuste, deberá gestionar la lista de imágenes exentas por su cuenta. Consulta cómo gestionar imágenes exentas.
Puedes ver el contenido de la política del sistema con el siguiente comando:
gcloud alpha container binauthz policy export-system-policy
Para habilitar el modo de evaluación de la política del sistema, añade el siguiente nodo de nivel superior al archivo JSON de la política:
"globalPolicyEvaluationMode": "ENABLE"
Para inhabilitar el modo de evaluación de políticas del sistema, añade lo siguiente:
"globalPolicyEvaluationMode": "DISABLE"
Para exportar la política del sistema asociada a una región específica, sigue estos pasos:
gcloud alpha container binauthz policy export-system-policy \
--location=REGION > /tmp/policy.yaml
Sustituye REGION por la región asociada a la política del sistema que quieras exportar (o "global"). Por ejemplo: asia-east1
,
europe-west1
y us-central1
.
Si omite --location
o especifica --location=global
, el comando genera una política del sistema de una región del último grupo de regiones en recibir actualizaciones. Como 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 se permiten actualmente en todas las regiones.
Definir la regla predeterminada
Esta sección se aplica a GKE, Distributed Cloud, Cloud Run y Cloud Service Mesh.
Una regla es la parte de una política que define las restricciones que deben cumplir las imágenes de contenedor para poder desplegarse. Cada solicitud de admisión tiene un clúster de GKE asociado. Si una solicitud no coincide con una regla específica de un clúster, se utiliza 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 YAML de la política. Para ver ejemplos de reglas predeterminadas, consulta Ejemplos de políticas.
Para definir la regla predeterminada, edita el nodo defaultAdmissionRule
del archivo JSON de la política según sea necesario:
"defaultAdmissionRule": { "evaluationMode": "EVAL_MODE", "enforcementMode": "ENFORCEMENT_MODE" requireAttestationsBy: [ ATTESTOR, ... ] }
donde:
- EVAL_MODE especifica el tipo de restricción que evalúa Binary Authorization antes de permitir que se despliegue una imagen de contenedor.
- ENFORCEMENT_MODE especifica la acción que se lleva a cabo si una imagen de contenedor no cumple las restricciones definidas en la regla.
- ATTESTOR especifica los attestors (si es necesario) que deben firmar una imagen de contenedor para que se pueda implementar. Usa la ruta completa del attestor en el formato
projects/PROJECT_ID/attestors/ATTESTOR_NAME
.
Si tu regla comprueba si todos los certificadores obligatorios han firmado una imagen de contenedor, debes crear certificadores antes de completar este paso.
Definir reglas específicas del clúster (opcional)
Esta sección se aplica a GKE y Distributed Cloud.
Un clúster también puede tener una o varias reglas específicas del clúster. Este tipo de regla solo se aplica al clúster de GKE especificado. Si un clúster no tiene ninguna regla propia, se utiliza la regla 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
del archivo JSON de la política. Para obtener más información sobre las partes de esta regla, consulta ADMISSION_RULE en la referencia de YAML de la política. Para ver un ejemplo, consulta Usar una regla específica de un clúster en Ejemplos de políticas.
Para añadir una regla específica del clúster, sigue estos pasos:
En el archivo JSON de la política, añade un nodo clusterAdmissionRules
:
"clusterAdmissionRules": { "us-central1-a.test-cluster": { "evaluationMode": "REQUIRE_ATTESTATION", "requireAttestationsBy": [ "ATTESTOR", ... ], "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } },
donde CLUSTER_SPECIFIER es el ID de recurso del clúster al que se aplica la regla.
- En el caso de GKE, los clústeres de GKE adjuntos y GKE en AWS, el formato es
CLUSTER_LOCATION.CLUSTER_NAME
, por ejemplo,us-central1-a.test-cluster
. - En Google Distributed Cloud y Google Distributed Cloud, el formato es
FLEET_MEMBERSHIP_LOCATION.FLEET_MEMBERSHIP_ID
. Por ejemplo,global.test-membership
.
Las demás propiedades se describen en la sección Definir la regla predeterminada de esta guía. Consulta un ejemplo de regla específica de un clúster en Ejemplos de políticas.
Si tu regla comprueba si todos los certificadores obligatorios han firmado una imagen de contenedor, debes crear certificadores antes de completar este paso.
Importar el archivo JSON de la política
Esta sección se aplica a GKE, Distributed Cloud, Cloud Run y Cloud Service Mesh.
Para volver a importar el archivo JSON de la política en la autorización binaria, introduce 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"