

# Seguridad y permisos
<a name="microvms-security"></a>

En esta sección se describen los roles de IAM, los tokens de autenticación y los controles de acceso de las MicroVM de AWS Lambda.

## Roles de IAM
<a name="microvms-security-iam-roles"></a>

### Rol de compilación
<a name="microvms-security-build-role"></a>

Este rol se utiliza durante la creación de la imagen. Requiere los siguientes permisos para recuperar los artefactos de origen y generar registros: `s3:GetObject`, `logs:CreateLogGroup`, `logs:CreateLogStream` y `logs:PutLogEvents`. Agregue también `ecr:GetAuthorizationToken` si se hace referencia a imágenes privadas de ECR.

El rol de compilación es opcional. Si no se proporciona un rol de compilación, Lambda no puede escribir los registros de compilación en CloudWatch.

### Rol de ejecución
<a name="microvms-security-execution-role"></a>

Este rol se usa durante el tiempo de ejecución de la MicroVM para conceder permisos de acceso que permiten escribir registros en CloudWatch y usar otros servicios de AWS.

El rol de ejecución es opcional. Si no se proporciona un rol de ejecución, Lambda no envía registros del tiempo de ejecución a CloudWatch y la MicroVM no puede acceder a otros servicios de AWS.

Los enlaces del ciclo de vida se ejecutan con el rol asociado a su fase. Los enlaces de compilación (`/ready` y `/validate`) se ejecutan con el rol de compilación. Los enlaces del tiempo de ejecución (`/run`, `/resume`, `/suspend` y `/terminate`) se ejecutan con el rol de ejecución.

### Políticas de confianza
<a name="microvms-security-trust-policies"></a>

Ambos roles requieren una política de confianza que permita a la entidad principal de servicio de Lambda `lambda.amazonaws.com` realizar `sts:AssumeRole` y `sts:TagSession`.

## Tokens de autenticación
<a name="microvms-security-auth-tokens"></a>

Los tokens controlan el acceso entrante a las MicroVM en ejecución. Su ámbito se limita a los puertos; cada token especifica los puertos a los que concede acceso.

```
# Token granting access to all ports
aws lambda-microvms create-microvm-auth-token \
  --microvm-identifier <id> \
  --expiration-in-minutes 30 \
  --allowed-ports '[{"allPorts":{}}]'

# Token granting access to port 8080 only
aws lambda-microvms create-microvm-auth-token \
  --microvm-identifier <id> \
  --expiration-in-minutes 30 \
  --allowed-ports '[{"port":8080}]'
```

## Tokens de acceso al intérprete de comandos
<a name="microvms-security-shell-tokens"></a>

El acceso al intérprete de comandos utiliza una API de tokens independiente. La MicroVM de destino se debe haber ejecutado con el conector de red `SHELL_INGRESS` (`arn:aws:lambda:{{us-east-1}}:aws:network-connector:aws-network-connector:SHELL_INGRESS`). Si la MicroVM no se lanzó con este conector, `create-microvm-shell-auth-token` genera un error `ValidationException`:

```
aws lambda-microvms create-microvm-shell-auth-token \
  --microvm-identifier <id> \
  --expiration-in-minutes 30
```

Para obtener una guía completa sobre cómo conectarse al intérprete de comandos de una MicroVM, consulte [Acceso al intérprete de comandos](microvms-troubleshooting.md#microvms-troubleshooting-shell).

## Etiquetado de recursos
<a name="microvms-security-tagging"></a>

Los recursos de MicroVM de Lambda, como las imágenes y las MicroVM, admiten etiquetas de recursos AWS para fines de organización y asignación de costos. Agregue etiquetas al crear una imagen mediante el parámetro `--tags` o de forma explícita después de crearla. También puede enumerar y eliminar etiquetas, como se muestra a continuación. Asimismo, puede hacer referencia a las etiquetas en las condiciones de las políticas de IAM para controlar el acceso a los recursos de MicroVM.

```
# Add tags when creating an image
aws lambda-microvms create-microvm-image \
  --name my-app-image \
  --code-artifact '{"uri":"s3://my-bucket/app.zip"}' \
  --base-image-arn arn:aws:lambda:{{us-east-1}}:aws:microvm-image:al2023-1 \
  --build-role-arn arn:aws:iam::123456789012:role/MicrovmBuildRole \
  --tags '{"Environment":"production","Team":"platform"}'

# List tags on a resource
aws lambda-microvms list-tags \
  --resource arn:aws:lambda:us-east-1:123456789012:microvm-image:my-app-image

# Add tags to an existing resource
aws lambda-microvms tag-resource \
  --resource arn:aws:lambda:us-east-1:123456789012:microvm-image:my-app-image \
  --tags '{"CostCenter":"12345","Project":"sandbox-platform"}'

# Remove tags by key
aws lambda-microvms untag-resource \
  --resource arn:aws:lambda:us-east-1:123456789012:microvm-image:my-app-image \
  --tag-keys '["CostCenter","Project"]'
```

## Referencia de permisos de IAM
<a name="microvms-security-iam-reference"></a>

Las MicroVM de Lambda definen las siguientes acciones de IAM. Use estas acciones en las políticas de IAM para controlar el acceso a las operaciones de MicroVM.


| Action | Descripción | 
| --- | --- | 
| lambda:CreateMicrovmImage | Crear una nueva imagen de MicroVM. | 
| lambda:UpdateMicrovmImage | Actualizar una imagen de MicroVM existente. | 
| lambda:DeleteMicrovmImage | Eliminar una imagen de MicroVM. | 
| lambda:GetMicrovmImage | Obtener los detalles de una imagen de MicroVM. | 
| lambda:ListMicrovmImages | Enumerar las imágenes de MicroVM de la cuenta. | 
| lambda:RunMicrovm | Ejecutar una nueva MicroVM. | 
| lambda:GetMicrovm | Obtener el estado y los detalles de una MicroVM. | 
| lambda:ListMicrovms | Enumerar las MicroVM de la cuenta. | 
| lambda:SuspendMicrovm | Suspender una MicroVM en ejecución. | 
| lambda:ResumeMicrovm | Reanudar una MicroVM suspendida. | 
| lambda:TerminateMicrovm | Terminar una MicroVM. | 
| lambda:CreateMicrovmAuthToken | Generar un token de autenticación para una MicroVM. | 
| lambda:CreateMicrovmShellAuthToken | Generar un token de acceso al intérprete de comandos. | 

## Formatos de ARN de recursos
<a name="microvms-security-resource-arns"></a>

```
# MicroVM image
arn:aws:lambda:<region>:<account>:microvm-image:<image-name>
# MicroVM instance
arn:aws:lambda:<region>:<account>:microvm:<microvm-id>
# Network connector
arn:aws:lambda:<region>:<account>:network-connector:<connector-id>
```

## Ejemplo: política de privilegios mínimos para un operador
<a name="microvms-security-least-privilege"></a>

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:RunMicrovm",
        "lambda:GetMicrovm",
        "lambda:ListMicrovms",
        "lambda:SuspendMicrovm",
        "lambda:ResumeMicrovm",
        "lambda:TerminateMicrovm",
        "lambda:CreateMicrovmAuthToken"
      ],
      "Resource": "arn:aws:lambda:*:123456789012:microvm:*"
    },
    {
      "Effect": "Allow",
      "Action": ["lambda:GetMicrovmImage", "lambda:ListMicrovmImages"],
      "Resource": "arn:aws:lambda:*:123456789012:microvm-image:*"
    }
  ]
}
```