Crea y ejecuta trabajos como un usuario no raíz

En este documento, se describe cómo crear y ejecutar un trabajo por lotes como un usuario que no es root.

De forma predeterminada, Batch ejecuta los elementos ejecutables como el usuario raíz. Si deseas que Batch ejecute elementos ejecutables como un usuario que no sea raíz (por ejemplo, para ejecutar una aplicación que no permita usuarios raíz o para cumplir con los requisitos de seguridad), crea un trabajo por lotes que use el Acceso al SO. Cuando habilitas el Acceso al SO en un trabajo por lotes, este servicio configura una cuenta de usuario para ti en las VMs en las que se ejecuta tu trabajo. Luego, tu cuenta de usuario en la VM ejecuta todos los elementos ejecutables de la tarea en lugar del usuario raíz.

Antes de comenzar

  1. Si nunca usaste Batch, consulta Cómo comenzar a usar Batch y habilita Batch completando los requisitos previos para proyectos y usuarios.
  2. Si aún no lo hiciste, habilita la API de Acceso al SO ejecutando el siguiente comando:

    gcloud services enable oslogin.googleapis.com
    
  3. Para obtener los permisos que necesitas para crear y ejecutar un trabajo como usuario que no es root, pídele a tu administrador que te otorgue los siguientes roles de IAM:

    Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

    También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Crea un trabajo que se ejecute como un usuario no raíz

Para crear un trabajo por lotes que ejecute ejecutables a través de tu propia cuenta de usuario, haz lo siguiente:

Usa Google Cloud CLI o la API de REST para crear una tarea que incluya el campo runAsNonRoot configurado en true en el cuerpo principal del archivo JSON:

"runAsNonRoot": true

Por ejemplo, un trabajo que ejecuta ejecutables como un usuario que no es root tendría un archivo de configuración JSON similar al siguiente:

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              "script": {
                "text": "echo Hello World! This is task $BATCH_TASK_INDEX executed by $(whoami)."
              }
            }
          ]
        },
        "taskCount": 3,
        "runAsNonRoot": true
      }
    ],
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

¿Qué sigue?