

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

# CloudFormation 擷取準則、最佳實務和限制
<a name="cfn-author-templates"></a>

若要讓 AMS 處理您的 CloudFormation 範本，有一些指導方針和限制。

## 指導方針
<a name="cfn-ingest-tips"></a>

若要在執行 CloudFormation 擷取時減少 CloudFormation 錯誤，請遵循下列準則：
+ **請勿在範本中嵌入登入資料或其他敏感資訊** – CloudFormation 範本會顯示在 CloudFormation 主控台中，因此您不想在範本中嵌入登入資料或敏感資料。範本不能包含敏感資訊。只有當您使用 AWS Secrets Manager 做為 值時，才允許下列資源：
  + `AWS::RDS::DBInstance` - 【MasterUserPassword，TdeCredentialPassword】
  + `AWS::RDS::DBCluster` - 【MasterUserPassword】
  + `AWS::ElastiCache::ReplicationGroup` - 【AuthToken】
**注意**  
如需有關在資源屬性中使用 AWS Secrets Manager 秘密的資訊，請參閱[如何使用 AWS CloudFormation 範本和使用動態參考指定範本值來建立和擷取 Secrets Manager 中管理的 AWS 秘密](https://aws.amazon.com/blogs/security/how-to-create-and-retrieve-secrets-managed-in-aws-secrets-manager-using-aws-cloudformation-template/)。 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)
+ **使用 Amazon RDS 快照來建立 RDS 資料庫執行個體** – 透過這樣做，您不必提供 MasterUserPassword。
+ 如果您提交的範本包含 IAM 執行個體描述檔，其字首必須是 'customer'。例如，使用名稱為 'example-instance-profile' 的執行個體描述檔會導致失敗。反之，請使用名稱為 'customer-example-instance-profile' 的執行個體描述檔。
+ **請勿在 - 【UserData】 中包含任何敏感資料`AWS::EC2::Instance`**。 UserData UserData 不應包含密碼、API 金鑰或任何其他敏感資料。這種類型的資料可以加密並存放在 S3 儲存貯體中，並使用 UserData 下載到執行個體。
+ **使用 CloudFormation 範本建立 IAM 政策受到限制的支援** – IAM 政策必須由 AMS SecOps 審核和核准。目前我們僅支援使用包含預先核准許可的內嵌政策來部署 IAM 角色。在其他情況下，無法使用 CloudFormation 範本建立 IAM 政策，因為這會覆寫 AMS SecOps 程序。
+ **不支援 SSH KeyPairs ** – Amazon EC2 執行個體必須透過 AMS 存取管理系統存取。AMS RFC 程序會驗證您的身分。您無法在 CloudFormation 範本中包含 SSH 金鑰對，因為您沒有建立 SSH 金鑰對和覆寫 AMS 存取管理模型的許可。
+ **安全群組傳入規則受到限制** – 您無法擁有 0.0.0.0/0 的來源 CIDR 範圍，或具有 TCP 連接埠的可公開路由地址空間，而 TCP 連接埠不是 80 或 443。
+ **撰寫 CloudFormation 資源範本時，請遵循 CloudFormation 準則** – 請參閱該資源的 *AWS CloudFormation 使用者指南*，以確保您使用正確的資源資料類型/屬性名稱。例如，AWS::EC2::Instance 資源中 SecurityGroupIds 屬性的資料類型是「字串值清單」，因此 【「sg-aaaaaaaaaaa」】是正常的 （使用括號），但「sg-aaaaaaa 不是 （不使用括號）。

  如需詳細資訊，請參閱 [AWS 資源和屬性類型參考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)。
+ **將自訂 CloudFormation 範本設定為使用 AMS CloudFormation 擷取 CT 中定義的參數** – 當您將 CloudFormation 範本設定為使用 AMS CloudFormation 擷取 CT 中定義的參數時，您可以使用 管理 \$1 自訂堆疊 \$1 CloudFormation 範本的堆疊 \$1 更新 CT (ct-361tlo1k7339x)，在 CT 輸入中提交具有變更參數值的 CloudFormation 範本，以 CloudFormation 建立類似的堆疊。如需範例，請參閱「[CloudFormation 擷取範例：定義資源](cfn-ingest-ex-define-resource.md)」。
+ **具有預先簽章 URL 的 Amazon S3 儲存貯體端點無法過期** – 如果您使用具有預先簽章 URL 的 Amazon S3 儲存貯體端點，請確認預先簽章的 Amazon S3 URL 尚未過期。使用過期的預先簽章 Amazon S3 儲存貯體 URL 提交的 CloudFormation 擷取 RFC 會遭到拒絕。
+ **Wait Condition 需要訊號邏輯** – Wait Condition 用於協調堆疊資源建立與堆疊建立外部的組態動作。如果您在範本中使用等待條件資源， 會 CloudFormation 等待成功訊號，如果未發出成功訊號數量，則會將堆疊建立標記為失敗。如果您使用等待條件資源，則需要有訊號的邏輯。如需詳細資訊，請參閱[在範本中建立等待條件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html)。

# 最佳實務
<a name="cfn-ingest-best-practices"></a>

以下是您可以使用 AMS CloudFormation 擷取程序來遷移資源的一些最佳實務：
+ **在一個 CT 中提交 IAM 和其他政策相關資源** – 如果您可以使用 CloudFormation Ingest 等自動化 CTs 來部署 IAM 角色，我們建議您這樣做。在其他情況下，AMS 建議您收集所有 IAM 或其他政策相關資源，並將其提交至單一管理 \$1 其他 \$1 其他 \$1 建立變更類型 (ct-1e1xtak34nx76)。例如，合併所需的所有 IAM 角色、IAM Amazon EC2 執行個體描述檔、現有 IAM 角色的 IAM 政策更新、Amazon S3 儲存貯體政策、Amazon SNS/Amazon SQS 政策等，並提交 ct-1e1xtak34nx76 RFC，以便在未來的 CloudFormation 擷取範本中直接參考這些預先存在的資源。
+ **EC2 執行個體已引導並成功加入網域** – 這是自動完成的最佳實務。為了確保透過 CloudFormation 擷取堆疊啟動的 Amazon EC2 執行個體已引導並成功加入網域，AMS 包含適用於 Auto Scaling 群組資源的 CreationPolicy 和 UpdatePolicy （亦即，如果這些政策尚未存在）。
+ **必須指定 Amazon RDS 資料庫執行個體參數** – 透過 CloudFormation 擷取建立 Amazon RDS 資料庫時，您必須指定 `DBSnapshotIdentifier` 參數，才能從先前的資料庫快照還原。這是必要的，因為 CloudFormation 擷取目前不會處理敏感資料。

如需如何將 CloudFormation 範本用於 AMS CloudFormation 範本擷取的範例，請參閱 [CloudFormation 擷取：範例](cfn-ingest-examples.md)。

# 範本驗證
<a name="cfn-ingest-validate"></a>

您可以在將 CloudFormation 範本提交至 AMS 之前進行自我驗證。

提交至 AMS CloudFormation 擷取的範本經過驗證，以確保可在 AMS 帳戶中安全地部署。驗證程序會檢查下列項目：
+ **支援的資源** – 僅使用 AMS CloudFormation 擷取支援的資源。如需詳細資訊，請參閱[支援的資源](cfn-ingest-supp-services.md)。
+ **支援的 AMIs **– 範本中的 AMI 是 AMS 支援的 AMI。如需 AMS AMIs的詳細資訊，請參閱 [AMS Amazon Machine Image AMIs)](ams-amis.md)。
+ **AMS 共用服務子網路** – 範本不會嘗試在 AMS 共用服務子網路中啟動資源。
+ **資源政策** – 沒有過度寬鬆的資源政策，例如可公開讀取或可寫入的 S3 儲存貯體政策。AMS 不允許公開讀取或寫入 S3 儲存貯體 AWS 帳戶。

## 使用 CloudFormation Linter 驗證
<a name="cfn-ingest-validate-linter"></a>

您可以使用 CloudFormation Linter 工具，在將 CloudFormation 範本提交至 AMS 之前進行自我驗證。

 CloudFormation Linter 工具是驗證 CloudFormation 範本的最佳方式，因為它可驗證資源/屬性名稱、資料類型和函數。如需詳細資訊，請參閱 [aws-cloudformation/cfn-python-lint](https://github.com/aws-cloudformation/cfn-python-lint)。

先前顯示的範本 CloudFormation Linter 輸出如下所示：

```
$ cfn-lint -t ./testtmpl.json
E3002 Invalid Property Resources/SNSTopic/Properties/Name
./testtmpl.json:6:9
```

為了協助離線驗證 CloudFormation 範本，AMS 已為 CloudFormation Linter 工具開發一組可插入的自訂驗證規則。它們位於 AMS 主控台的**開發人員資源**頁面上。

請依照下列步驟使用擷取 CloudFormation 前驗證指令碼：

1. 安裝 CloudFormation Linter 工具。如需安裝說明，請參閱 [aws-cloudformation / cfn-lint ](https://github.com/aws-cloudformation/cfn-python-lint)。

1. 下載具有驗證指令碼的 .zip 檔案：

    [CFN Lint 自訂規則](https://github.com/awslabs/aws-managed-services/tree/main/cfn-lint-custom-rules)。

1. 將連接的規則解壓縮到您選擇的目錄。

1. 執行下列命令來驗證您的 CloudFormation 範本：

   ```
   cfn-lint --template {TEMPLATE_FILE} --append-rules {DIRECTORY_WITH_CUSTOM_RULES}
   ```

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

不允許的屬性檢查：某些資源類型必須 \$1not\$1 存在。
+ 「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 預留字首](https://docs.aws.amazon.com/managedservices/latest/userguide/ams-reserved-prefixes)開頭，且屬性值必須符合特定 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).+"
      ]
    }
}
```

## 資源驗證
<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 擷取建立或堆疊更新 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"]
      }
    ```

# 限制
<a name="cfn-limitations"></a>

AMS CloudFormation 擷取程序目前不支援下列功能。


+ **YAML** – 不支援。僅支援 JSON 型 CloudFormation 範本。
+ **巢狀堆疊** – 反之，請架構您的應用程式基礎設施以使用單一範本。或者，您也可以利用跨堆疊參考，跨多個堆疊分隔資源，其中一個資源與另一個資源有相依性。如需詳細資訊，請參閱[逐步解說：請參閱另一個 AWS CloudFormation Stack 中的資源輸出](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html)。
+ **CloudFormation 堆疊集** – 由於安全性影響，不支援。
+ **使用 CloudFormation 範本建立 IAM 資源** – 由於安全性影響，僅支援 IAM 角色。
+ **敏感資料** – 不支援。請勿在範本或參數值中包含敏感資料。如果您需要參考敏感資料，請使用 Secrets Manager 來存放和擷取這些值。如需有關在資源屬性中使用 AWS Secrets Manager 秘密的資訊，請參閱[如何使用 AWS CloudFormation 範本和使用動態參考指定範本值，建立和擷取在 AWS Secrets Manager 中管理的秘密 AWS CloudFormation](https://aws.amazon.com/blogs/security/how-to-create-and-retrieve-secrets-managed-in-aws-secrets-manager-using-aws-cloudformation-template/)。 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)

# 支援的資源
<a name="cfn-ingest-supp-services"></a>

AMS CloudFormation 擷取程序支援下列 AWS 資源。

## CloudFormation 擷取堆疊：支援的資源
<a name="ex-cfn-ingest-supp-resources"></a>

AMS 工作負載擷取必須支援執行個體作業系統。僅支援此處列出的 AWS 資源。
+  [Amazon API Gateway](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ApiGateway.html)
  + AWS::ApiGateway::Account
  + AWS::ApiGateway::ApiKey
  + AWS::ApiGateway::Authorizer
  + AWS::ApiGateway::BasePathMapping
  + AWS::ApiGateway::ClientCertificate
  + AWS::ApiGateway::Deployment
  + AWS::ApiGateway::DocumentationPart
  + AWS::ApiGateway::DocumentationVersion
  + AWS::ApiGateway::DomainName
  + AWS::ApiGateway::GatewayResponse
  + AWS::ApiGateway::Method
  + AWS::ApiGateway::Model
  + AWS::ApiGateway::RequestValidator
  + AWS::ApiGateway::Resource
  + AWS::ApiGateway::RestApi
  + AWS::ApiGateway::Stage
  + AWS::ApiGateway::UsagePlan
  + AWS::ApiGateway::UsagePlanKey
  + AWS::ApiGateway::VpcLink
+  [Amazon API Gateway V2](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ApiGatewayV2.html)
  + AWS::ApiGatewayV2::Api
  + AWS::ApiGatewayV2::ApiGatewayManagedOverrides
  + AWS::ApiGatewayV2::ApiMapping
  + AWS::ApiGatewayV2::Authorizer
  + AWS::ApiGatewayV2::Deployment
  + AWS::ApiGatewayV2::DomainName
  + AWS::ApiGatewayV2::Integration
  + AWS::ApiGatewayV2::IntegrationResponse
  + AWS::ApiGatewayV2::Model
  + AWS::ApiGatewayV2::Route
  + AWS::ApiGatewayV2::RouteResponse
  + AWS::ApiGatewayV2::Stage
  + AWS::ApiGatewayV2::VpcLink
+  [AWS AppSync](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AppSync.html)
  + AWS::AppSync::ApiCache
  + AWS::AppSync::ApiKey
  + AWS::AppSync::DataSource
  + AWS::AppSync::FunctionConfiguration
  + AWS::AppSync::GraphQLApi
  + AWS::AppSync::GraphQLSchema
  + AWS::AppSync::Resolver
+  [Amazon Athena](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Athena.html)
  + AWS::Athena::NamedQuery
  + AWS::Athena::WorkGroup
+  [AWS Backup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Backup.html)
  + AWS::Backup::BackupVault
+ [Amazon CloudFront](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-reference-cloudfront.html)
  + AWS::CloudFront::Distribution
  + AWS::CloudFront::CloudFrontOriginAccessIdentity
  + AWS::CloudFront::StreamingDistribution
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-reference-cloudwatch.html)
  + AWS::CloudWatch::Alarm
  + AWS::CloudWatch::AnomalyDetector
  + AWS::CloudWatch::CompositeAlarm
  + AWS::CloudWatch::Dashboard
  + AWS::CloudWatch::InsightRule
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Logs.html)
  + AWS::Logs::LogGroup
  + AWS::Logs::LogStream
  + AWS::Logs::MetricFilter
  + AWS::Logs::SubscriptionFilter
+  [Amazon Cognito](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Cognito.html)
  + AWS::Cognito::IdentityPool
  + AWS::Cognito::IdentityPoolRoleAttachment
  + AWS::Cognito::UserPool
  + AWS::Cognito::UserPoolClient
  + AWS::Cognito::UserPoolDomain
  + AWS::Cognito::UserPoolGroup
  + AWS::Cognito::UserPoolIdentityProvider
  + AWS::Cognito::UserPoolResourceServer
  + AWS::Cognito::UserPoolRiskConfigurationAttachment
  + AWS::Cognito::UserPoolUICustomizationAttachment
  + AWS::Cognito::UserPoolUser
  + AWS::Cognito::UserPoolUserToGroupAttachment
+  [Amazon DocumentDB](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_DocDB.html)
  + AWS::DocDB::DBCluster
  + AWS::DocDB::DBClusterParameterGroup
  + AWS::DocDB::DBInstance
  + AWS::DocDB::DBSubnetGroup
+  [Amazon DynamoDB](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_DynamoDB.html)
  + AWS::DynamoDB::Table
+ [Amazon EC2](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_EC2.html)
  + AWS::EC2::Volume
  + AWS::EC2::VolumeAttachment
  + AWS::EC2::Instance
  + AWS::EC2::EIP
  + AWS::EC2::EIPAssociation
  + AWS::EC2::NetworkInterface
  + AWS::EC2::NetworkInterfaceAttachment
  + AWS::EC2::SecurityGroup
  + AWS::EC2::SecurityGroupIngress
  + AWS::EC2::SecurityGroupEgress
  + AWS::EC2::LaunchTemplate
+  [AWS Batch](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Batch.html)
  + AWS::Batch::ComputeEnvironment
  + AWS::Batch::JobDefinition
  + AWS::Batch::JobQueue
+ [Amazon Elastic Container Registry (ECR)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ECR.html)
  + AWS::ECR::Repository
+ [Amazon Elastic Container Service (ECS) (Fargate)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_EFS.html)
  + AWS::ECS::CapacityProvider
  + AWS::ECS::Cluster
  + AWS::ECS::PrimaryTaskSet
  + AWS::ECS::Service
  + AWS::ECS::TaskDefinition
  + AWS::ECS::TaskSet
+ [Amazon Elastic File System (EFS)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_EFS.html)
  + AWS::EFS::FileSystem
  + AWS::EFS::MountTarget
+ [Amazon ElastiCache](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElastiCache.html)
  + AWS::ElastiCache::CacheCluster
  + AWS::ElastiCache::ParameterGroup
  + AWS::ElastiCache::ReplicationGroup
  + AWS::ElastiCache::SecurityGroup
  + AWS::ElastiCache::SecurityGroupIngress
  + AWS::ElastiCache::SubnetGroup
+ [Amazon EventBridge](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Events.html)
  + AWS::Events::EventBus
  + AWS::Events::EventBusPolicy
  + AWS::Events::Rule
+ [Amazon FSx](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_FSx.html)
  + AWS::FSx::FileSystem
+ [Amazon Inspector](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Inspector.html)
  + AWS::Inspector::AssessmentTarget
  + AWS::Inspector::AssessmentTemplate
  + AWS::Inspector::ResourceGroup
+ [Amazon Kinesis Data Analytics](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_KinesisAnalytics.html)
  + AWS::KinesisAnalytics::Application
  + AWS::KinesisAnalytics::ApplicationOutput
  + AWS::KinesisAnalytics::ApplicationReferenceDataSource
+  [Amazon Kinesis Data Firehose](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_KinesisFirehose.html)
  + AWS::KinesisFirehose::DeliveryStream
+ [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Kinesis.html)
  + AWS::Kinesis::Stream
  + AWS::Kinesis::StreamConsumer
+ [Amazon MQ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AmazonMQ.html)
  + AWS::AmazonMQ::Broker
  + AWS::AmazonMQ::Configuration
  + AWS::AmazonMQ::ConfigurationAssociation
+ [Amazon OpenSearch](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_OpenSearchService.html)
  + AWS::OpenSearchService::Domain
+ [Amazon Relational Database Service (RDS)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_RDS.html)
  + AWS::RDS::DBCluster
  + AWS::RDS::DBClusterParameterGroup
  + AWS::RDS::DBInstance
  + AWS::RDS::DBParameterGroup
  + AWS::RDS::DBSubnetGroup
  + AWS::RDS::EventSubscription
  + AWS::RDS::OptionGroup
+ [Amazon Route 53](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Route53.html)
  + AWS::Route53::HealthCheck
  + AWS::Route53::HostedZone
  + AWS::Route53::RecordSet
  + AWS::Route53::RecordSetGroup
  + AWS::Route53Resolver::ResolverRule
  + AWS::Route53Resolver::ResolverRuleAssociation
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_S3.html)
  + AWS::S3::Bucket
+ [Amazon Sagemaker](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SageMaker.html)
  + AWS::SageMaker::CodeRepository
  + AWS::SageMaker::Endpoint
  + AWS::SageMaker::EndpointConfig
  + AWS::SageMaker::Model
  + AWS::SageMaker::NotebookInstance
  + AWS::SageMaker::NotebookInstanceLifecycleConfig
  + AWS::SageMaker::Workteam
+  [Amazon Simple Email Service (SES)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SES.html)
  + AWS::SES::ConfigurationSet
  + AWS::SES::ConfigurationSetEventDestination
  + AWS::SES::ReceiptFilter
  + AWS::SES::ReceiptRule
  + AWS::SES::ReceiptRuleSet
  + AWS::SES::Template
+  [Amazon SimpleDB](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SDB.html)
  + AWS::SDB::Domain
+ [Amazon SNS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SNS.html)
  + AWS::SNS::Subscription
  + AWS::SNS::Topic
+ [Amazon SQS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SQS.html)
  + AWS::SQS::Queue
+  [Amazon WorkSpaces](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_WorkSpaces.html)
  + AWS::WorkSpaces::Workspace
+ [Application AutoScaling](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ApplicationAutoScaling.html)
  + AWS::ApplicationAutoScaling::ScalableTarget
  + AWS::ApplicationAutoScaling::ScalingPolicy
+ [Amazon EC2 AutoScaling](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AutoScaling.html)
  + AWS::AutoScaling::AutoScalingGroup
  + AWS::AutoScaling::LaunchConfiguration
  + AWS::AutoScaling::LifecycleHook
  + AWS::AutoScaling::ScalingPolicy
  + AWS::AutoScaling::ScheduledAction
+ [AWS Certificate Manager](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-certificatemanager-certificate.html)
  + AWS::CertificateManager::Certificate
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_CloudFormation.html)
  + AWS::CloudFormation::CustomResource
  + AWS::CloudFormation::Designer
  + AWS::CloudFormation::WaitCondition
  + AWS::CloudFormation::WaitConditionHandle
+ [AWS CodeBuild](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_CodeBuild.html)
  + AWS::CodeBuild::Project
  + AWS::CodeBuild::ReportGroup
  + AWS::CodeBuild::SourceCredential
+  [AWS CodeCommit](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_CodeCommit.html)
  + AWS::CodeCommit::Repository
+ [AWS CodeDeploy](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_CodeDeploy.html)
  + AWS::CodeDeploy::Application
  + AWS::CodeDeploy::DeploymentConfig
  + AWS::CodeDeploy::DeploymentGroup
+ [AWS CodePipeline](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_CodePipeline.html)
  + AWS::CodePipeline::CustomActionType
  + AWS::CodePipeline::Pipeline
  + AWS::CodePipeline::Webhook
+  [AWS Database Migration Service (DMS)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_DMS.html)
  + AWS::DMS::Certificate
  + AWS::DMS::Endpoint
  + AWS::DMS::EventSubscription
  + AWS::DMS::ReplicationInstance
  + AWS::DMS::ReplicationSubnetGroup
  + AWS::DMS::ReplicationTask

  不允許 AWS::DMS::Endpoint 資源中的 MongoDbSettings 屬性。

  下列屬性只有在 AWS Secrets Manager 解析時才允許：AWS::DMS::Certificate 資源中的 CertificatePem 和 CertificateWallet 屬性，以及 AWS::DMS::Endpoint 資源中的 Password 屬性。
+ [AWS Elastic Load Balancing - Application Load Balancer/Network Load Balancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElasticLoadBalancingV2.html)
  + AWS::ElasticLoadBalancingV2::Listener
  + AWS::ElasticLoadBalancingV2::ListenerCertificate
  + AWS::ElasticLoadBalancingV2::ListenerRule
  + AWS::ElasticLoadBalancingV2::LoadBalancer
  + AWS::ElasticLoadBalancingV2::TargetGroup
+ [AWS Elastic Load Balancing - Classic Load Balancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElasticLoadBalancing.html)
  + AWS::ElasticLoadBalancing::LoadBalancer
+  [AWS Elemental MediaConvert](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_MediaConvert.html)
  + AWS::MediaConvert::JobTemplate
  + AWS::MediaConvert::Preset
  + AWS::MediaConvert::Queue
+  [AWS Elemental MediaStore](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_MediaStore.html)
  + AWS::MediaStore::Container
+  [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html)
  + AWS::IAM::Role
+  [AWS Managed Streaming for Apache Kafka (MSK)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_MSK.html)
  + AWS::MSK::Cluster
+  [AWS Glue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Glue.html)
  + AWS::Glue::Classifier
  + AWS::Glue::Connection
  + AWS::Glue::Crawler
  + AWS::Glue::Database
  + AWS::Glue::DataCatalogEncryptionSettings
  + AWS::Glue::DevEndpoint
  + AWS::Glue::Job
  + AWS::Glue::MLTransform
  + AWS::Glue::Partition
  + AWS::Glue::SecurityConfiguration
  + AWS::Glue::Table
  + AWS::Glue::Trigger
  + AWS::Glue::Workflow
+ [AWS Key Management Service (KMS)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_KMS.html)
  + AWS::KMS::Key
  + AWS::KMS::Alias
+  [AWS Lake Formation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_LakeFormation.html)
  + AWS::LakeFormation::DataLakeSettings
  + AWS::LakeFormation::Permissions
  + AWS::LakeFormation::Resource
+  [AWS Lambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Lambda.html)
  + AWS::Lambda::Alias
  + AWS::Lambda::EventInvokeConfig
  + AWS::Lambda::EventSourceMapping
  + AWS::Lambda::Function
  + AWS::Lambda::LayerVersion
  + AWS::Lambda::LayerVersionPermission
  + AWS::Lambda::Permission
  + AWS::Lambda::Version
+  [Amazon Redshift](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Redshift.html)
  + AWS::Redshift::Cluster
  + AWS::Redshift::ClusterParameterGroup
  + AWS::Redshift::ClusterSubnetGroup
+  [AWS Secrets Manager](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SecretsManager.html)
  + AWS::SecretsManager::ResourcePolicy
  + AWS::SecretsManager::RotationSchedule
  + AWS::SecretsManager::Secret
  + AWS::SecretsManager::SecretTargetAttachment
+  [AWS 安全中樞](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SecurityHub.html)
  + AWS::SecurityHub::Hub
+  [AWS Step Functions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_StepFunctions.html)
  + AWS::StepFunctions::Activity
  + AWS::StepFunctions::StateMachine
+  [AWS Systems Manager (SSM)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SSM.html)
  + AWS::SSM::Parameter
+  [Amazon CloudWatch Synthetics](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Synthetics.html)
  + AWS::Synthetics::Canary
+  [AWS Transfer 系列](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Transfer.html)
  + AWS::Transfer::Server
  + AWS::Transfer::User
+ [AWS WAF](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_WAF.html)
  + AWS::WAF::ByteMatchSet
  + AWS::WAF::IPSet
  + AWS::WAF::Rule
  + AWS::WAF::SizeConstraintSet
  + AWS::WAF::SqlInjectionMatchSet
  + AWS::WAF::WebACL
  + AWS::WAF::XssMatchSet
+ [AWS WAF Regional](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_WAFRegional.html)
  + AWS::WAFRegional::ByteMatchSet
  + AWS::WAFRegional::GeoMatchSet
  + AWS::WAFRegional::IPSet
  + AWS::WAFRegional::RateBasedRule
  + AWS::WAFRegional::RegexPatternSet
  + AWS::WAFRegional::Rule
  + AWS::WAFRegional::SizeConstraintSet
  + AWS::WAFRegional::SqlInjectionMatchSet
  + AWS::WAFRegional::WebACL
  + AWS::WAFRegional::WebACLAssociation
  + AWS::WAFRegional::XssMatchSet
+ [AWS WAFv2](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_WAFv2.html)
  + AWS::WAFv2::IPSet
  + AWS::WAFv2::RegexPatternSet
  + AWS::WAFv2::RuleGroup
  + AWS::WAFv2::WebACL
  + AWS::WAFv2::WebACLAssociation