Configurar una política con la CLI de gcloud

En esta página se proporcionan instrucciones para configurar una política de Autorización Binaria mediante la CLI de Google Cloud. Como alternativa, también puedes realizar estas tareas con la consolaGoogle Cloud o la API REST. Este paso forma parte de la configuración de la autorización binaria.

Para configurar una política con la herramienta de línea de comandos, exporta la política actual como un archivo YAML. Después de modificar el archivo, puede importarlo para actualizar la política, tal como se describe más adelante en esta guía. Para obtener más información sobre el formato YAML de las políticas, consulta la referencia de las políticas en YAML.

Antes de empezar

  1. Habilita la autorización binaria.
  2. Crea un clúster.
  3. Si tienes intención de usar atestaciones, te recomendamos que crees atestadores antes de configurar la política. Puedes crear attestors con una herramienta de línea de comandos o a través de la Google Cloud consola.
  4. Define el ID del proyecto en el que has habilitado Autorización binaria:

    PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    

Exportar el archivo YAML de la política

Esta sección se aplica a GKE, Distributed Cloud, Cloud Run y Cloud Service Mesh.

Para actualizar la política, primero expórtala a un archivo YAML local de la siguiente manera:

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

De forma predeterminada, el contenido del archivo tendrá un aspecto similar al siguiente:

defaultAdmissionRule:
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  evaluationMode: ALWAYS_ALLOW
globalPolicyEvaluationMode: ENABLE
name: projects/PROJECT_ID/policy

Para modificar la política, edita el archivo y añade o actualiza secciones, tal como se describe más adelante en esta guía. Una vez que hayas guardado el archivo, podrás importar la política.

Para añadir una imagen exenta a la lista de permitidas, añade lo siguiente al archivo de políticas:

admissionWhitelistPatterns:
  - namePattern: EXEMPT_IMAGE_PATH

Sustituye EXEMPT_IMAGE_PATH por la ruta de la imagen que quieras excluir. Para excluir más imágenes, añada más entradas - namePattern. Consulta más información sobre admissionWhitelistPatterns.

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. La regla predeterminada define las restricciones que se aplican a todas las imágenes no exentas que no tienen su propia regla específica del clúster. Todas las políticas deben tener una regla predeterminada.

La regla predeterminada se define en el nodo defaultAdmissionRule del archivo YAML 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 en el archivo policy.yaml según sea necesario:

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

Haz los cambios siguientes:

  • EVALUATION_MODE: el modo de evaluación especifica el tipo de restricción que aplica el verificador de autorización binaria en el momento de la implementación. Sustituye EVALUATION_MODE por una de las siguientes opciones:

    • ALWAYS_ALLOW: permite implementar todas las imágenes.
    • ALWAYS_DENY: no permite que se implementen imágenes.
    • REQUIRE_ATTESTATION: permite implementar una imagen si tiene una o varias certificaciones que pueden verificar todos los certificadores que añadas a esta regla. En el momento de la implementación, el verificador comprueba la atestación mediante los atestadores que añadas a la lista ATTESTOR de esta regla. Para obtener información sobre cómo crear verificadores, consulta Crear verificadores. Si especificas REQUIRE_ATTESTATION, también debes añadir un bloque requireAttestationsBy que contenga al menos un encargado de la atestación. Para obtener información sobre cómo crear verificadores, consulta Crear verificadores.
  • ENFORCEMENT_MODE: el modo obligatorio especifica cómo responde el verificador cuando una imagen infringe una regla. Sustituye ENFORCEMENT_MODE por una de las siguientes opciones:

    • ENFORCED_BLOCK_AND_AUDIT_LOG: bloquea las imágenes que infringen la regla y registra información sobre la infracción en los Registros de auditoría de Cloud (opción predeterminada).
    • DRYRUN_AUDIT_LOG_ONLY: permite que se implementen todas las imágenes, pero registra la información sobre la aplicación, incluida la información sobre las infracciones, en los Registros de auditoría de Cloud.
  • ATTESTOR: si asignas el valor REQUIRE_ATTESTATION a EVALUATION_MODE, también debes añadir un bloque requireAttesationsBy. En el bloque, se enumeran uno o varios verificadores por ID de recurso. El ID de recurso tiene el siguiente formato:

    projects/PROJECT_ID/attestors/ATTESTOR_NAME.

    Para obtener más información sobre cómo crear encargados de la atestación, consulta el artículo Crear encargados de la atestación.

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 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 hace referencia a Container Registry u otro registro de imágenes. En el momento del despliegue, la autorización binaria excluye la lista de imágenes especificada por admissionWhitelistPatterns después de las imágenes especificadas por la política del sistema.

Para añadir una imagen exenta, añade un nodo namePattern en una lista admissionWhitelistPatterns en el archivo policy.yaml:

admissionWhitelistPatterns:
- namePattern: MATCHING_PATTERN

Sustituye MATCHING_PATTERN por la ruta a una sola imagen de tu registro por coincidencia exacta o por la ruta a cualquier imagen que coincida con un patrón mediante el símbolo comodín (* o **).

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 políticas del sistema, añade la siguiente línea al archivo policy.yaml:

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 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 se aplica solo a las imágenes que se van a desplegar 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 del archivo YAML 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 policy.yaml, añade un nodo clusterAdmissionRules:

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

Haz los cambios siguientes:

  • CLUSTER_SPECIFIER: ID de recurso del clúster al que se aplica la regla. El formato de la regla es el siguiente:

    • 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 el caso del software Google Distributed Cloud (clústeres de GKE en hardware desnudo o VMware), 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. Para ver un ejemplo de una regla específica de un clúster, consulta Políticas de ejemplo.

  • EVALUATION_MODE: el modo de evaluación especifica el tipo de restricción que aplica el verificador de autorización binaria en el momento de la implementación. Sustituye EVALUATION_MODE por una de las siguientes opciones:

    • ALWAYS_ALLOW: permite implementar todas las imágenes.
    • ALWAYS_DENY: no permite que se implementen imágenes.
    • REQUIRE_ATTESTATION: permite implementar una imagen si tiene una o varias certificaciones que pueden verificar todos los certificadores que añadas a esta regla. En el momento de la implementación, el verificador comprueba la atestación mediante los atestadores que añadas a la lista ATTESTOR de esta regla. Para obtener información sobre cómo crear verificadores, consulta Crear verificadores. Si especificas REQUIRE_ATTESTATION, también debes añadir un bloque requireAttestationsBy que contenga al menos un encargado de la atestación. Para obtener información sobre cómo crear verificadores, consulta Crear verificadores.
  • ENFORCEMENT_MODE: el modo obligatorio especifica cómo responde el verificador cuando una imagen infringe una regla. Sustituye ENFORCEMENT_MODE por una de las siguientes opciones:

    • ENFORCED_BLOCK_AND_AUDIT_LOG: bloquea las imágenes que infringen la regla y registra información sobre la infracción en los Registros de auditoría de Cloud (opción predeterminada).
    • DRYRUN_AUDIT_LOG_ONLY: permite que se implementen todas las imágenes, pero registra la información sobre la aplicación, incluida la información sobre las infracciones, en los Registros de auditoría de Cloud.
  • ATTESTOR: si asignas el valor REQUIRE_ATTESTATION a EVALUATION_MODE, también debes añadir un bloque requireAttesationsBy. En el bloque, se enumeran uno o varios verificadores por ID de recurso. El ID de recurso tiene el siguiente formato:

    projects/PROJECT_ID/attestors/ATTESTOR_NAME.

    Para obtener más información sobre cómo crear encargados de la atestación, consulta el artículo Crear encargados de la atestación.

Definir reglas específicas (opcional)

Puedes crear reglas que se limiten a una identidad de servicio de malla, una cuenta de servicio de Kubernetes o un espacio de nombres de Kubernetes.

Definir una regla para una identidad de servicio de Cloud Service Mesh

Para definir una regla para una identidad de servicio de Cloud Service Mesh, edita el archivo policy.yaml y añade un bloque istioServiceIdentityAdmissionRules. Por ejemplo:

defaultAdmissionRule:
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
istioServiceIdentityAdmissionRules:
  SERVICE_IDENTITY_ID:
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    evaluationMode: ENFORCEMENT_MODE
    requireAttestationsBy:
    - <var>ATTESTOR</var>
    - ...

name: projects/PROJECT_ID/policy

Haz los cambios siguientes:

  • SERVICE_IDENTITY_ID: la identidad del servicio Cloud Service Mesh al que se va a acotar esta regla. La identidad de servicio tiene el siguiente formato: PROJECT_ID.svc.id.goog/ns/NAMESPACE/sa/SERVICE_ACCOUNT. En el ID de identidad del servicio, sustituye lo siguiente:

    • PROJECT_ID: el ID del proyecto en el que defines tus recursos de Kubernetes.
    • NAMESPACE: el espacio de nombres de Kubernetes.
    • SERVICE_ACCOUNT: la cuenta de servicio.
  • EVALUATION_MODE: el modo de evaluación especifica el tipo de restricción que aplica el verificador de autorización binaria en el momento de la implementación. Sustituye EVALUATION_MODE por una de las siguientes opciones:

    • ALWAYS_ALLOW: permite implementar todas las imágenes.
    • ALWAYS_DENY: no permite que se implementen imágenes.
    • REQUIRE_ATTESTATION: permite implementar una imagen si tiene una o varias certificaciones que pueden verificar todos los certificadores que añadas a esta regla. En el momento de la implementación, el verificador comprueba la atestación mediante los atestadores que añadas a la lista ATTESTOR de esta regla. Para obtener información sobre cómo crear verificadores, consulta Crear verificadores. Si especificas REQUIRE_ATTESTATION, también debes añadir un bloque requireAttestationsBy que contenga al menos un encargado de la atestación. Para obtener información sobre cómo crear verificadores, consulta Crear verificadores.
  • ENFORCEMENT_MODE: el modo obligatorio especifica cómo responde el verificador cuando una imagen infringe una regla. Sustituye ENFORCEMENT_MODE por una de las siguientes opciones:

    • ENFORCED_BLOCK_AND_AUDIT_LOG: bloquea las imágenes que infringen la regla y registra información sobre la infracción en los Registros de auditoría de Cloud (opción predeterminada).
    • DRYRUN_AUDIT_LOG_ONLY: permite que se implementen todas las imágenes, pero registra la información sobre la aplicación, incluida la información sobre las infracciones, en los Registros de auditoría de Cloud.
  • ATTESTOR: si asignas el valor REQUIRE_ATTESTATION a EVALUATION_MODE, también debes añadir un bloque requireAttesationsBy. En el bloque, se enumeran uno o varios verificadores por ID de recurso. El ID de recurso tiene el siguiente formato:

    projects/PROJECT_ID/attestors/ATTESTOR_NAME.

    Para obtener más información sobre cómo crear encargados de la atestación, consulta el artículo Crear encargados de la atestación.

Definir una regla para una cuenta de servicio de Kubernetes

Para definir una regla para una cuenta de servicio de Kubernetes, edita el archivo policy.yaml y añade un bloque kubernetesServiceAccountAdmissionRules. Por ejemplo:

defaultAdmissionRule:
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
kubernetesServiceAccountAdmissionRules:
  KUBERNETES_SERVICE_ACCOUNT_ID:
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    evaluationMode: ENFORCEMENT_MODE
    requireAttestationsBy:
    - <var>ATTESTOR</var>
    - ...
name: projects/PROJECT_ID/policy

Haz los cambios siguientes:

  • KUBERNETES_SERVICE_ACCOUNT_ID: la cuenta de servicio de Kubernetes a la que se va a limitar la regla. Este ID de cuenta de servicio tiene el siguiente formato: NAMESPACE:SERVICE_ACCOUNT. En el ID de cuenta de servicio, sustituye lo siguiente:

    • NAMESPACE: el espacio de nombres de Kubernetes.
    • SERVICE_ACCOUNT: el nombre de la cuenta de servicio.
  • EVALUATION_MODE: el modo de evaluación especifica el tipo de restricción que aplica el verificador de autorización binaria en el momento de la implementación. Sustituye EVALUATION_MODE por una de las siguientes opciones:

    • ALWAYS_ALLOW: permite implementar todas las imágenes.
    • ALWAYS_DENY: no permite que se implementen imágenes.
    • REQUIRE_ATTESTATION: permite implementar una imagen si tiene una o varias certificaciones que pueden verificar todos los certificadores que añadas a esta regla. En el momento de la implementación, el verificador comprueba la atestación mediante los atestadores que añadas a la lista ATTESTOR de esta regla. Para obtener información sobre cómo crear verificadores, consulta Crear verificadores. Si especificas REQUIRE_ATTESTATION, también debes añadir un bloque requireAttestationsBy que contenga al menos un encargado de la atestación. Para obtener información sobre cómo crear verificadores, consulta Crear verificadores.
  • ENFORCEMENT_MODE: el modo obligatorio especifica cómo responde el verificador cuando una imagen infringe una regla. Sustituye ENFORCEMENT_MODE por una de las siguientes opciones:

    • ENFORCED_BLOCK_AND_AUDIT_LOG: bloquea las imágenes que infringen la regla y registra información sobre la infracción en los Registros de auditoría de Cloud (opción predeterminada).
    • DRYRUN_AUDIT_LOG_ONLY: permite que se implementen todas las imágenes, pero registra la información sobre la aplicación, incluida la información sobre las infracciones, en los Registros de auditoría de Cloud.
  • ATTESTOR: si asignas el valor REQUIRE_ATTESTATION a EVALUATION_MODE, también debes añadir un bloque requireAttesationsBy. En el bloque, se enumeran uno o varios verificadores por ID de recurso. El ID de recurso tiene el siguiente formato:

    projects/PROJECT_ID/attestors/ATTESTOR_NAME.

    Para obtener más información sobre cómo crear encargados de la atestación, consulta el artículo Crear encargados de la atestación.

Definir una regla para un espacio de nombres de Kubernetes

Para definir una regla para un espacio de nombres de Kubernetes, edita el archivo policy.yaml y añade un bloque kubernetesNamespaceAdmissionRules, por ejemplo:

defaultAdmissionRule:
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  evaluationMode: ALWAYS_DENY
globalPolicyEvaluationMode: ENABLE
kubernetesNamespaceAdmissionRules:
  KUBERNETES_NAMESPACE:
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    evaluationMode: EVALUATION_MODE
    requireAttestationsBy:
    - <var>ATTESTOR</var>
    - ...
name: projects/PROJECT_ID/policy

Haz los cambios siguientes:

  • KUBERNETES_NAMESPACE: el espacio de nombres de Kubernetes al que se va a limitar esta regla.

  • EVALUATION_MODE: el modo de evaluación especifica el tipo de restricción que aplica el verificador de autorización binaria en el momento de la implementación. Sustituye EVALUATION_MODE por una de las siguientes opciones:

    • ALWAYS_ALLOW: permite implementar todas las imágenes.
    • ALWAYS_DENY: no permite que se implementen imágenes.
    • REQUIRE_ATTESTATION: permite implementar una imagen si tiene una o varias certificaciones que pueden verificar todos los certificadores que añadas a esta regla. En el momento de la implementación, el verificador comprueba la atestación mediante los atestadores que añadas a la lista ATTESTOR de esta regla. Para obtener información sobre cómo crear verificadores, consulta Crear verificadores. Si especificas REQUIRE_ATTESTATION, también debes añadir un bloque requireAttestationsBy que contenga al menos un encargado de la atestación. Para obtener información sobre cómo crear verificadores, consulta Crear verificadores.
  • ENFORCEMENT_MODE: el modo obligatorio especifica cómo responde el verificador cuando una imagen infringe una regla. Sustituye ENFORCEMENT_MODE por una de las siguientes opciones:

    • ENFORCED_BLOCK_AND_AUDIT_LOG: bloquea las imágenes que infringen la regla y registra información sobre la infracción en los Registros de auditoría de Cloud (opción predeterminada).
    • DRYRUN_AUDIT_LOG_ONLY: permite que se implementen todas las imágenes, pero registra la información sobre la aplicación, incluida la información sobre las infracciones, en los Registros de auditoría de Cloud.
  • ATTESTOR: si asignas el valor REQUIRE_ATTESTATION a EVALUATION_MODE, también debes añadir un bloque requireAttesationsBy. En el bloque, se enumeran uno o varios verificadores por ID de recurso. El ID de recurso tiene el siguiente formato:

    projects/PROJECT_ID/attestors/ATTESTOR_NAME.

    Para obtener más información sobre cómo crear encargados de la atestación, consulta el artículo Crear encargados de la atestación.

Importa el archivo YAML de la política

Esta sección se aplica a GKE, Distributed Cloud, Cloud Run y Cloud Service Mesh.

Vuelve a importar el archivo YAML de la política a Autorización binaria introduciendo lo siguiente:

gcloud container binauthz policy import /tmp/policy.yaml

Siguientes pasos