

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# CloudFormation 取り込みスタック: CFN 検証の例
<a name="ex-cfn-ingest-validator"></a>

これらの例は、取り込みを成功させるためにテンプレートを準備するのに役立ちます。

## 形式検証
<a name="cfn-validator-templates"></a>

テンプレートに「リソース」セクションが含まれ、テンプレートの下に定義されているすべてのリソースに「タイプ」値があることを確認します。

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

テンプレートのルートキーが許可されていることを確認します。許可されるルートキーは次のとおりです。

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

## 手動マネージドオートメーションの検証
<a name="cfn-validator-ex-man"></a>

テンプレートに次のリソースが含まれている場合、自動検証は失敗し、手動によるレビューが必要になります。

表示されるポリシーは、セキュリティの観点から見ると高リスク領域です。たとえば、特定のユーザーまたはグループ以外のユーザーがオブジェクトを作成したり、アクセス許可を書き込んだりすることを許可する S3 バケットポリシーは、非常に危険です。そのため、ポリシーを検証し、内容に基づいて承認または拒否します。これらのポリシーは自動作成できません。この問題に対応するための可能なアプローチを調査しています。

現在、以下のリソースに関する自動検証はありません。

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

## パラメータ検証
<a name="cfn-validator-examples-param"></a>

テンプレートパラメータに値が指定されていない場合は、デフォルト値を指定する必要があります。

## リソース属性の検証
<a name="cfn-validator-examples-resource-atts"></a>

必須属性チェック: 特定のリソースタイプには、特定の属性が存在している必要があります。
+ VPCOptions」は に存在する必要があります `AWS::OpenSearch::Domain`
+ CludsterSubnetGroupName」は に存在する必要があります `AWS::Redshift::Cluster`

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

許可されていない属性チェック: 特定の属性は、特定のリソースタイプに \*存在してはいけません\*。
+ 「SecretString」は「AWS::SecretsManager::Secret」に存在しません
+ 「MongoDbSettings」は「AWS::DMS::Endpoint」に存在してはいけません

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

SSM パラメータチェック: 次のリストの属性の場合、値は Secrets Manager または Systems Manager パラメータストア (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"
  ]
},
```

一部の属性は特定のパターンに準拠する必要があります。たとえば、IAM インスタンスプロファイル名は [AMS 予約プレフィックス](https://docs.aws.amazon.com/managedservices/latest/userguide/ams-reserved-prefixes)で始まることはできません。属性値は、次に示すように特定の正規表現と一致する必要があります。

```
{
    "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).+"
      ]
    }
}
```

## リソースの検証
<a name="cfn-validator-examples-resources"></a>

テンプレートでは、許可リストに登録されたリソースのみを指定できます。これらのリソースについては、「」を参照してください[サポートされているリソース](cfn-ingest-supp-services.md)。

パッチ適用の制限により、EC2 スタックと Auto Scaling グループ (ASGs) は同じスタックで許可されません。

## セキュリティグループの進入ルールの検証
<a name="cfn-validator-examples-sg-ingress"></a>
+ CFN Ingest Create または Stack Update CT 変更タイプからのリクエストの場合:
  + (`IpProtocol` が tcp または 6) かつ (ポートが 80 または 443) の場合、`CidrIP`値に制限はありません。
  + それ以外の場合、 を 0.0.0.0/0 に`CidrIP`することはできません。
+ Service Catalog (Service Catalog 製品) からのリクエストの場合:
  + CFN Ingest Create または Stack Update CT の変更タイプ検証に加えて、 のプロトコル`management_ports`を持つ のポートには、 経由で`ip_protocols`のみアクセスできます`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"]
      }
    ```