

# Controlar a descoberta e o uso de AMIs no Amazon EC2 com AMIs permitidas.
<a name="ec2-allowed-amis"></a>

Para controlar a descoberta e o uso de imagens de máquina da Amazon (AMIs) pelos usuários da sua Conta da AWS, é possível usar o atributo de *AMIs permitidas*. Você especifica os critérios que as AMIs devem atender para ficarem visíveis e disponíveis em sua conta. Quando os critérios são habilitados, os usuários que iniciam instâncias só verão e terão acesso às AMIs que estejam em conformidade com os critérios especificados. Por exemplo, é possível especificar uma lista de provedores de AMIs confiáveis como critério, e somente as AMIs desses provedores estarão visíveis e disponíveis para uso.

Antes de ativar as configurações de AMIs permitidas, é possível ativar o *modo de auditoria* para visualizar quais AMIs estarão ou não visíveis e disponíveis para uso. Isso permite que você refine os critérios conforme necessário para garantir que somente as AMIs pretendidas estejam visíveis e disponíveis para os usuários em sua conta. Além disso, use o comando [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) para encontrar as instâncias que foram iniciadas com AMIs que não atendiam aos critérios especificados. Essas informações podem orientar sua decisão de atualizar suas configurações de inicialização para usar AMIs em conformidade (por exemplo, especificar uma AMI diferente em um modelo de inicialização) ou ajustar seus critérios para permitir essas AMIs.

Você especifica as configurações de AMIs permitidas no nível da conta, diretamente na conta ou usando uma política declarativa. Essas configurações devem ser definidas em cada Região da AWS onde você deseja controlar o uso de AMIs. O uso de uma política declarativa permite que você aplique as configurações em várias regiões simultaneamente, bem como em várias contas simultaneamente. Quando uma política declarativa está em uso, você não pode modificar as configurações diretamente em uma conta. Este tópico descreve como ajustar as configurações diretamente em uma conta. Para obter informações sobre o uso de políticas declarativas, consulte [Políticas declarativas](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html) no *Guia do usuário do AWS Organizations*.

**nota**  
O atributo AMIs permitidas controla somente a descoberta e o uso de AMIs públicas ou AMIs compartilhadas com sua conta. Ele não restringe as AMIs pertencentes à sua conta. Independentemente dos critérios definidos, as AMIs criadas pela sua conta sempre poderão ser descobertas e usadas pelos usuários da sua conta.

**Principais benefícios das AMIs permitidas**
+ **Conformidade e segurança**: os usuários só podem descobrir e usar AMIs que atendam aos critérios especificados, reduzindo o risco de uso de AMIs fora de conformidade.
+ **Gerenciamento eficiente**: ao reduzir o número de AMIs permitidas, o gerenciamento das demais se torna mais fácil e eficiente.
+ **Implementação centralizada em nível de conta**: defina as configurações de AMIs permitidas no nível da conta, diretamente na conta ou por meio de uma política declarativa. Isso fornece uma maneira centralizada e eficiente de controlar o uso de AMIs em toda a conta.

**Topics**
+ [Como funcionam as AMIs permitidas](#how-allowed-amis-works)
+ [Práticas recomendadas para a implementação de AMIs permitidas](#best-practice-for-implementing-allowed-amis)
+ [Permissões obrigatórias do IAM](#iam-permissions-for-allowed-amis)
+ [Gerenciar as configurações de AMIs permitidas](manage-settings-allowed-amis.md)

## Como funcionam as AMIs permitidas
<a name="how-allowed-amis-works"></a>

Para controlar quais AMIs podem ser detectadas e usadas em sua conta, defina um conjunto de critérios de avaliação de AMIs. Os critérios são compostos de um ou mais `ImageCriterion`, como mostra o diagrama a seguir. Uma explicação se segue ao diagrama.

![A hierarquia da configuração de ImageCriteria de AMIs Permitidas.](http://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/images/ami_allowed-amis-imagecriteria.png)


A configuração tem três níveis:
+ **1** – valores dos parâmetros
  + Parâmetros com vários valores:
    + `ImageProviders`
    + `ImageNames`
    + `MarketplaceProductCodes`

      Uma AMI pode atender a *qualquer* valor dentro de um parâmetro para ser permitida.

      Exemplo: `ImageProviders` = `amazon` **OU** conta `111122223333` **OU** conta `444455556666` (a lógica de avaliação de valores dos parâmetros não é mostrada no diagrama.)
  + Parâmetros de valor único:
    + `CreationDateCondition`
    + `DeprecationTimeCondition`
+ **2**: `ImageCriterion`
  + Agrupa vários parâmetros com a lógica **E**.
  + Uma AMI deve atender a *todos* os parâmetros dentro de um `ImageCriterion` para ser permitida.
  + Exemplo: `ImageProviders` = `amazon` **E** `CreationDateCondition` = 300 dias ou menos
+ **3**: `ImageCriteria`
  + Agrupa vários `ImageCriterion` com a lógica **OU**.
  + Uma AMI pode atender a *qualquer* `ImageCriterion` para ser permitida.
  + Forma a configuração completa em relação à qual as AMIs são avaliadas. 

**Topics**
+ [Parâmetros de AMIs permitidas](#allowed-amis-criteria)
+ [Configuração de AMIs permitidas](#allowed-amis-json-configuration)
+ [Como os critérios são avaliados](#how-allowed-amis-criteria-are-evaluated)
+ [Limites](#allowed-amis-json-configuration-limits)
+ [Operações de AMIs permitidas](#allowed-amis-operations)

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

Os seguintes parâmetros podem ser configurados para criar `ImageCriterion`:

`ImageProviders`  
Os provedores de AMIs cujas AMIs são permitidas.  
Os valores válidos são aliases definidos pela AWS, e IDs de Conta da AWS, da seguinte forma:  
+ `amazon`: um alias que identifica as AMIs criadas pela Amazon ou por provedores verificados
+ `aws-marketplace`: um alias que identifica AMIs criadas por provedores verificados no AWS Marketplace
+ `aws-backup-vault`: um alias que identifica AMIs de backup que residem em contas do cofre de backup da AWS logicamente isoladas. Se você usar o atributo de cofre logicamente isolado de backup da AWS, certifique-se de que esse alias esteja incluído como provedor de AMI.
+ IDs de Conta da AWS: um ou mais IDs de Conta da AWS de 12 dígitos
+ `none`: indica que somente as AMIs criadas pela sua conta podem ser descobertas e usadas. AMIs públicas ou compartilhadas não podem ser descobertas e usadas. Quando especificado, nenhum outro critério pode ser especificado.

`ImageNames`  
Os nomes das AMIs permitidas, usando correspondências exatas ou curingas (`?` ou `*`).

`MarketplaceProductCodes`  
Os códigos de produto do AWS Marketplace para as AMIs permitidas.

`CreationDateCondition`  
A idade máxima das AMIs permitidas.

`DeprecationTimeCondition`  
O período máximo desde a obsolescência para as AMIs permitidas.

Para ver os valores e as restrições válidas para cada critério, consulte [ImageCriterionRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImageCriterionRequest.html) na *Amazon EC2 API Reference*.

### Configuração de AMIs permitidas
<a name="allowed-amis-json-configuration"></a>

A configuração básica das AMIs permitidas é a configuração de `ImageCriteria` que define os critérios para as AMIs permitidas. A seguinte estrutura JSON mostra os parâmetros que podem ser especificados:

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

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

O exemplo de `ImageCriteria` a seguir configura quatro `ImageCriterion`. Uma AMI será permitida se atender a um desses `ImageCriterion`. Para obter informações sobre como os critérios são avaliados, consulte [Como os critérios são avaliados](#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}}
            }
        }
    ]
}
```

### Como os critérios são avaliados
<a name="how-allowed-amis-criteria-are-evaluated"></a>

A seguinte tabela explica as regras de avaliação que determinam se uma AMI é permitida, mostrando como o operador `AND` ou `OR` é aplicado em cada nível:


| Nível de avaliação | Operador | Requisito para ser uma AMI permitida | 
| --- | --- | --- | 
| Valores de parâmetros para ImageProviders, ImageNames e MarketplaceProductCodes | OR | A AMI deve atender a pelo menos um valor de cada lista de parâmetros | 
| ImageCriterion | AND | A AMI deve atender a todos os parâmetros de cada ImageCriterion | 
| ImageCriteria | OR | A AMI deve atender a um dos ImageCriterion | 

Usando as regras de avaliação anteriores, vamos ver como aplicá-las ao [Exemplo de ImageCriteria](#allowed-amis-json-configuration-example):
+ `ImageCriterion` 1: permite AMIs que tenham o código de produto de AWS Marketplace `abcdefg1234567890`

  `OR`
+ `ImageCriterion` 2: permite AMIs que atendam a estes dois critérios:
  + Pertencente à conta `123456789012` `OR` `123456789013`
    + `AND`
  + Criada nos últimos 300 dias

  `OR`
+ `ImageCriterion` 3: permite AMIs que atendam a estes dois critérios:
  + Pertencente à conta `123456789014`
    + `AND`
  + Nomeada com o padrão `golden-ami-*`

  `OR`
+ `ImageCriterion` 4: permite AMIs que atendam a estes dois critérios:
  + Publicada pela Amazon ou por fornecedores verificados (especificado pelo alias `amazon`)
    + `AND`
  + Não obsoletas (o número máximo de dias desde a obsolescência é `0`)

### Limites
<a name="allowed-amis-json-configuration-limits"></a>

O `ImageCriteria` podem incluir até:
+ 10 `ImageCriterion`

Cada `ImageCriterion` pode incluir até:
+ 200 valores para `ImageProviders`
+ 50 valores para `ImageNames` 
+ 50 valores para `MarketplaceProductCodes` 

**Exemplo de limites**

Usando o [Exemplo de ImageCriteria](#allowed-amis-json-configuration-example) anterior:
+ Existem 4 `ImageCriterion`. Podem ser adicionados até 6 à solicitação para atingir o limite de 10.
+ No primeiro `ImageCriterion`, há 1 valor para `MarketplaceProductCodes`. Podem ser adicionados até 49 a esse `ImageCriterion` para atingir o limite de 50.
+ No segundo `ImageCriterion`, há 2 valores para `ImageProviders`. Podem ser adicionados até 198 a esse `ImageCriterion` para atingir o limite de 200.
+ No terceiro `ImageCriterion`, há 1 valor para `ImageNames`. Podem ser adicionados até 49 a esse `ImageCriterion` para atingir o limite de 50.

### Operações de AMIs permitidas
<a name="allowed-amis-operations"></a>

O atributo AMIs permitidas tem três estados operacionais para gerenciamento dos critérios de imagem: **habilitado**, **desabilitado** e **modo de auditoria**. Esses modos permitem que você habilite ou desabilite os critérios de imagem, ou os revise conforme necessário.

**Habilitado**

Quando as AMIs permitidas estão habilitadas: 
+ Os `ImageCriteria` são aplicados.
+ Somente as AMIs permitidas podem ser descobertas no console do EC2 e por APIs que usam imagens (por exemplo, que descrevem, copiam, armazenam ou executam outras ações que usam imagens).
+ As instâncias só podem ser iniciadas usando AMIs permitidas.

**Desabilitado**

Quando as AMIs permitidas estão desabilitadas: 
+ As `ImageCriteria` não são aplicadas.
+ Nenhuma restrição é imposta à descoberta ou ao uso da AMI. 

**Modo de auditoria**

 No modo de auditoria:
+ Os `ImageCriteria` são aplicados, mas nenhuma restrição é imposta à descoberta ou ao uso da AMI.
+ No console do EC2, para cada AMI, o campo **Imagem permitida** exibe **Sim** ou **Não** para indicar se a AMI será detectável e estará disponível para os usuários na conta quando AMIs permitidas estiver habilitado.
+ Na linha de comando, a resposta para a operação `describe-image` inclui `"ImageAllowed": true` ou `"ImageAllowed": false` para indicar se a AMI será detectável e estará disponível para os usuários na conta quando AMIs permitidas estiver habilitado.
+ No console do EC2, o Catálogo de AMIs exibirá **Não permitido** ao lado de AMIs que não serão detectáveis ou estarão disponíveis para os usuários na conta quando AMIs permitidas estiver habilitado.

## Práticas recomendadas para a implementação de AMIs permitidas
<a name="best-practice-for-implementing-allowed-amis"></a>

Ao implementar AMIs permitidas, considere estas práticas recomendadas para garantir uma transição tranquila e minimizar possíveis interrupções em seu ambiente da AWS.

1. **Habilitar o modo de auditoria**

   Comece ativando AMIs permitidas no modo de auditoria. Esse estado permite que você veja quais são as AMIs que seriam afetadas por seus critérios sem realmente restringir o acesso, fornecendo um período de avaliação sem riscos.

1. **Definir critérios de AMIs permitidas**

   Estabeleça cuidadosamente quais provedores de AMI estão alinhados com as políticas de segurança, os requisitos de conformidade e as necessidades operacionais da sua organização.
**nota**  
Ao usar serviços gerenciados da AWS, como Amazon ECS ou o Amazon EKS ou as instâncias gerenciadas do AWS Lambda, recomendamos especificar o alias da `amazon` para permitir as AMIs criadas pela AWS. Esses serviços dependem das AMIs publicadas pela Amazon para iniciar instâncias.   
Tenha cuidado ao definir restrições de `CreationDateCondition` para as AMIs. Definir condições de data excessivamente restritivas (por exemplo, as AMIs devem ter menos de 5 dias) pode causar falhas na inicialização da instância se as AMIs da AWS ou de outros provedores não forem atualizadas dentro do prazo especificado.  
Recomendamos emparelhar `ImageNames` com `ImageProviders` para ter mais controle e especificidade. O uso de `ImageNames` sozinho pode não identificar exclusivamente uma AMI.

1. **Verificar o impacto nos processos de negócios esperados**

   É possível usar o console ou a CLI para identificar instâncias que foram iniciadas com AMIs e que não atendem aos critérios especificados. Essas informações podem orientar sua decisão de atualizar suas configurações de inicialização para usar AMIs em conformidade (por exemplo, especificar uma AMI diferente em um modelo de inicialização) ou ajustar seus critérios para permitir essas AMIs.

   Console: use a regra [ec2-instance-launched-with-allowed-ami](https://docs.aws.amazon.com/config/latest/developerguide/ec2-instance-launched-with-allowed-ami.html) do AWS Config para verificar se as instâncias em execução ou paradas foram iniciadas com AMIs que atendem aos seus critérios de AMIs permitidas. A regra é **NON\_COMPLIANT** quando uma AMI não atende aos critérios de AMIs permitidas e **COMPLIANT** quando atende. A regra apenas funciona quando a configuração de AMIs permitidas está definida como **habilitada** ou **modo de auditoria**.

   CLI: execute o comando [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) e filtre a resposta para identificar quaisquer instâncias que foram iniciadas com AMIs que não atendem aos critérios especificados.

   Para obter instruções sobre o console e a CLI, consulte [Encontrar instâncias inicializadas de AMIs que não são permitidas](manage-settings-allowed-amis.md#identify-instances-with-allowed-AMIs).

1. **Habilitar AMIs permitidas**

   Depois de confirmar que os critérios não afetarão de forma adversa os processos de negócios esperados, habilite AMIs permitidas.

1. **Monitorar as execuções de instâncias**

   Continue monitorando as execuções de instâncias a partir de AMIs em ssuas aplicações e nos serviços da AWS gerenciados que você usa, como o Amazon EMR, Amazon ECR, Amazon EKS e AWS Elastic Beanstalk. Verifique se há problemas inesperados e faça os ajustes necessários nos critérios de AMIs permitidas.

1. **Testar novas AMIs**

   Para testar AMIs de terceiros que não estejam em conformidade com suas configurações atuais de AMIs permitidas, a AWS recomenda as abordagens a seguir:
   + Use uma Conta da AWS separada: crie uma conta sem acesso aos recursos essenciais para os seus negócios. Garanta que a configuração de AMIs permitidas não esteja habilitada nessa conta ou que as AMIs que você deseja testar sejam explicitamente permitidas, para que você possa testá-las. 
   + Teste em outra Região da AWS: use uma região em que as AMIs de terceiros estejam disponíveis, mas em que você ainda não tenha habilitado as configurações de AMIs permitidas. 

   Essas abordagens ajudam a garantir que seus recursos essenciais para os negócios permaneçam seguros durante o teste de novas AMIs.

## Permissões obrigatórias do IAM
<a name="iam-permissions-for-allowed-amis"></a>

Para usar o atributo de AMIs permitidas, você precisa das seguintes permissões do IAM:
+ `GetAllowedImagesSettings`
+ `EnableAllowedImagesSettings`
+ `DisableAllowedImagesSettings`
+ `ReplaceImageCriteriaInAllowedImagesSettings`