Proxmox API acceso con Ticket y API Tokens
Existen varias formas de acceder al API de Proxmox. Una es usando un token generado de forma temporal (ticket) que nos devuelve una llamada a nuestros Proxmox (Ya sea un Proxmox VE, un Proxmox Backup Server o un Proxmox Mail Gateway)
Cookie Ticket
Un ticket es un valor de texto aleatorio firmado que incluye el usuario y la hora de creación. Los tickets están firmados por la clave de autenticación de todo el clúster que se rota una vez al día.
Además, cualquier solicitud de escritura (POST/PUT/DELETE) debe incluir un token de prevención CSRF dentro del encabezado HTTP. Los siguientes ejemplos utilizan la herramienta de línea de comando curl.
Ejemplo: obtener un nuevo ticket y el token de prevención CSRF
Advertencia, los parámetros de la línea de comando son visibles para todo el sistema; evita ejecutar lo siguiente en hosts que no sean de confianza ya que se muestran los datos de usuario y password.
curl -k -d 'username=root@pam' --data-urlencode 'password=nocopiesestepasswordquenotevaafuncionar' https://10.0.0.1:8006/api2/json/access/ticket
Esto nos devolverá en JSON como el del ejemplo que mostramos
{
"data": {
"CSRFPreventionToken":"EDUEDUE2:IoLu1UzvOmeBOVuHf+b6QaZpxOZnPYY",
"ticket":"PVE:root@pam:EDUEDUE2::6to03dN5AL66ecT0VPUboLB18oxg...",
"username":"root@pam"
}
}
NOTA: Los tickets tienen una duración limitada de 2 horas. Pero simplemente puede obtener un ticket nuevo pasando el ticket antiguo como contraseña al método /access/ticket antes de que expire su vida útil.
Debes pasar el ticket devuelto con una cookie a cualquier solicitud posterior
curl -k -b "PVEAuthCookie=PVE:root@pam:EDUEDUE2::6to03dN5AL66ecT0VPUboLB18oxg..." https://10.0.0.1:8006/api2/json/
Nos devolverá la información básica del api
{
"data": [
{ "subdir": "version" },
{ "subdir": "cluster" },
{ "subdir": "nodes" },
{ "subdir": "storage" },
{ "subdir": "access" },
{ "subdir": "pools" }
]
}
Además, cualquier solicitud de escritura (POST, PUT, DELETE) debe incluir el encabezado CSRFPreventionToken:
curl -XDELETE -H "CSRFPreventionToken:EDUEDUE2:IoLu1UzvOmeBOVuHf+b6QaZpxOZnPYY" ......
La otra forma es mediante un API Token
API Token
Los tokens API permiten el acceso stateless (sin estado) a la mayoría de las partes de la API REST desde otro sistema, software o cliente API. Se pueden generar tokens para usuarios individuales y se les pueden otorgar permisos y fechas de vencimiento separados para limitar el alcance y la duración del acceso. Si el token API se ve comprometido, se puede revocar sin deshabilitar al usuario.
Los tokens API vienen en dos tipos básicos:
Privilegios separados: el token debe tener acceso explícito con ACL. Sus permisos efectivos se calculan cruzando los permisos de usuario y token.
Privilegios completos: los permisos del token son idénticos a los del usuario asociado.
Precaución El valor del token solo se muestra/devuelve una vez cuando se genera el token. ¡No se puede volver a recuperar a través de la API más adelante!
Para usar un token de API, establece en el encabezado HTTP la Autorización
curl -H "Authorization: PVEAPIToken=eduardo@pbs!pruebas=aaaaaaaaa-bbb-cccc-dddd-ef0123456789" https://10.0.0.1:8006/api2/json/