CloudFormation 擷取堆疊:CFN 驗證器範例 - AMS 進階應用程式開發人員指南

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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

不允許的屬性檢查:某些資源類型必須 *not* 存在。

  • 「SecretString」不得存在於「AWS::SecretsManager::Secret」中

  • 「MongoDbSettings」不得存在於「AWS::DMS::Endpoint」中

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

SSM 參數檢查:對於下列清單中的屬性,必須透過 Secrets Manager 或 Systems Manager 參數存放區 (安全字串參數) 指定值:

{ "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 預留字首開頭,且屬性值必須符合特定 regex,如下所示:

{ "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 擷取建立或堆疊更新 CT 變更類型的請求:

    • 如果 (IpProtocol 是 tcp 或 6) 和 (連接埠是 80 或 443) ,則CidrIP值沒有限制

    • 否則, CidrIP不能是 0.0.0.0/0

  • 對於來自 Service Catalog (Service Catalog 產品) 的請求:

    • 除了 CFN 擷取建立或堆疊更新 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"] }