CloudFormation 取り込みスタック: CFN 検証の例 - AMS Advanced Application デベロッパーガイド

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

CloudFormation 取り込みスタック: CFN 検証の例

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

形式検証

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

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

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

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

手動レビューで必要な検証

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

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

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

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

パラメータ検証

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

リソース属性の検証

必須属性チェック: 特定のリソースタイプには、特定の属性が存在している必要があります。

  • 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 予約プレフィックスで始まることはできません。属性値は、次に示すように特定の正規表現と一致する必要があります。

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

リソースの検証

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

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

セキュリティグループの進入ルールの検証

  • 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"] }