> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Permisos de computación

> Cada acción de IAM que el servicio de cómputo comprueba y cómo ampliar los permisos de recopilación por región y cuenta.

Cada punto final de cómputo comprueba una acción de IAM antes de realizar cualquier acción, con una excepción que se indica a continuación.

<Info>
  La referencia de la API muestra la acción en la página propia de cada punto final, por lo que no tiene que volver aquí para buscar una. Ambos provienen del mismo lugar: la llamada de autorización en el servicio, leída en el momento de la compilación.
</Info>

<a id="resources" />

## Recursos

| Recursos de la web | CRN | Claveado por |
| - | - | - |
| Instancia de | `crn:compute:<region>:<account>:instance/<name>` | nombre inmutable |
| Grupo de instancias | `crn:compute:<region>:<account>:instance-pool/<name>` | nombre inmutable |
| Imagen (tuyo) | `crn:compute:<region>:<account>:image/<name>/architecture/<arch>/version/<version>` | nombre, arquitectura y versión |
| Imagen (plataforma) | `crn:compute:<region>:platform:image/<name>/architecture/<arch>/version/<version>` | nombre, arquitectura y versión en la cuenta de la plataforma |
| Tipo de instancia | `crn:compute:<region>:platform:flavor/<name>` | nombre, ranura de cuenta de plataforma |

Los recursos con nombre pueden ser dirigidos de forma legible en una directiva. Por ejemplo, una instancia CRN lleva su nombre inmutable:

```
crn:compute:sa-saopaulo-1:my-account:instance/ci-*
```

Los CRN de instancia y de grupo llevan nombres inmutables. Los CRN de imagen fijan el nombre, la arquitectura y la versión. Las imágenes y tipos de instancia de plataforma usan el identificador de cuenta `platform`.

<a id="the-actions" />

## Las acciones

| Acción y aventura | Llamada de teléfono | Comprobado contra |
| - | - | - |
| `compute:AttachNIC` | `POST /v1/instances/{instance_id}/nics` | la instancia |
| `compute:AttachVolume` | `POST /v1/instances/{instance_id}/volumes` | la instancia |
| `compute:AttachVolume` | `PATCH /v1/instances/{instance_id}/volumes/{volume_id}` | la instancia |
| `compute:CreateImage` | `POST /v1/images` | `crn:compute:<region>:<account>:image/*` |
| `compute:CreateInstance` | `POST /v1/instances` | `crn:compute:<region>:<account>:instance/*` |
| `compute:CreateInstancePool` | `POST /v1/instance-pools` | `crn:compute:<region>:<account>:instance-pool/*` |
| `compute:DeleteImage` | `DELETE /v1/images/{image_id}` | la imagen |
| `compute:DeleteInstance` | `DELETE /v1/instances/{instance_id}` | la instancia |
| `compute:DeleteInstancePool` | `DELETE /v1/instance-pools/{pool_id}` | la agrupación |
| `compute:DetachNIC` | `DELETE /v1/instances/{instance_id}/nics/{interface_id}` | la instancia |
| `compute:DetachVolume` | `DELETE /v1/instances/{instance_id}/volumes/{volume_id}` | la instancia |
| `compute:GetConsoleOutput` | `GET /v1/instances/{instance_id}/console/output` | la instancia |
| `compute:GetConsoleScreenshot` | `GET /v1/instances/{instance_id}/console/screenshot` | la instancia |
| `compute:GetFlavor` | `GET /v1/flavors/{flavor_id}` | el tipo de instancia |
| `compute:GetImage` | `GET /v1/images/{image_id}` | la imagen |
| `compute:GetInstance` | `GET /v1/instances/{instance_id}` | la instancia |
| `compute:GetInstance` | `GET /v1/instances/{instance_id}/nics` | la instancia |
| `compute:GetInstance` | `GET /v1/instances/{instance_id}/volumes` | la instancia |
| `compute:GetInstancePool` | `GET /v1/instance-pools/{pool_id}` | la agrupación |
| `compute:GetInstancePool` | `GET /v1/instance-pools/{pool_id}/floating-ips` | la agrupación |
| `compute:GetInstancePool` | `GET /v1/instance-pools/{pool_id}/instances` | la agrupación |
| `compute:ListFlavors` | `GET /v1/flavors` | `crn:compute:<region>:platform:flavor/*` |
| `compute:ListImages` | `GET /v1/images` | `crn:compute:<region>:<account>:image/*` |
| `compute:ListInstancePools` | `GET /v1/instance-pools` | `crn:compute:<region>:<account>:instance-pool/*` |
| `compute:ListInstances` | `GET /v1/instances` | `crn:compute:<region>:<account>:instance/*` |
| `compute:RebootInstance` | `POST /v1/instances/{instance_id}/reboot` | la instancia |
| `compute:ReinstallInstance` | `POST /v1/instances/{instance_id}/reinstall` | la instancia |
| `compute:ResizeInstance` | `POST /v1/instances/{instance_id}/resize` | la instancia |
| `compute:StartInstance` | `POST /v1/instances/{instance_id}/start` | la instancia |
| `compute:StartSerialConsole` | `GET /v1/instances/{instance_id}/console/serial` | la instancia |
| `compute:StopInstance` | `POST /v1/instances/{instance_id}/stop` | la instancia |
| `compute:UpdateImage` | `PATCH /v1/images/{image_id}` | la imagen |
| `compute:UpdateInstance` | `PATCH /v1/instances/{instance_id}` | la instancia |
| `compute:UpdateInstancePool` | `PATCH /v1/instance-pools/{pool_id}` | la agrupación |
| `compute:UpdateInstancePool` | `POST /v1/instance-pools/{pool_id}/floating-ips` | la agrupación |
| `compute:UpdateInstancePool` | `DELETE /v1/instance-pools/{pool_id}/floating-ips/{floating_ip_id}` | la agrupación |
| `compute:UpdateInstancePool` | `POST /v1/instance-pools/{pool_id}/refresh` | la agrupación |
| `none` | `POST /v1/instances/{instance_id}/console/ticket` | sin verificación de la política |

<a id="scope-collection-permissions" />

## Permisos de colección de ámbito

Las acciones de creación y listado comprueban un CRN de colección escrito con la región configurada y el identificador de cuenta solicitante. Por ejemplo, `crn:compute:sa-saopaulo-1:my-account:instance/*` concede la creación de instancias y la inclusión en esa región y cuenta; una directiva que nombra otra región o cuenta no lo hace.

Los tipos de instancia son un catálogo global de regiones: `compute:ListFlavors` comprueba `crn:compute:<region>:platform:flavor/*` usando el identificador de cuenta `platform`.

Listado de imágenes y verificación de creación `crn:compute:<region>:<account>:image/*` utilizando la cuenta solicitante, incluyendo la cuenta de plataforma para `compute:CreateImage`. Listing puede devolver imágenes de plataforma con `platform` en sus CRN de objeto; esos CRN de objeto son distintos de la colección utilizada para autorizar la solicitud.

Las subvenciones existentes con `"resources": ["*"]` siguen funcionando. Los patrones de recursos tipo en las instrucciones de deny ahora coinciden con estas acciones de colección también, y un deny explícito tiene prioridad sobre un allow.

Esta directiva permite lanzar y listar instancias en una cuenta y región. Su declaración separada limita las operaciones en instancias existentes por etiqueta:

```json theme={null}
{
  "version": "2024-01-01",
  "statements": [
    {
      "effect": "allow",
      "actions": ["compute:CreateInstance", "compute:ListInstances"],
      "resources": ["crn:compute:sa-saopaulo-1:my-account:instance/*"]
    },
    {
      "effect": "allow",
      "actions": [
        "compute:GetInstance", "compute:StartInstance", "compute:StopInstance"
      ],
      "resources": ["crn:compute:sa-saopaulo-1:my-account:instance/*"],
      "conditions": [
        { "operator": "equals",
          "key": "basalt:ResourceTag/env", "values": ["staging"] }
      ]
    }
  ]
}
```

Las acciones de creación exponen las etiquetas enviadas como `basalt:RequestTag/<key>`. Mantener `basalt:ResourceTag/<key>` condiciones en las operaciones de recursos existentes: la instancia no existe todavía durante la creación, y las comprobaciones de lista nombran una colección.

<a id="reading-is-not-one-action" />

## La lectura no es una acción

Tres puntos finales de consola requieren tres acciones diferentes, deliberadamente:

| Acción y aventura | Lo que da |
| - | - |
| `compute:GetConsoleOutput` | La transcripción de arranque — lo que el kernel y cloud-init imprimieron. |
| `compute:GetConsoleScreenshot` | Una imagen de la pantalla actual. |
| `compute:StartSerialConsole` | Un **teclado dentro del huésped**. |

El tercero no es una lectura. Es un acceso interactivo a una máquina en ejecución, y es el que debe negarse a cualquiera que solo necesite diagnosticar un arranque.

<Note>
  La creación de un ticket de consola (`POST /v1/instances/{instance_id}/console/ticket`) comprueba que **no se realiza ninguna acción de IAM**. Requiere autenticación y contexto de organización y nada más, porque el ticket lleva identidad, no autorización: si la consola puede realmente abrirse se decide cuando el socket se conecta, contra `compute:StartSerialConsole` como la política está en ese momento.

  Congelando la decisión en el ticket significaría que un permiso revocado en el minuto intermedio aún dejaría que la consola se abriera. Se emite un ticket para una instancia a la que no se puede llegar y luego es inútil.
</Note>

<a id="sub-resources-are-governed-by-their-parent" />

## Los subrecursos se rigen por su recurso principal

La lista de NICs o volúmenes de una instancia necesita `compute:GetInstance` — no hay una acción de lectura separada para ninguno de los dos. El mismo patrón cubre los pools: leer las IP flotantes de un pool o sus instancias necesita `compute:GetInstancePool`, y adjuntar una dirección, separar una o actualizar el pool necesita `compute:UpdateInstancePool`.

<Warning>
  Eso significa que `compute:UpdateInstancePool` es una concesión que cubre tres cosas muy diferentes: cambiar el tamaño del grupo, rodar cada miembro en una nueva plantilla y adjuntar una dirección pública a él. No hay manera de permitir el cambio de tamaño y retener el rollo.
</Warning>

<a id="an-action-whose-name-does-not-match-the-call" />

## Una acción cuyo nombre no coincide con la llamada

<AccordionGroup>
  <Accordion title="PATCH un volumen adjunto necesita compute:AttachVolume" icon="triangle-alert">
    `PATCH /v1/instances/{instance_id}/volumes/{volume_id}` cambia `delete_on_termination` — el indicador que decide si un volumen sobrevive a la instancia que se está eliminando. Está autorizado por **`compute:AttachVolume`**.

    El registro de auditoría para él dice `compute:UpdateVolumeAttachment`, que es una etiqueta en lugar de una acción: ninguna política puede concederlo, y buscarlo no encuentra nada.
  </Accordion>
</AccordionGroup>

<a id="image-ownership-limits-permissions" />

## La propiedad de la imagen limita los permisos

Todas las cuentas usan `compute:CreateImage`, `compute:UpdateImage` y `compute:DeleteImage`, incluyendo la cuenta de plataforma. No hay acciones separadas `CreatePlatformImage`, `UpdatePlatformImage` o `DeletePlatformImage`.

Para actualizar y eliminar, la cuenta seleccionada debe ser propietaria de la imagen. La visibilidad del catálogo público y las concesiones de IAM comodín no omiten la propiedad. Una solicitud de una cuenta de cliente para cambiar una imagen de plataforma devuelve `403`; la imagen de otro cliente devuelve `404`. Seleccione la cuenta propietaria y conceda la acción de imagen ordinaria en su CRN para administrarla.

Las imágenes retiradas siguen siendo inspeccionables con las acciones de lectura ordinarias. Un propietario puede eliminar una después de eliminar las referencias de instancia y de grupo. La eliminación de imágenes sigue siendo legible durante la limpieza, pero las solicitudes de mutación devuelven `404`.

<a id="changing-an-instance-workload-role" />

## Cambiar un rol de carga de trabajo de instancia

Adjuntar, reemplazar y separar un rol en una instancia existente requieren `compute:UpdateInstance` con alcance en esa instancia. Adjuntar y reemplazar requieren adicionalmente `iam:PassRole` en el rol seleccionado. El rol debe pertenecer a la misma cuenta y su directiva de confianza debe permitir el CRN de la instancia. Detach no tiene rol de destino y no requiere `iam:PassRole`.

Consulte [Cambiar el rol de una instancia existente](/es/compute/instances#change-an-existing-instances-role) para conocer las restricciones del ciclo de vida y la validez de las credenciales emitidas anteriormente.

<a id="next" />

## Siguiente

<CardGroup cols={2}>
  <Card title="Escribir políticas" icon="file-text" href="/es/iam/policies">
    Condiciones, operadores y cómo se evalúa `deny`.
  </Card>

  <Card title="Solución de problemas" icon="life-buoy" href="/es/compute/troubleshooting">
    Qué significa un estado y por qué un lanzamiento falló.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.