

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# CloudFormation pilha de ingestão: exemplos de validadores CFN
<a name="ex-cfn-ingest-validator"></a>

Esses exemplos podem ajudar você a preparar seu modelo para uma ingestão bem-sucedida.

## Validação de formato
<a name="cfn-validator-templates"></a>

Verifique se o modelo contém uma seção “Recursos” e se todos os recursos definidos nele têm um valor de “Tipo”.

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description" : "Create a SNS topic",
  "Resources": {
    "SnsTopic": {
      "Type": "AWS::SNS::Topic"
    }
  }
}
```

Valide se as chaves raiz do modelo são permitidas. As chaves raiz permitidas são:

```
[
  "AWSTemplateFormatVersion",  
  "Description",  
  "Mappings",  
  "Parameters",  
  "Conditions",  
  "Resources",  
  "Rules",  
  "Outputs",  
  "Metadata"
]
```

## Validação manual da automação gerenciada
<a name="cfn-validator-ex-man"></a>

Se o modelo contiver os seguintes recursos, a validação automática falhará e você precisará de uma revisão manual.

As políticas mostradas são áreas de alto risco do ponto de vista da segurança. Por exemplo, uma política de bucket do S3 que permite que qualquer pessoa, exceto usuários ou grupos específicos, crie objetos ou escreva permissões é extremamente perigosa. Portanto, validamos as políticas e aprovamos ou negamos com base no conteúdo, e essas políticas não podem ser criadas automaticamente. Estamos investigando possíveis abordagens para resolver esse problema.

Atualmente, não temos validação automática dos seguintes recursos.

```
[
    "S3::BucketPolicy",
    "SNS::TopicPolicy",
    "SQS::QueuePolicy"
]
```

## Validação de parâmetros
<a name="cfn-validator-examples-param"></a>

Valide isso se um parâmetro do modelo não tiver um valor fornecido, ele deverá ter um valor padrão.

## Validação de atributos de recursos
<a name="cfn-validator-examples-resource-atts"></a>

Verificação de atributos obrigatória: certos atributos devem existir para determinados tipos de recursos.
+ “VPCOptions" deve existir em `AWS::OpenSearch::Domain`
+ “CludsterSubnetGroupName" deve existir em `AWS::Redshift::Cluster`

```
{
    "AWS::OpenSearch::Domain": [
      "VPCOptions"
    ],
    "AWS::Redshift::Cluster": [
      "ClusterSubnetGroupName"
    ]
}
```

Verificação de atributos não permitidos: certos atributos \*não\* devem existir para determinados tipos de recursos.
+ “SecretString" não deve existir em "AWS::SecretsManager::Secret”
+ “MongoDbSettings" não deve existir em "AWS::DMS::Endpoint”

```
{
  "AWS::SecretsManager::Secret": [
    "SecretString"  
  ],  
  "AWS::DMS::Endpoint": [
    "MongoDbSettings"  
  ]
}
```

Verificação de parâmetros SSM: Para atributos na lista a seguir, os valores devem ser especificados por meio do Secrets Manager ou do Systems Manager Parameter Store (Secure String Parameter):

```
{
  "RDS::DBInstance": [
    "MasterUserPassword",   
    "TdeCredentialPassword"  
  ],  
  "RDS::DBCluster": [
    "MasterUserPassword"  
  ],  
  "ElastiCache::ReplicationGroup": [
    "AuthToken"  
  ],  
  "DMS::Certificate": [
    "CertificatePem",    
    "CertificateWallet" 
  ],  
  "DMS::Endpoint": [
    "Password"  
  ],
  "CodePipeline::Webhook": {
    "AuthenticationConfiguration": [
        "SecretToken"  
    ]
  },
  "DocDB::DBCluster": [
    "MasterUserPassword"
  ]
},
```

Alguns atributos devem estar em conformidade com determinados padrões; por exemplo, nomes de perfil de instância do IAM não devem começar com [prefixos reservados do AMS](https://docs.aws.amazon.com/managedservices/latest/userguide/ams-reserved-prefixes), e o valor do atributo deve corresponder ao regex específico, conforme mostrado:

```
{
    "AWS::EC2::Instance": {
      "IamInstanceProfile": [
        "^(?!arn:aws:iam|ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+",
        "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+"
      ]
    },
    "AWS::AutoScaling::LaunchConfiguration": {
      "IamInstanceProfile": [
        "^(?!arn:aws:iam|ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+",
        "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+"
      ]
    },
    "AWS::EC2::LaunchTemplate": {
      "LaunchTemplateData.IamInstanceProfile.Name": [
        "^(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+"
      ],
      "LaunchTemplateData.IamInstanceProfile.Arn": [
        "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile\/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+"
      ]
    }
}
```

## Validação de recursos
<a name="cfn-validator-examples-resources"></a>

Somente os recursos da lista de permissões podem ser especificados no modelo; esses recursos estão descritos em[Recursos compatíveis](cfn-ingest-supp-services.md).

Pilhas EC2 e grupos de Auto Scaling ASGs () não são permitidos na mesma pilha devido a limitações de aplicação de patches.

## Validação da regra de entrada do grupo de segurança
<a name="cfn-validator-examples-sg-ingress"></a>
+ Para solicitações provenientes dos tipos de alteração CFN Ingest Create ou Stack Update CT:
  + Se (`IpProtocol`é tcp ou 6) AND (a porta é 80 ou 443), não há restrições em relação ao valor `CidrIP`
  + Caso contrário, `CidrIP` não pode ser 0.0.0.0/0
+ Para solicitações provenientes do Service Catalog (produtos do Service Catalog):
  + Além da validação do tipo de alteração do CFN Ingest Create ou Stack Update CT, a porta `management_ports` com o protocolo de entrada só `ip_protocols` pode ser acessada via: `allowed_cidrs`

    ```
    {
          "ip_protocols": ["tcp", "6", "udp", "17"],
          "management_ports": [22, 23, 389, 636, 1494, 1604, 2222, 3389, 5900, 5901, 5985, 5986],
          "allowed_cidrs": ["10.0.0.0/8", "100.64.0.0/10", "172.16.0.0/12", "192.168.0.0/16"]
      }
    ```