Actualizar 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á la política para eximir a las imágenes de contenedor de Artifact Registry de la aplicación de la autorización binaria y definirá la regla predeterminada para que no se puedan desplegar otros contenedores.

Antes de empezar

  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 utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud 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 utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

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

    gcloud init
  14. Si no usas Cloud Shell, instala kubectl.
  15. Crear 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 quieres que se ejecuten tus imágenes de contenedor desplegadas.

    Google Cloud consola

    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 Google Cloud proyecto.

    2. Haz clic en Crear clúster.

    3. Introduce test-cluster en el campo Nombre.

      Campo Nombre de la plantilla de clúster estándar

    4. Selecciona Zonal en las opciones de Tipo de ubicación.

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

    6. Haz clic en el enlace Seguridad para que aparezca el panel Seguridad.

    7. En el panel Seguridad, selecciona Habilitar la autorización binaria.

      Habilitar la opción 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
    

    Ver la política predeterminada

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

    Google Cloud consola

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

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

      Ir a Autorización binaria

      La consola muestra detalles sobre la política.

    2. Haz clic en Editar política.

    3. En Regla predeterminada del proyecto, la opción Permitir todas las imágenes está seleccionada.

    gcloud

    Para ver la política predeterminada, exporta el archivo YAML de la política 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 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 REST devuelve lo siguiente:

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

    Permitir solo imágenes exentas

    En esta sección se describe cómo modificar la política para excluir imágenes y no permitir que se implementen otras imágenes.

    Google Cloud consola

    Para modificar la política, haz lo siguiente:

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

      Ir a Autorización binaria

    2. Haz clic en Editar política.

    3. Selecciona No permitir todas las imágenes.

    4. En Imágenes a las que no se les aplican las reglas de despliegue, despliega Rutas de imágenes.

    5. Haz clic en Añadir rutas de imagen.

      Artifact Registry

      En Nueva ruta de imagen, pega la siguiente ruta de un repositorio de Artifact Registry:

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

    7. Haz 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 YAML de la política:

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

      Para excluir las siguientes imágenes de ejemplo de Artifact Registry, modifique el archivo YAML de su política 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. Importa el archivo YAML de la política en la autorización binaria:

      gcloud container binauthz policy import /tmp/policy.yaml
      

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

    Probar la política

    Para probar la política implementando la imagen que has añadido a la lista de permitidas Exempt image, haz lo siguiente:

    1. Despliega una imagen exenta en el clúster.

      Google Cloud consola

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

        La consola te pedirá que introduzcas los detalles del despliegue.

      3. Selecciona Imagen de contenedor que ya existe.

      4. Introduce la ruta de la imagen del contenedor.

        Artifact Registry

        Para desplegar una imagen de Artifact Registry, introduce lo siguiente:

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

      6. Introduce hello-server en el campo Nombre de la aplicación.

      7. Haz clic en Desplegar.

      kubectl

      Artifact Registry

      Despliega la imagen de Artifact Registry:

      kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
      
    2. Verifica que se haya permitido desplegar la imagen:

      Google Cloud consola

      Para comprobar que la imagen se ha desplegado, haz lo siguiente:

      1. Ve a la página de GKE.

      Ir a GKE

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

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

      kubectl

      Para verificar que se ha permitido implementar la imagen, introduce el siguiente comando:

      kubectl get pods
      

      Verás la imagen en ejecución.

    3. Elimina el pod.

      Google Cloud consola

      En la página Cargas de trabajo de GKE:

      1. Selecciona la carga de trabajo hello-server.

      2. Haz clic en Eliminar.

      3. Cuando se te pida que elimines recursos, haz clic en Eliminar.

      kubectl

      kubectl delete pod hello-server
      

    Limpieza

    Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en esta página, sigue estos pasos.

    Elimina el clúster que has creado en GKE:

    Consola

    Para eliminar el clúster, sigue estos pasos:

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

    gcloud

    Para eliminar el clúster, introduce el siguiente comando:

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

    Siguientes pasos