Actualiza una política de autorización binaria

En este documento, se describe cómo eximir imágenes en las políticas de Autorización Binaria.

En este documento, actualizarás la política para eximir las imágenes de contenedores en Artifact Registry de la aplicación de Autorización Binaria, y configurar la regla predeterminada para inhabilitar la implementación de todos los demás contenedores.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

  7. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

  13. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  14. Si no usas Cloud Shell, instala kubectl.
  15. Crea un clúster con la autorización binaria habilitada

    Crea un clúster (de GKE) con la autorización binaria habilitada Este es el clúster en el que se recomienda que se ejecuten las imágenes de contenedor que implementaste.

    Consola de Google Cloud

    1. Ve a la página Clústeres de GKE en la consola deGoogle Cloud .

      Ir a GKE

      La consola muestra una lista de clústeres de GKE en tu proyecto Google Cloud .

    2. Haz clic en Crear clúster.

    3. Ingresa test-cluster en el campo Nombre (Name).

      Campo Nombre en la plantilla del clúster estándar

    4. Selecciona Zonal en las opciones de Tipo de ubicación (Location type).

    5. Selecciona us-central1-a de la lista desplegable Zona.

    6. Haz clic en el vínculo Seguridad para que se muestre el panel Seguridad.

    7. En la sección Seguridad, selecciona Habilitar Autorización Binaria.

      Opción Habilitar autorización binaria

    8. Selecciona Solo aplicar.

    9. Haz clic en Crear.

    gcloud

    Ejecuta gcloud container clusters create con la marca --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE habilitada.

    gcloud container clusters create \
        --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
        --zone us-central1-a \
        test-cluster
    

    Visualiza la política predeterminada

    De forma predeterminada, la política de autorización binaria está configurada para permitir que se implementen todas las imágenes de contenedor.

    Consola de Google Cloud

    Para ver la política predeterminada, haz lo siguiente:

    1. Ve a la página Autorización binaria en la consola de Google Cloud .

      Ve a Autorización binaria

      En la consola, se muestran detalles de la política.

    2. Haz clic en Editar política.

    3. En Regla predeterminada del proyecto (Project Default Rule), está seleccionada la opción Permitir todas las imágenes (Allow All Images).

    gcloud

    Para ver la política predeterminada, exporta el archivo de política en formato YAML y haz lo siguiente:

    gcloud container binauthz policy export
    

    De forma predeterminada, el archivo tiene el siguiente contenido:

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

    API de REST

    Para ver la política predeterminada, recupérala en formato JSON de la siguiente manera:

    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"
    

    La API de REST muestra lo siguiente:

    {
      "name": "projects/PROJECT_ID/policy",
      "globalPolicyEvaluationMode": "ENABLE",
      "defaultAdmissionRule": {
        "evaluationMode": "ALWAYS_ALLOW",
        "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
      }
    }
    

    Admite solo imágenes exentas

    En esta sección, se describe cómo modificar la política para eximir a las imágenes y no permitir que se implementen todas las demás imágenes.

    Consola de Google Cloud

    Para modificar la política, haz lo siguiente:

    1. Regresa a la página Autorización binaria en la consola de Google Cloud .

      Ve a Autorización binaria

    2. Haz clic en Editar política.

    3. Selecciona Inhabilitar todas las imágenes (Disallow all images).

    4. En Imágenes exentas de reglas de implementación, expande Rutas de imágenes.

    5. Haz clic en Agregar rutas de imágenes.

      Artifact Registry

      En Ruta de acceso a la imagen nueva, pega la siguiente ruta desde un repositorio de Artifact Registry:

      us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      
    6. Haz clic en Listo para guardar la ruta de acceso de la imagen.

    7. Haga clic en Save Policy.

    gcloud

    Para modificar la política y permitir imágenes de ejemplo de Artifact Registry, haz lo siguiente:

    1. Exporta el archivo de políticas en formato YAML:

      gcloud container binauthz policy export  > /tmp/policy.yaml
      
    2. En un editor de texto, cambia el evaluationMode de ALWAYS_ALLOW a ALWAYS_DENY y agrega imágenes exentas a admissionWhitelistPatterns.

      Para eximir las siguientes imágenes de ejemplo de Artifact Registry, modifica el archivo YAML de políticas de la siguiente manera:

      admissionWhitelistPatterns:
      - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      globalPolicyEvaluationMode: ENABLE
      defaultAdmissionRule:
        evaluationMode: ALWAYS_DENY
        enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      name: projects/<var>PROJECT_ID</var>/policy
      
    3. Vuelve a importar el archivo de políticas en formato YAML a la autorización binaria:

      gcloud container binauthz policy import /tmp/policy.yaml
      

    API de REST

    Para modificar la política, haz lo siguiente:

    1. Crea un archivo de texto con la política actualizada en formato JSON:

      cat > /tmp/policy.json << EOM
      {
        "name": "projects/${PROJECT_ID}/policy",
        "admissionWhitelistPatterns": [
          {
            "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
          }
        ],
        "globalPolicyEvaluationMode": "ENABLE",
        "defaultAdmissionRule": {
          "evaluationMode": "ALWAYS_DENY",
          "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
        }
      }
      EOM
      
    2. Envía la política actualizada a la API de REST:

      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"
      

    Prueba la política

    Para probar la política mediante la implementación de la imagen que agregaste a la lista de entidades permitidas de Exempt image, haz lo siguiente:

    1. Implementa una imagen exenta en el clúster

      Consola de Google Cloud

      Implementa una imagen exenta:

      1. Ve a la página Clústeres de GKE en la consola deGoogle Cloud .

        Ir a GKE

      2. Haz clic en Implementar.

        La consola te solicitará que ingreses los detalles de la implementación.

      3. Selecciona Imagen de contenedor existente (Existing Container Image).

      4. Ingresa la ruta de la imagen del contenedor.

        Artifact Registry

        Para implementar una imagen de Artifact Registry, ingresa lo siguiente:

        us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        
      5. Haga clic en Continuar.

      6. Ingresa hello-server en el campo Nombre de la aplicación (Application Name).

      7. Haz clic en Implementar.

      kubectl

      Artifact Registry

      Implementa la imagen desde Artifact Registry:

      kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
      
    2. Verifica que la imagen tenga permiso para implementarse:

      Consola de Google Cloud

      Para verificar que se haya implementado la imagen, haz lo siguiente:

      1. Ir a la página de GKE.

      Ir a GKE

      1. Ir a la página Cargas de trabajo.

      La carga de trabajo hello-server aparece con un ícono verde, lo que indica que se está ejecutando.

      kubectl

      Para verificar que la imagen se pudo implementar, ingresa el siguiente comando:

      kubectl get pods
      

      Verás la imagen en ejecución.

    3. Borra el Pod.

      Consola de Google Cloud

      En la página Cargas de trabajo de GKE:

      1. Selecciona la carga de trabajo hello-server.

      2. Haz clic en Borrar.

      3. Cuando se te solicite borrar recursos, haz clic en Borrar.

      kubectl

      kubectl delete pod hello-server
      

    Limpia

    Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta página.

    Borra el clúster que creaste en GKE:

    Console

    Para borrar el clúster, haz lo siguiente:

    1. Ve a la página Clústeres de GKE en la consola deGoogle Cloud .

      Ir a GKE

    2. Selecciona el clúster test-cluster y haz clic en Borrar.

    gcloud

    Para borrar el clúster, ingresa el siguiente comando:

    gcloud container clusters delete \
        --zone=us-central1-a \
        test-cluster
    

    ¿Qué sigue?