

# Controle el descubrimiento y el uso de las AMI en Amazon EC2 con las AMI permitidas
<a name="ec2-allowed-amis"></a>

Para controlar el descubrimiento y el uso de las Imágenes de máquina de Amazon (AMI) por parte de los usuarios de la Cuenta de AWS, puede utilizar la característica *AMI permitidas*. Usted especifica los criterios que las AMI deben cumplir para estar visibles y disponibles en la cuenta. Cuando los criterios están habilitados, los usuarios que lancen instancias solo verán las AMI que cumplan con los criterios especificados, y únicamente tendrán acceso a estas. Por ejemplo, puede especificar una lista de proveedores de AMI de confianza como criterio y solo las AMI de estos proveedores estarán visibles y disponibles para ser utilizadas.

Antes de habilitar la configuración de AMI permitidas, puede habilitar el *modo de auditoría* para obtener una vista previa de las AMI que estarán o no visibles y disponibles para ser utilizadas. Esto permite ajustar los criterios según sea necesario para garantizar que solo las AMI previstas estén visibles y disponibles para los usuarios de la cuenta. Además, utilice el comando [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) para buscar las instancias que se hayan lanzado con AMI que no cumplan los criterios especificados. Esta información puede fundamentar su decisión para determinar si actualizar las configuraciones de lanzamiento para usar AMI compatibles (por ejemplo, especificar una AMI diferente en una plantilla de lanzamiento) o ajustar los criterios para permitir estas AMI.

Especifica la configuración de AMI permitidas a nivel de cuenta, ya sea directamente en la cuenta o mediante una política declarativa. Estos ajustes se deben configurar en cada Región de AWS en la que desee controlar el uso de AMI. El uso de una política declarativa permite aplicar la configuración en varias regiones simultáneamente, así como en varias cuentas simultáneamente. Cuando se utiliza una política declarativa, no se puede modificar la configuración directamente en una cuenta. En este tema se describe cómo configurar el ajuste directamente dentro de una cuenta. Para obtener información sobre el uso de políticas declarativas, consulte [Políticas declarativas](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html) en la *Guía del usuario de AWS Organizations*.

**nota**  
La característica AMI permitidas solo controla la detección y el uso de las AMI públicas o las AMI compartidas con la cuenta. No restringe las AMI propiedad de la cuenta. Independientemente de los criterios que establezca, los usuarios de la cuenta siempre pueden detectar y utilizar las AMI creadas por la cuenta.

**Principales ventajas de la característica AMI permitidas**
+ **Cumplimiento y seguridad**: los usuarios solo pueden descubrir y utilizar las AMI que cumplan los criterios especificados, lo que reduce el riesgo del uso no conforme de las AMI.
+ **Administración eficiente**: al reducir la cantidad de AMI permitidas, resulta más fácil y eficiente administrar las restantes.
+ **Implementación centralizada a nivel de cuenta**: configure los ajustes de AMI permitidas a nivel de cuenta, ya sea directamente dentro de la cuenta o mediante una política declarativa. Esto proporciona una forma centralizada y eficiente de controlar el uso de AMI en toda la cuenta.

**Topics**
+ [Cómo funciona la característica AMI permitidas](#how-allowed-amis-works)
+ [Prácticas recomendadas para implementar la característica AMI permitidas](#best-practice-for-implementing-allowed-amis)
+ [Permisos de IAM necesarios](#iam-permissions-for-allowed-amis)
+ [Administración de la configuración de las AMI permitidas](manage-settings-allowed-amis.md)

## Cómo funciona la característica AMI permitidas
<a name="how-allowed-amis-works"></a>

Para controlar qué AMI se pueden descubrir y usar en la cuenta, se define un conjunto de criterios con los cuales evaluar las AMI. Los criterios se componen de uno o más `ImageCriterion`, como se muestra en el siguiente diagrama. A continuación del diagrama se presenta una explicación.

![\[Jerarquía de configuración de ImageCriteria de AMI permitidas.\]](http://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/images/ami_allowed-amis-imagecriteria.png)


La configuración tiene tres niveles:
+ **1** – valores de parámetros
  + Parámetros con varios valores:
    + `ImageProviders`
    + `ImageNames`
    + `MarketplaceProductCodes`

      Una AMI puede coincidir con *cualquiera* de los valores dentro de un parámetro para que se permita.

      Ejemplo: `ImageProviders` = `amazon` **O** cuenta `111122223333` **O** cuenta `444455556666` (La lógica de evaluación de los valores de los parámetros no se muestra en el diagrama).
  + Parámetros de un solo valor:
    + `CreationDateCondition`
    + `DeprecationTimeCondition`
+ **2**: `ImageCriterion`
  + Agrupa varios parámetros con la lógica **AND**.
  + Una AMI debe coincidir con *todos* los parámetros dentro de una `ImageCriterion` para que se permita.
  + Ejemplo: `ImageProviders` = `amazon` **AND** `CreationDateCondition` = 300 días o menos
+ **3**: `ImageCriteria`
  + Agrupa varios `ImageCriterion` con lógica **OR**.
  + Una AMI puede coincidir con *cualquier* `ImageCriterion` para que se permita.
  + Constituye la configuración completa con la cual se evalúan las AMI. 

**Topics**
+ [Parámetros de AMI permitidas](#allowed-amis-criteria)
+ [Configuración de AMI permitidas](#allowed-amis-json-configuration)
+ [Cómo se evalúan los criterios](#how-allowed-amis-criteria-are-evaluated)
+ [Límites](#allowed-amis-json-configuration-limits)
+ [Operaciones de AMI permitidas](#allowed-amis-operations)

### Parámetros de AMI permitidas
<a name="allowed-amis-criteria"></a>

Los siguientes parámetros se pueden configurar para crear `ImageCriterion`:

`ImageProviders`  
Los proveedores de AMI cuyas AMI están permitidas.  
Los valores válidos son los alias definidos por AWS, y los ID de Cuenta de AWS, de la siguiente manera:  
+ `amazon`: un alias que identifica las AMI creadas por Amazon o proveedores verificados
+ `aws-marketplace`: un alias que identifica las AMI creadas por proveedores verificados en el AWS Marketplace
+ `aws-backup-vault`: un alias que identifica las AMI de copia de seguridad que residen en cuentas de almacenes aislados lógicamente de AWS Backup. Si utiliza la característica de almacén aislado lógicamente de AWS Backup, asegúrese de incluir este alias como proveedor de AMI.
+ Identificadores de Cuenta de AWS: uno o más identificadores de Cuenta de AWS de 12 dígitos
+ `none`: indica que solo se pueden descubrir y utilizar las AMI creadas por la cuenta. Las AMI públicas o compartidas no se pueden detectar ni utilizar. Cuando se especifica, no se puede especificar ningún otro criterio.

`ImageNames`  
Los nombres de las AMI permitidas, con coincidencias exactas o caracteres comodín (`?` o `*`).

`MarketplaceProductCodes`  
Los códigos de producto de AWS Marketplace de las AMI permitidas.

`CreationDateCondition`  
La antigüedad máxima de las AMI permitidas.

`DeprecationTimeCondition`  
El período máximo desde la obsolescencia de las AMI permitidas.

Para conocer los valores válidos y las restricciones de cada criterio, consulte [ImageCriterionRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImageCriterionRequest.html) en la *Referencia de la API de Amazon EC2*.

### Configuración de AMI permitidas
<a name="allowed-amis-json-configuration"></a>

La configuración principal de las AMI permitidas es la configuración de `ImageCriteria` que define los criterios para las AMI permitidas. La siguiente estructura JSON muestra los parámetros que se pueden especificar:

```
{
    "State": "enabled" | "disabled" | "audit-mode",  
    "ImageCriteria" : [
        {
            "ImageProviders": ["string",...],
            "MarketplaceProductCodes": ["string",...],           
            "ImageNames":["string",...],
            "CreationDateCondition" : {
                "MaximumDaysSinceCreated": integer
            },
            "DeprecationTimeCondition" : {
                "MaximumDaysSinceDeprecated": integer
            }
         },
         ...
}
```

#### Ejemplo de ImageCriteria
<a name="allowed-amis-json-configuration-example"></a>

En el siguiente ejemplo de `ImageCriteria` se configuran cuatro `ImageCriterion`. Se permite una AMI si coincide con alguno de estos `ImageCriterion`. Para obtener información sobre cómo se evalúan los criterios, consulte [Cómo se evalúan los criterios](#how-allowed-amis-criteria-are-evaluated).

```
{
    "ImageCriteria": [
        // ImageCriterion 1: Allow AWS Marketplace AMIs with product code "abcdefg1234567890"
        {
            "MarketplaceProductCodes": [
                "abcdefg1234567890"
            ]
        },
        // ImageCriterion 2: Allow AMIs from providers whose accounts are
        // "123456789012" OR "123456789013" AND AMI age is less than 300 days
        {
            "ImageProviders": [
                "123456789012",
                "123456789013"
            ],
            "CreationDateCondition": {
                "MaximumDaysSinceCreated": 300
            }
        },
        // ImageCriterion 3: Allow AMIs from provider whose account is "123456789014" 
        // AND with names following the pattern "golden-ami-*"
        {
            "ImageProviders": [
                "123456789014"
            ],
            "ImageNames": [
                "golden-ami-*"
            ]
        },
        // ImageCriterion 4: Allow AMIs from Amazon or verified providers 
        // AND which aren't deprecated
        {
            "ImageProviders": [
                "amazon"
            ],
            "DeprecationTimeCondition": {
                "MaximumDaysSinceDeprecated": 0
            }
        }
    ]
}
```

### Cómo se evalúan los criterios
<a name="how-allowed-amis-criteria-are-evaluated"></a>

La siguiente tabla explica las reglas de evaluación que determinan si una AMI está permitida, y muestra cómo se aplica el operador `AND` o `OR` en cada nivel:


| Nivel de evaluación | Operador | Requisito para que se permita una AMI | 
| --- | --- | --- | 
| Valores de parámetros para ImageProviders, ImageNames y MarketplaceProductCodes | OR | La AMI debe coincidir con al menos un valor en cada lista de parámetros | 
| ImageCriterion | AND | La AMI debe coincidir con todos los parámetros en cada ImageCriterion | 
| ImageCriteria | OR | La AMI debe coincidir con cualquiera de los ImageCriterion | 

Utilicemos las reglas de evaluación anteriores para ver cómo aplicarlas a [Ejemplo de ImageCriteria](#allowed-amis-json-configuration-example):
+ `ImageCriterion` 1: permite las AMI que tienen el código de producto `abcdefg1234567890` de AWS Marketplace

  `OR`
+ `ImageCriterion` 2: permite las AMI que cumplen estos dos criterios:
  + Propiedad de cualquiera de las cuentas `123456789012` `OR` `123456789013`
    + `AND`
  + Creada en los últimos 300 días

  `OR`
+ `ImageCriterion` 3: permite las AMI que cumplen estos dos criterios:
  + Propiedad de la cuenta `123456789014`
    + `AND`
  + Nombrada con el patrón `golden-ami-*`

  `OR`
+ `ImageCriterion` 4: permite las AMI que cumplen estos dos criterios:
  + Publicada por Amazon o proveedores verificados (especificados por el alias `amazon`)
    + `AND`
  + No está en desuso (el número máximo de días transcurridos desde la obsolescencia es `0`)

### Límites
<a name="allowed-amis-json-configuration-limits"></a>

El `ImageCriteria` puede incluir hasta:
+ 10 `ImageCriterion`

Cada `ImageCriterion` puede incluir hasta:
+ 200 valores para `ImageProviders`
+ 50 valores para `ImageNames` 
+ 50 valores para `MarketplaceProductCodes` 

**Ejemplo de límites**

Si utilizamos el [Ejemplo de ImageCriteria](#allowed-amis-json-configuration-example) anterior:
+ Hay 4 `ImageCriterion`. Se pueden agregar hasta 6 más a la solicitud para alcanzar el límite de 10.
+ En el primer `ImageCriterion`, hay 1 valor para `MarketplaceProductCodes`. Se pueden agregar hasta 49 más a este `ImageCriterion` para alcanzar el límite de 50.
+ En el segundo `ImageCriterion`, hay 2 valores para `ImageProviders`. Se pueden agregar hasta 198 más a este `ImageCriterion` para alcanzar el límite de 200.
+ En el tercer `ImageCriterion`, hay 1 valor para `ImageNames`. Se pueden agregar hasta 49 más a este `ImageCriterion` para alcanzar el límite de 50.

### Operaciones de AMI permitidas
<a name="allowed-amis-operations"></a>

La característica de AMI permitidas tiene tres estados operativos para administrar los criterios de imágenes: **habilitada**, **desactivada** y **modo auditoría**. Con estos es posible habilitar o desactivar los criterios de imágenes, así como revisarlos según sea necesario.

**Habilitado**

Cuando AMI permitidas se encuentra habilitada: 
+ Se aplican los `ImageCriteria`.
+ Solo se pueden detectar AMI permitidas en la consola de EC2 y por las API que utilizan imágenes (por ejemplo, que describen, copian, almacenan o realizan otras acciones que utilizan imágenes).
+ Las instancias solo se pueden lanzar con las AMI permitidas.

**Deshabilitado**

Cuando AMI permitidas se encuentra desactivada: 
+ No se aplican los `ImageCriteria`.
+ No se imponen restricciones a la capacidad de detección o uso de las AMI. 

**Modo de auditoría**

 En el modo de auditoría:
+ Los `ImageCriteria` se aplican, pero no se imponen restricciones a la capacidad de detección o uso de las AMI.
+ En la consola de EC2, para cada AMI, el campo **Imagen permitida** muestra **Sí** o **No** para indicar si la AMI se podrá detectar y estará disponible para los usuarios de la cuenta cuando la característica AMI permitidas esté habilitada.
+ En la línea de comandos, la respuesta a la operación `describe-image` incluye `"ImageAllowed": true` o `"ImageAllowed": false` para indicar si la AMI podrá ser detectada y estará disponible para los usuarios de la cuenta cuando si la característica AMI permitidas está habilitada.
+ En la consola de EC2, el catálogo de AMI muestra **No permitida** junto a las AMI que no podrán detectar los usuarios de la cuenta y no estarán disponibles para ellos cuando la característica AMI permitidas esté habilitada.

## Prácticas recomendadas para implementar la característica AMI permitidas
<a name="best-practice-for-implementing-allowed-amis"></a>

Al implementar AMI permitidas, tenga en cuenta estas prácticas recomendadas para garantizar una transición fluida y minimizar las posibles interrupciones en el entorno de AWS.

1. **Cómo habilitar el modo de auditoría**

   Comience por habilitar la característica AMI permitidas en el modo de auditoría. Este estado permite ver qué AMI se verían afectadas por los criterios sin restringir realmente el acceso, lo que proporciona un período de evaluación sin riesgos.

1. **Establezca los criterios de AMI permitidas**

   Establezca cuidadosamente qué proveedores de AMI se alinean con las políticas de seguridad, los requisitos de cumplimiento y las necesidades operativas de la organización.
**nota**  
Cuando utilice servicios administrados de AWS como Amazon ECS, Amazon EKS o Lambda Managed Instances de AWS, le recomendamos que especifique el alias `amazon` para permitir las AMI creadas por AWS. Estos servicios dependen de las AMI publicadas por Amazon para ejecutar instancias.   
Tenga cuidado cuando establezca restricciones de `CreationDateCondition` para cualquier AMI. Establecer condiciones de fecha demasiado restrictivas (por ejemplo, las AMI deben tener menos de 5 días de antigüedad) puede provocar errores en la ejecución de las instancias si las AMI, ya sean de AWS o de otros proveedores, no se actualizan en el plazo especificado.  
Recomendamos combinar `ImageNames` con `ImageProviders` para mejorar el control y la especificidad. Es posible que el uso de `ImageNames` por sí solo no identifique exclusivamente una AMI.

1. **Compruebe el impacto en los procesos empresariales esperados**

   Puede usar la consola o la CLI para identificar cualquier instancia que se haya lanzado con AMI que no cumplan los criterios especificados. Esta información puede fundamentar su decisión para determinar si actualizar las configuraciones de lanzamiento para usar AMI compatibles (por ejemplo, especificar una AMI diferente en una plantilla de lanzamiento) o ajustar los criterios para permitir estas AMI.

   Consola: utilice la regla de AWS Config [ec2-instance-launched-with-allowed-ami](https://docs.aws.amazon.com/config/latest/developerguide/ec2-instance-launched-with-allowed-ami.html) para comprobar si las instancias en ejecución o detenidas se lanzaron con AMI que cumplen los criterios de las AMI permitidas. La regla es **NON\$1COMPLIANT** si una AMI no cumple los criterios de las AMI permitidas y **COMPLIANT** si los cumple. La regla solo funciona cuando la configuración de las AMI permitidas está establecida en **habilitada** o en **modo de auditoría**.

   CLI: ejecute el comando [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) y filtre la respuesta para identificar cualquier instancia que se haya lanzado con AMI que no cumplan los criterios especificados.

   Para obtener instrucciones sobre la consola y la CLI, consulte [Búsqueda de instancias lanzadas desde AMI no permitidas](manage-settings-allowed-amis.md#identify-instances-with-allowed-AMIs).

1. **Cómo habilitar AMI permitidas**

   Una vez que haya confirmado que los criterios no afectarán negativamente a los procesos empresariales esperados, habilite AMI permitidas.

1. **Supervise los lanzamientos de instancias**

   Continue con la supervisión de los lanzamientos de instancias desde AMI en las aplicaciones y los servicios administrados por AWS que utilice, como Amazon EMR, Amazon ECR, Amazon EKS y AWS Elastic Beanstalk. Compruebe si hay algún problema inesperado y realice los ajustes necesarios en los criterios de la característica AMI permitidas.

1. **Prueba piloto de AMI nuevas**

   Para probar las AMI de terceros que no cumplan con la configuración actual de las AMI permitidas, AWS sugiere los siguientes métodos:
   + Utilice una Cuenta de AWS distinta: cree una cuenta que no tenga acceso a los recursos fundamentales para la empresa. Asegúrese de que la configuración de las AMI permitidas no esté habilitada en esta cuenta o de que las AMI que desee probar estén permitidas de forma explícita para poder probarlas. 
   + Realice la prueba en otra Región de AWS: utilice una región en la que estén disponibles las AMI de terceros, pero en la que aún no haya habilitado la configuración de las AMI permitidas. 

   Estos métodos ayudan a garantizar la seguridad de los recursos fundamentales para la empresa mientras se prueban las nuevas AMI.

## Permisos de IAM necesarios
<a name="iam-permissions-for-allowed-amis"></a>

Para utilizar la característica AMI permitidas, necesitará los siguientes permisos de IAM:
+ `GetAllowedImagesSettings`
+ `EnableAllowedImagesSettings`
+ `DisableAllowedImagesSettings`
+ `ReplaceImageCriteriaInAllowedImagesSettings`