

# Comportamiento de inicialización de instancias con modos de arranque de Amazon EC2
<a name="ami-boot"></a>

Cuando se inicia una computadora, el primer software que ejecuta se encarga de inicializar la plataforma y proporcionar una interfaz para que el sistema operativo realice operaciones específicas de la plataforma.

En Amazon EC2, se admiten dos variantes del software de modo de arranque: Legacy BIOS y Unified Extensible Firmware Interface (UEFI).

**Posibles parámetros de modo de arranque en una AMI**  
Una AMI puede tener uno de los siguientes valores de parámetro de modo de arranque: `uefi`, `legacy-bios` o `uefi-preferred`. El parámetro de modo de arranque de la AMI es opcional. En las AMI que no tienen ningún parámetro de modo de arranque, las instancias iniciadas desde estas AMI utilizan el valor de modo de arranque predeterminado del tipo de instancia.

**Finalidad del parámetro de modo de arranque de la AMI**  
El parámetro de modo de arranque de la AMI indica a Amazon EC2 qué modo de arranque se debe utilizar cuando se inicia una instancia. Cuando el parámetro de modo de arranque se establece en `uefi`, EC2 intenta iniciar la instancia en UEFI. Si el sistema operativo no se encuentra configurado para admitir UEFI, la instancia no se iniciará correctamente.

**Parámetro de modo de arranque preferido UEFI**  
Puede crear AMI que admitan UEFI y BIOS heredados mediante el parámetro del modo de arranque `uefi-preferred`. Cuando el parámetro de modo de arranque se establece en `uefi-preferred` y el tipo de instancia admite UEFI, la instancia se inicia en UEFI. Si el tipo de instancia no admite UEFI, la instancia se inicia en un BIOS heredado.

**aviso**  
Algunas características, como UEFI Secure Boot, solo están disponibles en instancias que arrancan en UEFI. Al utilizar el parámetro del modo de arranque de AMI `uefi-preferred` con un tipo de instancia que no admita UEFI, la instancia se iniciará como BIOS antigua y la característica dependiente de UEFI se deshabilitará. Si confía en la disponibilidad de una característica dependiente de UEFI, defina el parámetro del modo de arranque de AMI en `uefi`.

**Modos de arranque predeterminados para los tipos de instancias**
+ Tipos de instancia de Graviton: UEFI
+ Tipos de instancias de Intel y AMD: Legacy BIOS

**Compatibilidad con zonas**  
El arranque UEFI no es compatible en las zonas Wavelength.

**Topics**
+ [Requisitos para lanzar una instancia de EC2 en modo de arranque UEFI](launch-instance-boot-mode.md)
+ [Determinación del parámetro del modo de arranque de una AMI de Amazon EC2](ami-boot-mode.md)
+ [Determinación de los modos de arranque que admite un tipo de instancia de EC2](instance-type-boot-mode.md)
+ [Determinación del modo de arranque de una instancia de EC2](instance-boot-mode.md)
+ [Determinación del modo de arranque del sistema operativo para la instancia de EC2](os-boot-mode.md)
+ [Establecimiento del modo de arranque de una AMI de Amazon EC2](set-ami-boot-mode.md)
+ [Variables UEFI para instancias de Amazon EC2](uefi-variables.md)
+ [Arranque seguro de UEFI para instancias de Amazon EC2](uefi-secure-boot.md)

# Requisitos para lanzar una instancia de EC2 en modo de arranque UEFI
<a name="launch-instance-boot-mode"></a>

El modo de arranque de una instancia se determina mediante la configuración de la AMI, el sistema operativo que contiene y el tipo de instancia. Para iniciar una instancia en el modo de arranque UEFI, se debe cumplir con los siguientes requisitos.

**AMI**  
La AMI debe configurarse para UEFI de la siguiente manera:  
+ **Sistema operativo**: el sistema operativo contenido en la AMI debe configurarse de forma que utilice UEFI. De lo contrario, se producirá un error en la inicialización de la instancia. Para obtener más información, consulte [Determinación del modo de arranque del sistema operativo para la instancia de EC2](os-boot-mode.md).
+ **Parámetro de modo de arranque de la AMI**: el parámetro de modo de arranque de la AMI debe establecerse en `uefi` o `uefi-preferred`. Para obtener más información, consulte [Determinación del parámetro del modo de arranque de una AMI de Amazon EC2](ami-boot-mode.md).
**Linux**: las siguientes AMI de Linux admiten UEFI:  
+ Amazon Linux 2023
+ Amazon Linux 2 (solo tipos de instancia de Graviton)
Para otras AMI de Linux, debe [configurar la AMI](set-ami-boot-mode.md), importar la AMI a través de [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/) o importar la AMI a través de [CloudEndure](https://docs.cloudendure.com/).  
**Windows**: las siguientes AMI de Windows admiten UEFI:  
+ Windows\$1Server-2025-\$1 (excepto para las AMI con el prefijo de nombre `BIOS-`)
+ TPM-Windows\$1Server-2022-English-Full-Base
+ TPM-Windows\$1Server-2022-English-Core-Base
+ TPM-Windows\$1Server-2019-English-Full-Base
+ TPM-Windows\$1Server-2019-English-Core-Base
+ TPM-Windows\$1Server-2016-English-Full-Base
+ TPM-Windows\$1Server-2016-English-Core-Base

**Tipo de instancia**  
Todas las instancias integradas en AWS Nitro System son compatibles con UEFI y BIOS Legacy, excepto las siguientes: instancias bare metal, DL1, G4ad, P4, u-3tb1, u-6tb1, u-9tb1, u-12tb1, u-18tb1, u-24tb1 y VT1. Para obtener más información, consulte [Determinación de los modos de arranque que admite un tipo de instancia de EC2](instance-type-boot-mode.md).

En la siguiente tabla se muestra que el modo de arranque de una instancia (indicado en la columna **Modo de arranque de la instancia resultante**) se determina mediante una combinación del parámetro de modo de arranque de la AMI (columna 1), la configuración del modo de arranque del sistema operativo de la AMI (columna 2) y la compatibilidad con el modo de arranque del tipo de instancia (columna 3).


| Parámetro de modo de arranque AMI | Configuración de modo de arranque del sistema operativo | Compatibilidad del modo de arranque del tipo de instancia | Modo de arranque de la instancia resultante | 
| --- | --- | --- | --- | 
| UEFI | UEFI | UEFI | UEFI | 
| BIOS antigua | BIOS antigua | BIOS antigua | BIOS antigua | 
| UEFI preferida | UEFI | UEFI | UEFI | 
| UEFI preferida | UEFI | UEFI y BIOS heredado | UEFI | 
| UEFI preferida | BIOS antigua | BIOS antigua | BIOS antigua | 
| UEFI preferida | BIOS antigua | UEFI y BIOS antigua | BIOS antigua | 
| No se especificó ningún modo de arranque: ARM | UEFI | UEFI | UEFI | 
| No se especificó ningún modo de arranque: x86 | BIOS antigua | UEFI y BIOS antigua | BIOS antigua | 

# Determinación del parámetro del modo de arranque de una AMI de Amazon EC2
<a name="ami-boot-mode"></a>

El parámetro de modo de arranque de la AMI es opcional. Una AMI puede tener uno de los siguientes valores de parámetro de modo de arranque: `uefi`, `legacy-bios` o `uefi-preferred`.

Algunas AMI no tienen un parámetro de modo de arranque. Cuando una AMI no tiene ningún parámetro de modo de arranque, las instancias iniciadas desde la AMI utilizan el valor predeterminado del tipo de instancia, que es `uefi` en Graviton y `legacy-bios` en los tipos de instancias de Intel y AMD.

------
#### [ Console ]

**Para determinar el parámetro de modo de arranque de una AMI**

1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. En el panel de navegación, elija **AMI** y, a continuación, seleccione la AMI.

1. Inspeccione el campo **Modo de arranque**.
   + El valor **uefi** indica que la AMI es compatible con UEFI.
   + El valor **uefi-preferred** indica que la AMI es compatible con UEFI y el BIOS heredado.
   + Si no hay ningún valor, las instancias iniciadas desde la AMI utilizan el valor predeterminado del tipo de instancia.

**Para determinar el parámetro de modo de arranque de una AMI cuando se inicia una instancia**  
Cuando lance una instancia mediante el asistente de inicialización de instancias, en el paso para seleccionar una AMI, examine el campo **Modo de arranque**. Para obtener más información, consulte [Imágenes de aplicaciones y sistema operativo (Imagen de máquina de Amazon)](ec2-instance-launch-parameters.md#liw-ami).

------
#### [ AWS CLI ]

**Para determinar el parámetro de modo de arranque de una AMI**  
Utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) para determinar el modo de arranque de una AMI.

```
aws ec2 describe-images \
    --region us-east-1 \
    --image-id ami-0abcdef1234567890 \
    --query Images[].BootMode \
    --output text
```

A continuación, se muestra un ejemplo del resultado.

```
uefi
```

En el resultado, un valor de `uefi` indica que la AMI es compatible con UEFI. Un valor de `uefi-preferred` indica que la AMI es compatible con UEFI y la BIOS antigua. Si no hay ningún valor, las instancias iniciadas desde la AMI utilizan el valor predeterminado del tipo de instancia.

------
#### [ PowerShell ]

**Para determinar el parámetro de modo de arranque de una AMI**  
Utilice el cmdlet [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) para determinar el modo de arranque de una AMI.

```
Get-EC2Image -Region us-east-1 `
    -ImageId ami-0abcdef1234567890 | Format-List Name, BootMode, TpmSupport
```

A continuación, se muestra un ejemplo del resultado.

```
Name       : TPM-Windows_Server-2016-English-Full-Base-2023.05.10
BootMode   : uefi
TpmSupport : v2.0
```

En el resultado, el valor de `BootMode` indica el modo de arranque de la AMI. Un valor de `uefi` indica que la AMI es compatible con UEFI. Un valor de `uefi-preferred` indica que la AMI es compatible con UEFI y la BIOS antigua. Si no hay ningún valor, las instancias iniciadas desde la AMI utilizan el valor predeterminado del tipo de instancia.

------

# Determinación de los modos de arranque que admite un tipo de instancia de EC2
<a name="instance-type-boot-mode"></a>

Puede determinar los modos de arranque que admite un tipo de instancia.

La consola de Amazon EC2 no muestra los modos de arranque compatibles de un tipo de instancia.

------
#### [ AWS CLI ]

Use el comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) para determinar los modos de arranque que admite un tipo de instancia. El parámetro `--query` filtra la salida para devolver solo los modos de arranque compatibles.

En el siguiente ejemplo se muestra que el tipo de instancia especificado es compatible con los modos de arranque UEFI y BIOS heredado.

```
aws ec2 describe-instance-types \
    --instance-types m5.2xlarge \
    --query "InstanceTypes[*].SupportedBootModes"
```

A continuación, se muestra un ejemplo del resultado.

```
[
    [
        "legacy-bios",
        "uefi"
    ]
]
```

En el siguiente ejemplo se muestra que solo `t2.xlarge` es compatible con el BIOS heredado.

```
aws ec2 describe-instance-types \
    --instance-types t2.xlarge \
    --query "InstanceTypes[*].SupportedBootModes"
```

A continuación, se muestra un ejemplo del resultado.

```
[
    [
        "legacy-bios"
    ]
]
```

------
#### [ PowerShell ]

Utilice el cmdlet [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) para determinar los modos de arranque que admite un tipo de instancia.

En el siguiente ejemplo se muestra que `m5.2xlarge` es compatible con los modos de arranque UEFI y BIOS heredado.

```
Get-EC2InstanceType -InstanceType m5.2xlarge | Format-List InstanceType, SupportedBootModes
```

A continuación, se muestra un ejemplo del resultado.

```
InstanceType       : m5.2xlarge
SupportedBootModes : {legacy-bios, uefi}
```

En el siguiente ejemplo se muestra que solo `t2.xlarge` es compatible con el BIOS heredado.

```
Get-EC2InstanceType -InstanceType t2.xlarge | Format-List InstanceType, SupportedBootModes
```

A continuación, se muestra un ejemplo del resultado.

```
InstanceType       : t2.xlarge
SupportedBootModes : {legacy-bios}
```

------

**Determinación de los tipos de instancia compatibles con UEFI**  
Puede determinar los tipos de instancia compatibles con UEFI. La consola de Amazon EC2 no muestra la compatibilidad con UEFI de un tipo de instancia.

------
#### [ AWS CLI ]

Los tipos de instancia disponibles varían según Región de AWS. Para ver los tipos de instancias disponibles que son compatibles con UEFI en una región, utilice el comando [describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html). Incluya el parámetro `--filters` a fin de limitar los resultados a los tipos de instancia que admiten UEFI y el parámetro `--query` para limitar la salida al valor de `InstanceType`.

```
aws ec2 describe-instance-types \
    --filters Name=supported-boot-mode,Values=uefi \
    --query "InstanceTypes[*].[InstanceType]" --output text | sort
```

------
#### [ PowerShell ]

Los tipos de instancia disponibles varían según Región de AWS. Para ver los tipos de instancias disponibles que son compatibles con UEFI en una región, utilice el cmdlet [Get-EC2InstanceType](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html).

```
Get-EC2InstanceType | `
	Where-Object {$_.SupportedBootModes -Contains "uefi"} | `
	Sort-Object InstanceType | `
	Format-Table InstanceType -GroupBy CurrentGeneration
```

------

**Determinación de los tipos de instancias compatibles con el arranque seguro de UEFI y con variables no volátiles persistentes**  
Las instancias bare metal no son compatibles con el arranque seguro de UEFI ni con las variables no volátiles, por lo que estos ejemplos no las incluyen en la salida. Para obtener más información sobre el arranque seguro UEFI, consulte [Arranque seguro de UEFI para instancias de Amazon EC2](uefi-secure-boot.md).

------
#### [ AWS CLI ]

Utilice el comando [describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) y excluya las instancias bare metal del resultado.

```
aws ec2 describe-instance-types \
    --filters Name=supported-boot-mode,Values=uefi Name=bare-metal,Values=false \
    --query "InstanceTypes[*].[InstanceType]" \
    --output text | sort
```

------
#### [ PowerShell ]

Utilice el cmdlet [Get-EC2InstanceType](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceType.html) y excluya las instancias de bare metal del resultado.

```
Get-EC2InstanceType | `
    Where-Object { `
        $_.SupportedBootModes -Contains "uefi" -and `
        $_.BareMetal -eq $False
        } | `
    Sort-Object InstanceType  | `
    Format-Table InstanceType, SupportedBootModes, BareMetal, `
        @{Name="SupportedArchitectures"; Expression={$_.ProcessorInfo.SupportedArchitectures}}
```

------

# Determinación del modo de arranque de una instancia de EC2
<a name="instance-boot-mode"></a>

El modo de arranque de una instancia se muestra en el campo **Modo de arranque** de la consola de Amazon EC2 y junto al parámetro `currentInstanceBootMode` de AWS CLI.

Cuando se inicia una instancia, el valor de su parámetro de modo de arranque se determina mediante el valor del parámetro de modo de arranque de la AMI utilizada para iniciarla, de la siguiente manera:
+ Una AMI con un parámetro de modo de arranque de `uefi` crea una instancia con un parámetro `currentInstanceBootMode` de `uefi`.
+ Una AMI con un parámetro de modo de arranque de `legacy-bios` crea una instancia con un parámetro `currentInstanceBootMode` de ` legacy-bios`.
+ Una AMI con un parámetro de modo de arranque de `uefi-preferred` crea una instancia con un parámetro `currentInstanceBootMode` de `uefi` si el tipo de instancia admite UEFI; de lo contrario, crea una instancia con un parámetro `currentInstanceBootMode` de `legacy-bios`.
+ Una AMI sin valor de parámetro de modo de arranque crea una instancia con un valor de parámetro `currentInstanceBootMode` que depende de si la arquitectura de la AMI es ARM o x86 y del modo de arranque admitido del tipo de instancia. El modo de arranque predeterminado es `uefi` en los tipos de instancia de Graviton y `legacy-bios` en los tipos de instancia de Intel y AMD.

------
#### [ Console ]

**Para determinar el modo de arranque de una instancia**

1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. En el panel de navegación, elija **Instances** (instancia[s]) y seleccione la instancia.

1. En la pestaña **Detalles**, examine el campo **Modo de arranque**.

------
#### [ AWS CLI ]

**Para determinar el modo de arranque de una instancia**  
Utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) para determinar el modo de arranque de una instancia. También puede determinar el modo de arranque de la AMI que se utilizó para crear la instancia. 

```
aws ec2 describe-instances \
    --region us-east-1 \
    --instance-ids i-1234567890abcdef0 \
    --query Reservations[].Instances[].BootMode \
    --output text
```

A continuación, se muestra un ejemplo del resultado.

```
uefi
```

------
#### [ PowerShell ]

**Para determinar el modo de arranque de una instancia**  
Utilice el cmdlet [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) para determinar el modo de arranque de una instancia. También puede determinar el modo de arranque de la AMI que se utilizó para crear la instancia. 

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances | Format-List BootMode, CurrentInstanceBootMode, InstanceType, ImageId
```

A continuación, se muestra un ejemplo del resultado.

```
BootMode                : uefi
CurrentInstanceBootMode : uefi
InstanceType            : c5a.large
ImageId                 : ami-0abcdef1234567890
```

------

# Determinación del modo de arranque del sistema operativo para la instancia de EC2
<a name="os-boot-mode"></a>

El modo de arranque de la AMI indica a Amazon EC2 qué modo de arranque se utiliza para iniciar una instancia. Para ver si el sistema operativo de la instancia está configurado para UEFI, debe conectarse a la instancia mediante SSH (instancias de Linux) or RDP (instancias de Windows).

Consulte las instrucciones del sistema operativo de su instancia.

## Linux
<a name="os-boot-mode-linux"></a>

**Para determinar el modo de arranque del sistema operativo de la instancia**

1. [Conéctese a su instancia de Linux mediante SSH](connect-linux-inst-ssh.md).

1. Para ver el modo de arranque del sistema operativo, pruebe uno de los siguientes procedimientos:
   + Ejecute el siguiente comando.

     ```
     [ec2-user ~]$ sudo /usr/sbin/efibootmgr
     ```

     Resultado esperado de una instancia iniciada con el modo de arranque UEFI

     ```
     BootCurrent: 0001
     Timeout: 0 seconds
     BootOrder: 0000,0001
     Boot0000* UiApp
     Boot0001* UEFI Amazon Elastic Block Store vol-xyz
     ```
   + Ejecute el siguiente comando para verificar la existencia del directorio `/sys/firmware/efi`. Este directorio solo existe si la instancia se inicia con UEFI. Si el directorio no existe, el comando devuelve `Legacy BIOS Boot Detected`.

     ```
     [ec2-user ~]$ [ -d /sys/firmware/efi ] && echo "UEFI Boot Detected" || echo "Legacy BIOS Boot Detected"
     ```

     Resultado esperado de una instancia iniciada con el modo de arranque UEFI

     ```
     UEFI Boot Detected
     ```

     Resultado esperado de una instancia iniciada con el modo de arranque Legacy BIOS

     ```
     Legacy BIOS Boot Detected
     ```
   + Ejecute el siguiente comando para verificar que EFI aparece en la salida `dmesg`.

     ```
     [ec2-user ~]$ dmesg | grep -i "EFI"
     ```

     Resultado esperado de una instancia lanzada con el modo de arranque UEFI

     ```
     [    0.000000] efi: Getting EFI parameters from FDT:
     [    0.000000] efi: EFI v2.70 by EDK II
     ```

## Windows
<a name="os-boot-mode-windows"></a>

**Para determinar el modo de arranque del sistema operativo de la instancia**

1. [Conéctese a la instancia de Windows mediante RDP](connecting_to_windows_instance.md).

1. Vaya a **Información del sistema** y consulte la fila **Modo BIOS**.  
![\[Ventana de información del sistema que muestra la fila del modo BIOS seleccionada. El valor del modo BIOS es Legacy.\]](http://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/images/BIOS-mode-win.png)

# Establecimiento del modo de arranque de una AMI de Amazon EC2
<a name="set-ami-boot-mode"></a>

De forma predeterminada, una AMI hereda el modo de arranque de la instancia de EC2 utilizada para crear la AMI. Por ejemplo, si crea una AMI a partir de una instancia de EC2 que se ejecuta en Legacy BIOS, el modo de arranque de la nueva AMI es `legacy-bios`. Si crea una AMI a partir de una instancia EC2 con un modo de arranque de `uefi-preferred`, el modo de arranque de la nueva AMI es `uefi-preferred`.

Cuando registra una AMI, puede establecer el modo de arranque de la AMI en `uefi`, `legacy-bios` o `uefi-preferred`.

Cuando el modo de arranque de la AMI está establecido en `uefi-preferred`, la instancia se inicia de la siguiente manera: 
+ En el caso de los tipos de instancia que admiten UEFI y BIOS heredado (por ejemplo, `m5.large`), la instancia se inicia mediante UEFI.
+ En el caso de los tipos de instancia que únicamente admiten el BIOS heredado (por ejemplo, `m4.large`), la instancia se inicia mediante el BIOS heredado.

Si configura el modo de arranque de la AMI en `uefi-preferred`, el sistema operativo tiene que admitir la posibilidad de arrancar en UEFI y BIOS heredado.

Para convertir una instancia existente basada en Legacy BIOS a UEFI, o una instancia existente basada en UEFI a Legacy BIOS, primero debe modificar el volumen y el sistema operativo de la instancia para que admitan el modo de arranque seleccionado. Luego, cree una instantánea del volumen. Finalmente, cree una AMI a partir de una instantánea.

**Consideraciones**
+ Establecer el parámetro de modo de arranque de la AMI no configura automáticamente el sistema operativo para el modo de arranque especificado. Primero debe realizar las modificaciones adecuadas en el volumen y el sistema operativo de la instancia para admitir el arranque utilizando el modo de arranque seleccionado. De lo contrario, la AMI resultante no se podrá utilizar. Por ejemplo, si está convirtiendo una instancia basada en Legacy BIOS a UEFI, puede utilizar la herramienta [MBR2GPT](https://learn.microsoft.com/en-us/windows/deployment/mbr-to-gpt) de Microsoft para convertir el disco del sistema de MBR a GPT. Las modificaciones obligatorias son específicas del sistema operativo. Para obtener más información, consulte el manual del sistema operativo.
+ No puede utilizar el comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) o el cmdlet [https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) para crear una AMI que sea compatible con [NitroTPM](nitrotpm.md) y UEFI preferido.
+ Algunas características, como UEFI Secure Boot, solo están disponibles en instancias que arrancan en UEFI. Al utilizar el parámetro del modo de arranque de AMI `uefi-preferred` con un tipo de instancia que no admita UEFI, la instancia se lanza como BIOS antigua y la característica dependiente de UEFI se deshabilita. Si depende de la disponibilidad de una característica dependiente de UEFI, defina el parámetro del modo de arranque de AMI en `uefi`.

------
#### [ AWS CLI ]

**Para establecer el modo de arranque de una AMI**

1. Realice las modificaciones adecuadas en el volumen y el sistema operativo de la instancia para admitir el arranque a través del modo de arranque seleccionado. Las modificaciones obligatorias son específicas del sistema operativo. Para obtener más información, consulte el manual del sistema operativo.
**aviso**  
Si no realiza este paso, no se podrá utilizar la AMI.

1. Para buscar el ID de volumen de la instancia, utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html). En el siguiente paso, creará una instantánea de este volumen.

   ```
   aws ec2 describe-instances \
       --instance-ids i-1234567890abcdef0 \
       --query Reservations[].Instances[].BlockDeviceMappings
   ```

   A continuación, se muestra un ejemplo del resultado.

   ```
   [
       [
           {
               "DeviceName": "/dev/xvda",
               "Ebs": {
                   "AttachTime": "2024-07-11T01:05:51+00:00",
                   "DeleteOnTermination": true,
                   "Status": "attached",
                   "VolumeId": "vol-1234567890abcdef0"
               }
           }
       ]
   ]
   ```

1. Para crear una instantánea del volumen, utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-snapshot.html). Utilice el ID del volumen del paso anterior.

   ```
   aws ec2 create-snapshot \
       --volume-id vol-01234567890abcdef \
       --description "my snapshot"
   ```

   A continuación, se muestra un ejemplo del resultado.

   ```
   {
       "Description": "my snapshot",
       "Encrypted": false,
       "OwnerId": "123456789012",
       "Progress": "",
       "SnapshotId": "snap-0abcdef1234567890",
       "StartTime": "",
       "State": "pending",
       "VolumeId": "vol-01234567890abcdef",
       "VolumeSize": 30,
       "Tags": []
   }
   ```

1. Espere hasta que el estado de la instantánea sea `completed` antes de ir al siguiente paso. Para obtener el estado de la instantánea, utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html) con el ID de instantánea del paso anterior.

   ```
   aws ec2 describe-snapshots \
       --snapshot-ids snap-0abcdef1234567890 \
       --query Snapshots[].State \
       --output text
   ```

   A continuación, se muestra un ejemplo del resultado.

   ```
   completed
   ```

1. Para crear una AMI, utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html). Use el valor de `SnapshotId` del resultado de **CreateSnapshot**.
   + Para configurar el modo de arranque en UEFI, agregue el parámetro `--boot-mode` con un valor de `uefi`.

     ```
     aws ec2 register-image \
        --description "my image" \
        --name "my-image" \
        --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0abcdef1234567890,DeleteOnTermination=true}" \
        --root-device-name /dev/sda1 \
        --virtualization-type hvm \
        --ena-support \
        --boot-mode uefi
     ```
   + Para configurar el modo de arranque en `uefi-preferred`, establezca el valor de `--boot-mode` en `uefi-preferred`

     ```
     aws ec2 register-image \
        --description "my description" \
        --name "my-image" \
        --block-device-mappings "DeviceName=/dev/sda1,Ebs={SnapshotId=snap-0abcdef1234567890,DeleteOnTermination=true}" \
        --root-device-name /dev/sda1 \
        --virtualization-type hvm \
        --ena-support \
        --boot-mode uefi-preferred
     ```

1. (Opcional) Para verificar que la AMI recién creada cuenta con el modo de arranque que especificó, utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html).

   ```
   aws ec2 describe-images \
       --image-id ami-1234567890abcdef0 \
       --query Images[].BootMode \
       --output text
   ```

   A continuación, se muestra un ejemplo del resultado.

   ```
   uefi
   ```

------
#### [ PowerShell ]

**Para establecer el modo de arranque de una AMI**

1. Realice las modificaciones adecuadas en el volumen y el sistema operativo de la instancia para admitir el arranque a través del modo de arranque seleccionado. Las modificaciones obligatorias son específicas del sistema operativo. Para obtener más información, consulte el manual del sistema operativo.
**aviso**  
Si no realiza este paso, no se podrá utilizar la AMI.

1. Para buscar el ID de volumen de la instancia, utilice el cmdlet [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html).

   ```
   (Get-EC2Instance `
       -InstanceId i-1234567890abcdef0).Instances.BlockDeviceMappings.Ebs
   ```

   A continuación, se muestra un ejemplo del resultado.

   ```
   AssociatedResource  : 
   AttachTime          : 7/11/2024 1:05:51 AM
   DeleteOnTermination : True
   Operator            : 
   Status              : attached
   VolumeId            : vol-01234567890abcdef
   ```

1. Para crear una instantánea del volumen, utilice el cmdlet [https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Snapshot.html). Utilice el ID del volumen del paso anterior.

   ```
   New-EC2Snapshot `
       -VolumeId vol-01234567890abcdef `
       -Description "my snapshot"
   ```

   A continuación, se muestra un ejemplo del resultado.

   ```
   AvailabilityZone          : 
   Description               : my snapshot
   Encrypted                 : False
   FullSnapshotSizeInBytes   : 0
   KmsKeyId                  : 
   OwnerId                   : 123456789012
   RestoreExpiryTime         : 
   SnapshotId                : snap-0abcdef1234567890
   SseType                   : 
   StartTime                 : 4/25/2025 6:08:59 PM
   State                     : pending
   StateMessage              : 
   VolumeId                  : vol-01234567890abcdef
   VolumeSize                : 30
   ```

1. Espere hasta que el estado de la instantánea sea `completed` antes de ir al siguiente paso. Para obtener el estado de la instantánea, utilice el cmdlet [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Snapshot.html) con el ID de instantánea del paso anterior.

   ```
   (Get-EC2Snapshot `
       -SnapshotId snap-0abcdef1234567890).State.Value
   ```

   A continuación, se muestra un ejemplo del resultado.

   ```
   completed
   ```

1. Para crea una nueva AMI, utilice el cmdlet [https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html). Use el valor de `SnapshotId` del resultado de **New-EC2Snapshot**.
   + Para configurar el modo de arranque en UEFI, agregue el parámetro `-BootMode` con un valor de `uefi`.

     ```
     $block = @{SnapshotId=snap-0abcdef1234567890}
     Register-EC2Image ` 
        -Description "my image" `
        -Name "my-image" `
        -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
        -RootDeviceName /dev/xvda `
        -EnaSupport $true `
        -BootMode uefi
     ```
   + Para configurar el modo de arranque en `uefi-preferred`, establezca el valor de `-BootMode` en `uefi-preferred`

     ```
     $block = @{SnapshotId=snap-0abcdef1234567890}
     Register-EC2Image ` 
        -Description "my image" `
        -Name "my-image" `
        -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
        -RootDeviceName /dev/xvda `
        -EnaSupport $true `
        -BootMode uefi-preferred
     ```

1. (Opcional) Para verificar que la AMI recién creada cuenta con el modo de arranque que especificó, utilice el cmdlet [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html).

   ```
   (Get-EC2Image `
       -ImageId ami-1234567890abcdef0).BootMode.Value
   ```

   A continuación, se muestra un ejemplo del resultado.

   ```
   uefi
   ```

------

# Variables UEFI para instancias de Amazon EC2
<a name="uefi-variables"></a>

Cuando inicia una instancia en la que el modo de arranque se establece en UEFI, se crea un almacén de clave-valor para variables. La UEFI y el sistema operativo de instancias pueden utilizar el almacén para almacenar variables UEFI.

El cargador de arranque y el sistema operativo utilizan las variables UEFI para configurar el inicio temprano del sistema. Permiten que el sistema operativo administre ciertas configuraciones del proceso de arranque, como la orden de arranque o la administración de claves para el Arranque seguro UEFI.

**aviso**  
Cualquier persona que pueda conectarse a la instancia (y, posiblemente, cualquier software que se ejecute en la instancia) o cualquier persona con permisos para usar la API [GetInstanceUefiData](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData.html) en la instancia puede leer las variables. Nunca debe almacenar información confidencial, como contraseñas o información de identificación personal, en el almacén de variables de la UEFI.

**Persistencia de las variables UEFI**
+ En el caso de las instancias que se iniciaron el 10 de mayo de 2022 o en una fecha anterior, las variables UEFI se borran cuando se reinician o detienen.
+ En el caso de las instancias que se iniciaron el 11 de mayo de 2022 o en una fecha posterior, las variables UEFI marcadas como no volátiles persisten cuando se reinician, o cuando se inician o detienen.
+ Las instancias bare metal no conservan las variables no volátiles de la UEFI en las operaciones de detención o inicio de las instancias.

# Arranque seguro de UEFI para instancias de Amazon EC2
<a name="uefi-secure-boot"></a>

El modo UEFI Secure Boot se basa en el proceso de arranque seguro consolidado de Amazon EC2 y proporciona protección adicional en profundidad que ayuda a los clientes a proteger el software frente a amenazas que persisten durante los reinicios. Garantiza que la instancia solo arranque el software firmado con claves criptográficas. Las claves se almacenan en la base de datos de claves del [almacenamiento variable no volátil de la UEFI](uefi-variables.md). UEFI Secure Boot evita la modificación no autorizada del flujo de arranque de las instancias.

**Topics**
+ [Funcionamiento del arranque seguro de UEFI con instancias de Amazon EC2](how-uefi-secure-boot-works.md)
+ [Requisitos para el arranque seguro EFI en Amazon EC2](launch-instance-with-uefi-sb.md)
+ [Comprobación de si una instancia de Amazon EC2 está habilitada para el arranque seguro de UEFI](verify-uefi-secure-boot.md)
+ [Creación de una AMI de Linux con claves personalizadas del arranque seguro de UEFI](create-ami-with-uefi-secure-boot.md)
+ [Creación del blob binario de AWS para el arranque seguro de UEFI](aws-binary-blob-creation.md)

# Funcionamiento del arranque seguro de UEFI con instancias de Amazon EC2
<a name="how-uefi-secure-boot-works"></a>

UEFI Secure Boot es una característica especificada en la UEFI, que permite verificar el estado de la cadena de arranque. Está diseñado para garantizar que solo se ejecuten binarios UEFI verificados de manera criptográfica después de la autoinicialización del firmware. Estos binarios incluyen los controladores UEFI y el gestor de arranque principal, así como componentes cargados en cadena.

UEFI Secure Boot especifica cuatro bases de datos clave, que se utilizan en una cadena de confianza. Las bases de datos se almacenan en el almacén de variables UEFI.

La cadena de confianza es la siguiente:

**Base de datos de la clave de la plataforma (PK**  
La base de datos de PK es la raíz de la confianza. Contiene una única clave PK pública que se utiliza en la cadena de confianza para actualizar la base de datos de claves de intercambio de claves (KEK).  
Para cambiar la base de datos de PK, debe tener la clave PK privada para firmar una solicitud de actualización. Esto incluye eliminar la base de datos de PK escribiendo una clave PK vacía.

**Base de datos de claves de intercambio de claves (KEK**  
La base de datos KEK es una lista de claves KEK públicas que se utilizan en la cadena de confianza para actualizar las bases de datos de firma (db) y de la lista de denegación (dbx).  
Para cambiar la base de datos de KEK pública, debe tener la clave PK privada para firmar una solicitud de actualización.

**Base de datos de firmas (db**  
La base de datos db es una lista de claves públicas y hashes que se utilizan en la cadena de confianza para validar todos los binarios de arranque UEFI.  
Para cambiar la base de datos db, debe tener la clave PK privada o cualquiera de las claves KEK privadas para firmar una solicitud de actualización.

**Base de datos de la lista de denegación de firmas (dbx**  
La base de datos dbx es una lista de claves públicas y hashes binarios que no son de confianza y se utilizan en la cadena de confianza como archivo de revocación.  
La base de datos dbx siempre tiene prioridad sobre las demás bases de datos clave.  
Para cambiar la base de datos dbx, debe tener la clave PK privada o cualquiera de las claves KEK privadas para firmar una solicitud de actualización.  
El Foro UEFI mantiene un dbx disponible de forma pública para muchos binarios y certificados incorrectos en [https://uefi.org/revocationlistfile](https://uefi.org/revocationlistfile).

**importante**  
UEFI Secure Boot aplica la validación de firmas en cualquier binario UEFI. Para permitir la ejecución de un binario UEFI en el arranque seguro UEFI, debe firmarlo con cualquiera de las claves de base de datos privadas descritas anteriormente.

De forma predeterminada, UEFI Secure Boot está desactivado y el sistema está en `SetupMode`. Cuando el sistema está en `SetupMode`, todas las variables clave se pueden actualizar sin una firma criptográfica. Cuando se establece el PK, el arranque seguro UEFI se habilita y se cierra el modo de configuración.

# Requisitos para el arranque seguro EFI en Amazon EC2
<a name="launch-instance-with-uefi-sb"></a>

Cuando [lanza una instancia de Amazon EC2](LaunchingAndUsingInstances.md) con una AMI y un tipo de instancia compatibles, dicha instancia validará de manera automática los binarios de arranque de UEFI en su base de datos del arranque seguro de UEFI. No se necesita configuración adicional. También puede configurar UEFI Secure Boot en una instancia posterior a al inicialización.

**nota**  
UEFI Secure Boot protege su instancia y su sistema operativo contra las modificaciones del flujo de arranque. Si crea una nueva AMI de una AMI de origen que tiene UEFI Secure Boot habilitado y modifica ciertos parámetros durante el proceso de copiado como cambiar el `UefiData` dentro de la AMI, puede desactivar UEFI Secure Boot.

**Topics**
+ [AMIs soportadas](#uefi-amis)
+ [Tipos de instancias admitidas](#uefi-instance)

## AMIs soportadas
<a name="uefi-amis"></a>

**AMI de Linux**  
Para lanzar una instancia de Linux, la AMI de Linux debe tener habilitado el arranque seguro de la UEFI.

Amazon Linux admite Arranque seguro UEFI a partir de la versión 2023.1 de AL2023. Sin embargo, el arranque seguro UEFI no está habilitado en las AMI predeterminadas. Para obtener más información, consulte [Arranque seguro UEFI](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html) en la *Guía del usuario de AL2023*. Las versiones anteriores de las AMI de Amazon Linux no están habilitadas para el arranque seguro UEFI. Para utilizar una AMI admitida, debe realizar varios pasos de configuración en su propia AMI de Linux. Para obtener más información, consulte [Creación de una AMI de Linux con claves personalizadas del arranque seguro de UEFI](create-ami-with-uefi-secure-boot.md).

**AMI de Windows**  
Para lanzar una instancia de Windows, la AMI de Windows debe tener habilitado el arranque seguro de la UEFI. Para encontrar una AMI de Windows de AWS que esté preconfigurada para el arranque seguro de UEFI con claves de Microsoft, consulte [Find Windows Server AMIs configured with NitroTPM and UEFI Secure Boot](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ami-windows-tpm.html#ami-windows-tpm-find) en la *Referencia de AMI de Windows de AWS*.

En este momento, no se admite la importación de Windows con UEFI Secure Boot mediante el comando [import-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/import-image.html).

## Tipos de instancias admitidas
<a name="uefi-instance"></a>

Todos los tipos de instancias virtualizadas que admiten UEFI también admiten el arranque seguro de UEFI. Para obtener información sobre los tipos de instancias compatibles con el modo Arranque seguro UEFI, consulte [Requisitos para el modo de arranque UEFI](launch-instance-boot-mode.md).

**nota**  
Los tipos de instancias bare metal no admiten UEFI Secure Boot.

# Comprobación de si una instancia de Amazon EC2 está habilitada para el arranque seguro de UEFI
<a name="verify-uefi-secure-boot"></a>

Puede utilizar los siguientes procedimientos para determinar si una instancia de Amazon EC2 está habilitada para el arranque seguro de UEFI.

## Instancias de Linux
<a name="verify-uefi-secure-boot-linux"></a>

Puede usar la utilidad `mokutil` para verificar si una instancia de Linux está habilitada para UEFI Secure Boot. Si `mokutil` no está instalado en la instancia, deberá instalarlo. Para obtener las instrucciones de instalación en Amazon Linux 2, consulte [Find and install software packages on an Amazon Linux 2 instance](https://docs.aws.amazon.com/linux/al2/ug/find-install-software.html). Para otras distribuciones de Linux, consulte su documentación específica.

**Para verificar si una instancia de Linux está habilitada para UEFI Secure Boot**  
Conéctese a la instancia y ejecute el siguiente comando como `root` en una ventana de terminal.

```
mokutil --sb-state 
```

A continuación, se muestra un ejemplo del resultado.
+ Si el arranque seguro UEFI está habilitado, la salida contiene `SecureBoot enabled`.
+ Si UEFI Secure Boot no está habilitado, la salida contiene `SecureBoot disabled` o `Failed to read SecureBoot`.

## instancias de Windows
<a name="verify-uefi-secure-boot-windows"></a>

**Para comprobar si una instancia de Windows está habilitada para UEFI Secure Boot**

1. Conéctese a la instancia.

1. Abra la herramienta msinfo32.

1. Verifique el campo **Estado de arranque seguro**. Si se habilita el arranque seguro de UEFI, el valor es **Compatible**, como se muestra en la siguiente imagen.  
![\[Estado de arranque seguro dentro de la información del sistema.\]](http://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/images/secure-boot-state-win.png)

También puede utilizar Cmdlet `Confirm-SecureBootUEFI` de Windows PowerShell para verificar el estado de arranque seguro. Para obtener más información sobre el cmdlet, consulte [Confirm-SecureBootUEFI](https://learn.microsoft.com/en-us/powershell/module/secureboot/confirm-securebootuefi) en la documentación de Microsoft.

# Creación de una AMI de Linux con claves personalizadas del arranque seguro de UEFI
<a name="create-ami-with-uefi-secure-boot"></a>

Estas instrucciones muestran cómo crear una AMI de Linux con el arranque seguro de UEFI y claves privadas personalizadas. Amazon Linux admite Arranque seguro UEFI a partir de la versión 2023.1 de AL2023. Para obtener más información, consulte [Arranque seguro de UEFI en AL2023](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html) en la *Guía del usuario de Amazon Linux 2023*.

**importante**  
El siguiente procedimiento está destinado **solo a usuarios avanzados**. Debe tener el conocimiento suficiente del flujo de arranque de distribución SSL y Linux para utilizar estos procedimientos.

**Requisitos previos**
+ Se utilizarán las siguientes herramientas:
  + OpenSSL: [https://www.openssl.org/](https://www.openssl.org/)
  + efivar: [https://github.com/rhboot/efivar](https://github.com/rhboot/efivar)
  + efitools: [https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/](https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/)
  + Comando [get-instance-uefi-data](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html)
+ La instancia de Linux debe haberse iniciado con una AMI de Linux compatible con el modo de arranque UEFI y debe tener datos no volátiles presentes.

Las instancias recientemente creadas sin claves de UEFI Secure Boot se crean en `SetupMode`, lo que le permite inscribir claves propias. Algunas AMI vienen preconfiguradas con UEFI Secure Boot y no se pueden cambiar las claves existentes. Si desea cambiar las claves, debe crear una AMI nueva basada en la AMI original.

Existen dos formas de propagar las claves en el almacén de variables, las cuales se describen en la opción A y la opción B que se indican a continuación. En la opción A, se describe cómo hacerlo desde la instancia, imitando el flujo de hardware real. En la opción B, se describe cómo crear un blob binario, que luego se pasa como un archivo codificado en base64 cuando se crea la AMI. Para ambas opciones, primero debe crear los tres pares de claves, que se utilizan para la cadena de confianza.

**Topics**
+ [Tarea 1: creación de un par de claves](#uefi-secure-boot-create-three-key-pairs)
+ [Tarea 2, opción A: agregar claves al almacén de variables desde la instancia](#uefi-secure-boot-optionA)
+ [Tarea 2, opción B: crear un blob binario que contenga un almacén de variables precargado](#uefi-secure-boot-optionB)

## Tarea 1: creación de un par de claves
<a name="uefi-secure-boot-create-three-key-pairs"></a>

UEFI Secure Boot se basa en las tres bases de datos clave siguientes, que se utilizan en una cadena de confianza: la clave de plataforma (PK), la clave de intercambio de claves (KEK) y la base de datos de firmas (db).¹

Cada clave se crea en la instancia. Para preparar las claves públicas en un formato que sea válido para el estándar UEFI Secure Boot, cree un certificado para cada clave. Las `DER` definen el formato SSL (codificación binaria de un formato). A continuación, convierta cada certificado en una lista de firmas UEFI, que es el formato binario que entiende UEFI Secure Boot. Y, por último, firme cada certificado con la clave correspondiente.

**Topics**
+ [Preparación para la creación de pares de claves](#uefisb-prepare-to-create-key-pairs)
+ [Par de claves 1: cree la clave de plataforma (PK)](#uefisb-create-key-pair-1)
+ [Par de claves 2: cree la clave de intercambio de claves (KEK)](#uefisb-create-key-pair-2)
+ [Par de claves 3: cree la base de datos (DB) de firmas](#uefisb-create-key-pair-3)
+ [Firme la imagen de arranque (kernel) con la clave privada](#uefi-secure-boot-sign-kernel)

### Preparación para la creación de pares de claves
<a name="uefisb-prepare-to-create-key-pairs"></a>

Antes de crear los pares de claves, cree un identificador único global (GUID) que se utilizará en la generación de claves.

1. [Conéctese a la instancia](connect.md).

1. Ejecute el siguiente comando en una línea del shell.

   ```
   uuidgen --random > GUID.txt
   ```

### Par de claves 1: cree la clave de plataforma (PK)
<a name="uefisb-create-key-pair-1"></a>

La PK es la raíz de la confianza de las instancias UEFI Secure Boot. La PK privada se utiliza para actualizar la KEK, que, a su vez, se puede utilizar para agregar claves autorizadas a la base de datos de firmas (db).

El estándar X.509 se utiliza para crear el par de claves. Para obtener información sobre el estándar, consulte [X.509](https://en.wikipedia.org/wiki/X.509) en *Wikipedia*.

**Para crear la PK**

1. Cree la clave. Debe nombrar la variable `PK`.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=Platform key/" -out PK.crt
   ```

   Se especifican los siguientes parámetros:
   + `-keyout PK.key`: el archivo de la clave privada.
   + `-days 3650`: el número de días en que el certificado es válido.
   + `-out PK.crt`: el certificado que se utiliza para crear la variable UEFI.
   + `CN=Platform key`: el nombre común (CN) para la clave. Puede escribir el nombre de su organización en lugar de la *Clave de plataforma*.

1. Cree el certificado.

   ```
   openssl x509 -outform DER -in PK.crt -out PK.cer
   ```

1. Convierta el certificado en una lista de firmas UEFI.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
   ```

1. Firme la lista de firmas de la UEFI con la PK privada (autofirmado).

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth
   ```

### Par de claves 2: cree la clave de intercambio de claves (KEK)
<a name="uefisb-create-key-pair-2"></a>

La KEK privada se utiliza para agregar claves a la db, que es la lista de firmas autorizadas para arrancar en el sistema. 

**Para crear la clave de intercambio de claves (KEK)**

1. Cree la clave.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=Key Exchange Key/" -out KEK.crt
   ```

1. Cree el certificado.

   ```
   openssl x509 -outform DER -in KEK.crt -out KEK.cer
   ```

1. Convierta el certificado en una lista de firmas UEFI.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
   ```

1. Firme la lista de firmas con la PK privada.

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth
   ```

### Par de claves 3: cree la base de datos (DB) de firmas
<a name="uefisb-create-key-pair-3"></a>

La lista de base de datos contiene claves autorizadas para arrancar en el sistema. Para modificar la lista, es necesario la KEK privada. Las imágenes de arranque se firmarán con la clave privada que se crea en este paso.

**Para crear la base de datos**

1. Cree la clave.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=Signature Database key/" -out db.crt
   ```

1. Cree el certificado.

   ```
   openssl x509 -outform DER -in db.crt -out db.cer
   ```

1. Convierta el certificado en una lista de firmas UEFI.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
   ```

1. Firme la lista de firmas con la KEK privada.

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth
   ```

### Firme la imagen de arranque (kernel) con la clave privada
<a name="uefi-secure-boot-sign-kernel"></a>

Para Ubuntu 22.04, las siguientes imágenes requieren firmas.

```
/boot/efi/EFI/ubuntu/shimx64.efi
/boot/efi/EFI/ubuntu/mmx64.efi
/boot/efi/EFI/ubuntu/grubx64.efi
/boot/vmlinuz
```

**Para firmar una imagen**  
Utilice la siguiente sintaxis para firmar una imagen.

```
sbsign --key db.key --cert db.crt --output /boot/vmlinuz /boot/vmlinuz
```

**nota**  
Debe firmar todos los nuevos kernels. En general, *`/boot/vmlinuz`* creará un enlace simbólico con el último kernel instalado.

Para obtener más información sobre la cadena de arranque y las imágenes requeridas, consulte la documentación correspondiente para su distribución.

¹ Gracias a la comunidad ArchWiki por todo el trabajo que ha realizado. Los comandos para crear la PK, la KEK, la base de datos, así como también para firmar la imagen provienen de la documentación [Creación de claves](https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Creating_keys), redactado por el equipo de mantenimiento de ArchWiki y los colaboradores de ArchWiki.

## Tarea 2, opción A: agregar claves al almacén de variables desde la instancia
<a name="uefi-secure-boot-optionA"></a>

Una vez que haya creado los [tres pares de claves](#uefi-secure-boot-create-three-key-pairs), puede conectar con su instancia y agregar las claves al almacén de variables desde la instancia con los siguientes pasos. Como alternativa, complete los pasos en [Tarea 2, opción B: crear un blob binario que contenga un almacén de variables precargado](#uefi-secure-boot-optionB).

**Topics**
+ [Paso 1: iniciar una instancia que sea compatible con UEFI Secure Boot](#step1-launch-uefi-sb)
+ [Paso 2: configurar una instancia de forma que admita UEFI Secure Boot](#step2-launch-uefi-sb)
+ [Paso 3: crear una AMI a partir de la instancia](#step3-launch-uefi-sb)

### Paso 1: iniciar una instancia que sea compatible con UEFI Secure Boot
<a name="step1-launch-uefi-sb"></a>

Cuando [inicia una instancia](LaunchingAndUsingInstances.md) con los siguientes requisitos previos, la instancia estará lista para configurarse de forma que admita UEFI Secure Boot. Solo puede habilitar la compatibilidad con UEFI Secure Boot en una instancia durante la inicialización, no puede habilitarlo más adelante.

**Requisitos previos**
+ **AMI**: la AMI de Linux tiene que ser compatible con el modo de arranque UEFI. Para comprobar que la AMI es compatible con el modo de arranque UEFI, el parámetro del modo de arranque AMI debe ser **uefi**. Para obtener más información, consulte [Determinación del parámetro del modo de arranque de una AMI de Amazon EC2](ami-boot-mode.md).

  Tenga en cuenta que AWS solo proporciona AMI de Linux configuradas para admitir UEFI para tipos de instancias basados en Graviton. En este momento, AWS no proporciona AMI de Linux x86\$164 compatibles con el modo de arranque UEFI. Puede configurar su propia AMI para que admita el modo de arranque UEFI en todas las arquitecturas. Para configurar su propia AMI para que admita el modo de arranque UEFI, debe seguir varios pasos de configuración en su propia AMI. Para obtener más información, consulte [Establecimiento del modo de arranque de una AMI de Amazon EC2](set-ami-boot-mode.md).
+ **Tipo de instancia**: todos los tipos de instancias virtualizadas que admiten UEFI también admiten UEFI Secure Boot. Los tipos de instancias bare metal no admiten UEFI Secure Boot. Para obtener información sobre los tipos de instancias compatibles con el modo Arranque seguro UEFI, consulte [Requisitos para el modo de arranque UEFI](launch-instance-boot-mode.md).
+ Inicie su instancia después de la inicialización de UEFI Secure Boot. Solo las instancias iniciadas después del 10 de mayo de 2022 (cuando se lanzó UEFI Secure Boot) pueden admitir UEFI Secure Boot.

Después de iniciar la instancia, puede verificar que está lista para configurarse de forma que admita UEFI Secure Boot (en otras palabras, puede proceder al [Paso 2](#step2-launch-uefi-sb)) y comprobar si hay datos UEFI presentes. La presencia de datos de la UEFI indica que persisten los datos no volátiles.

**Para verificar si la instancia está lista para el paso 2**  
Utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) y especifique el ID de la instancia.

```
aws ec2 get-instance-uefi-data --instance-id i-1234567890abcdef0
```

La instancia está lista para el paso 2 si los datos UEFI están presentes en la salida. Si la salida está vacía, la instancia no se puede configurar para que admita UEFI Secure Boot. Esto puede suceder si la instancia se lanzó antes de que la compatibilidad con UEFI Secure Boot estuviera disponible. Lance una nueva instancia e inténtelo de nuevo.

### Paso 2: configurar una instancia de forma que admita UEFI Secure Boot
<a name="step2-launch-uefi-sb"></a>

#### Inscriba los pares de claves en el almacén de variables UEFI en la instancia
<a name="step2a-launch-uefi-sb"></a>

**aviso**  
Debe firmar las imágenes de arranque *después* de inscribir las claves. De lo contrario, no podrá arrancar la instancia.

Después de crear las listas de firmas de la UEFI firmadas (`PK`, `KEK` y `db`), deben estar inscritas en el firmware de la UEFI.

Escribir en la variable `PK` solo es posible en los siguientes casos:
+ Si aún no se ha inscrito ninguna PK, lo que se indica si la variable `SetupMode` es `1`. Compruébelo mediante el siguiente comando. La salida es `1` o `0`.

  ```
  efivar -d -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-SetupMode 
  ```
+ Si la nueva PK está firmada por la clave privada de la PK existente.

**Para inscribir las claves en el almacén de variables UEFI**  
Los siguientes comandos deben ejecutarse en la instancia.

Si SetupMode está habilitado (el valor es `1`), las claves se pueden inscribir mediante los siguientes comandos en la instancia:

```
[ec2-user ~]$ efi-updatevar -f db.auth db
```

```
[ec2-user ~]$ efi-updatevar -f KEK.auth KEK
```

```
[ec2-user ~]$ efi-updatevar -f PK.auth PK
```

**Para comprobar que UEFI Secure Boot está habilitado**  
Para verificar si el arranque seguro UEFI está habilitado, siga los pasos en [Comprobación de si una instancia de Amazon EC2 está habilitada para el arranque seguro de UEFI](verify-uefi-secure-boot.md).

Ahora, puede exportar su almacén de variables UEFI con el comando de la CLI [https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) o puede continuar con el siguiente paso y firmar las imágenes de arranque para reiniciar en una instancia habilitada para UEFI Secure Boot.

### Paso 3: crear una AMI a partir de la instancia
<a name="step3-launch-uefi-sb"></a>

Para crear una AMI desde la instancia, puede utilizar la consola o el código `CreateImage` de la API, la CLI o el SDK. Para obtener instrucciones sobre cómo utilizar la consola, consulte [Creación de una AMI basada en Amazon EBS](creating-an-ami-ebs.md). Para obtener instrucciones sobre las API, consulte [Crear Imagen](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html).

**nota**  
La API `CreateImage` copia de forma automática el almacén de variables UEFI de la instancia en la AMI. La consola usa la API `CreateImage`. Después de iniciar instancias mediante esta AMI, las instancias tendrán el mismo almacén de variables UEFI.

## Tarea 2, opción B: crear un blob binario que contenga un almacén de variables precargado
<a name="uefi-secure-boot-optionB"></a>

Una vez que haya creado los [tres pares de claves](#uefi-secure-boot-create-three-key-pairs), puede crear un blob binario que contenga un almacén de variables precargado y que, a su vez, contenga las claves de UEFI Secure Boot. Como alternativa, complete los pasos en [Tarea 2, opción A: agregar claves al almacén de variables desde la instancia](#uefi-secure-boot-optionA).

**aviso**  
Debe firmar las imágenes de arranque *antes* de inscribir las claves; de lo contrario, no podrá arrancar la instancia.

**Topics**
+ [Paso 1: crear un almacén de variables nuevo o actualizar uno existente](#uefi-secure-boot-create-or-update-variable)
+ [Paso 2: cargar el blob binario en la creación de la AMI](#uefi-secure-boot-upload-binary-blob-on-ami-creation)

### Paso 1: crear un almacén de variables nuevo o actualizar uno existente
<a name="uefi-secure-boot-create-or-update-variable"></a>

Puede crear el almacén de variables *sin conexión* sin una instancia en ejecución mediante la herramienta python-uefivars. La herramienta puede crear un almacén de variables nuevo a partir de sus claves. El script admite actualmente el formato EDK2, el formato AWS y una representación JSON que es más fácil de editar con herramientas de nivel superior.

**Para crear el almacén de variables sin conexión sin una instancia en ejecución**

1. Descargue la herramienta en el siguiente enlace.

   ```
   https://github.com/awslabs/python-uefivars
   ```

1. Cree un nuevo almacén de variables desde sus claves con la ejecución del siguiente comando. Esto creará un blob binario codificado en base64 en *your\$1binary\$1blob*.bin. La herramienta también admite la actualización de un blob binario a través del parámetro `-I`.

   ```
   ./uefivars.py -i none -o aws -O your_binary_blob.bin -P PK.esl -K KEK.esl --db db.esl --dbx dbx.esl
   ```

### Paso 2: cargar el blob binario en la creación de la AMI
<a name="uefi-secure-boot-upload-binary-blob-on-ami-creation"></a>

Utilice [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) para pasar los datos del almacén de variables UEFI. Para el parámetro `--uefi-data`, especifique el blob binario y para el parámetro `--boot-mode`, especifique `uefi`.

```
aws ec2 register-image \
    --name uefi_sb_tpm_register_image_test \
    --uefi-data $(cat your_binary_blob.bin) \
    --block-device-mappings "DeviceName=/dev/sda1,Ebs= {SnapshotId=snap-0123456789example,DeleteOnTermination=true}" \
    --architecture x86_64 \
    --root-device-name /dev/sda1 \
    --virtualization-type hvm \
    --ena-support \
    --boot-mode uefi
```

# Creación del blob binario de AWS para el arranque seguro de UEFI
<a name="aws-binary-blob-creation"></a>

Puede seguir los siguientes pasos para personalizar las variables de UEFI Secure Boot durante la creación de AMI. El KEK que se utiliza en estos pasos está actualizado a partir de septiembre de 2021. Si Microsoft actualiza la KEK, debe utilizar la KEK más reciente.

**Para crear el blob binario de AWS**

1. Cree una lista de firmas de PK vacía.

   ```
   touch empty_key.crt
   cert-to-efi-sig-list empty_key.crt PK.esl
   ```

1. Descargue el certificado KEK.

   ```
   https://go.microsoft.com/fwlink/?LinkId=321185
   ```

1. Empaque los certificados KEK en una lista de firmas UEFI (`siglist`).

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK.esl MicCorKEKCA2011_2011-06-24.crt 
   ```

1. Descargue los certificados de la db de Microsoft.

   ```
   https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt
   https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt
   ```

1. Genere la lista de firmas de la db.

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db.esl MicWinProPCA2011_2011-10-19.crt
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db.esl MicCorUEFCA2011_2011-06-27.crt
   cat MS_Win_db.esl MS_UEFI_db.esl > MS_db.esl
   ```

1. Unified Extensible Firmware Interface Forum ya no proporciona los archivos DBX. Ahora los proporciona Microsoft en GitHub. Descargue la actualización más reciente de DBX del repositorio de actualizaciones de Arranque seguro de Microsoft en [https://github.com/microsoft/secureboot\$1objects](https://github.com/microsoft/secureboot_objects).

1. Desempaquete el archivo update-binary firmado.

   Cree `SplitDbxContent.ps1` con el contenido del script que aparece a continuación. Como alternativa, puede instalar el script desde la [Galería de PowerShell](https://www.powershellgallery.com/packages/SplitDbxContent/1.0) con `Install-Script -Name SplitDbxContent`.

   ```
   <#PSScriptInfo
    
   .VERSION 1.0
    
   .GUID ec45a3fc-5e87-4d90-b55e-bdea083f732d
    
   .AUTHOR Microsoft Secure Boot Team
    
   .COMPANYNAME Microsoft
    
   .COPYRIGHT Microsoft
    
   .TAGS Windows Security
    
   .LICENSEURI
    
   .PROJECTURI
    
   .ICONURI
    
   .EXTERNALMODULEDEPENDENCIES
    
   .REQUIREDSCRIPTS
    
   .EXTERNALSCRIPTDEPENDENCIES
    
   .RELEASENOTES
   Version 1.0: Original published version.
    
   #>
   
   <#
   .DESCRIPTION
    Splits a DBX update package into the new DBX variable contents and the signature authorizing the change.
    To apply an update using the output files of this script, try:
    Set-SecureBootUefi -Name dbx -ContentFilePath .\content.bin -SignedFilePath .\signature.p7 -Time 2010-03-06T19:17:21Z -AppendWrite'
   .EXAMPLE
   .\SplitDbxAuthInfo.ps1 DbxUpdate_x64.bin
   #>
   
   
   # Get file from script input
   $file  = Get-Content -Encoding Byte $args[0]
   
   # Identify file signature
   $chop = $file[40..($file.Length - 1)]
   if (($chop[0] -ne 0x30) -or ($chop[1] -ne 0x82 )) {
       Write-Error "Cannot find signature"
       exit 1
   }
   
   # Signature is known to be ASN size plus header of 4 bytes
   $sig_length = ($chop[2] * 256) + $chop[3] + 4
   $sig = $chop[0..($sig_length - 1)]
   
   if ($sig_length -gt ($file.Length + 40)) {
       Write-Error "Signature longer than file size!"
       exit 1
   }
   
   # Content is everything else
   $content = $file[0..39] + $chop[$sig_length..($chop.Length - 1)]
   
   # Write signature and content to files
   Set-Content -Encoding Byte signature.p7 $sig
   Set-Content -Encoding Byte content.bin $content
   ```

   Utilice el script para desempaquetar los archivos DBX firmados.

   ```
   PS C:\Windows\system32> SplitDbxContent.ps1 .\dbx.bin
   ```

   Esto produce dos archivos: `signature.p7` y `content.bin`. Use `content.bin` en el paso siguiente.

1. Cree un almacén de variables UEFI utilizando el script `uefivars.py`.

   ```
   ./uefivars.py -i none -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin 
   ```

1. Compruebe el blob binario y el almacén de variables UEFI.

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o json | less
   ```

1. Puede actualizar el blob cargándolo nuevamente en la misma herramienta.

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin
   ```

   Resultado previsto

   ```
   Replacing PK
   Replacing KEK
   Replacing db
   Replacing dbx
   ```