CloudFormation 最佳實務 - AWS CloudFormation

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

CloudFormation 最佳實務

最佳實務是可協助您更有效率地使用 CloudFormation,並在整個工作流程中採用安全實務的建議。了解如何規劃和組織您的堆疊、建立範本來描述您的資源和對其執行的軟體應用程式,以及管理您的堆疊及其資源。以下最佳實務是根據目前 CloudFormation 客戶的實際體驗。

規劃與組織
建立範本
管理堆疊
編寫工具
安全和合規

縮短回饋迴圈以改善開發速度

採用適當的實務和工具,協祝您針對使用 CloudFormation 範本描述的基礎設施縮短回饋迴圈。這包括在工作站中對範本執行早期檢查和測試;這樣一來,在將成品提交至原始碼儲存庫之前,您還有機會發現潛在的語法和組態問題。早期發現這類問題有助於防止它們進入正式的生命週期環境,例如開發、品質保證和生產。這種早期測試、快速檢錯方法可讓您減少重工等待時間、減少潛在的影響區域,以及增加成功佈建作業的信心程度。

協助您實現快速失敗實務的工具選擇包括 AWS CloudFormation Linter (cfn-lint) 和 TaskCat 命令列工具。此cfn-lint工具可讓您根據AWS CloudFormation 資源規格驗證 CloudFormation 範本。這包括檢查資源屬性的有效值,以及最佳實務。的外掛程式cfn-lint適用於多個程式碼編輯器;這可讓您將編輯器內的問題視覺化,並取得直接文字回饋。您也可以選擇cfn-lint整合原始碼儲存庫的組態,以便在遞交貢獻時執行範本驗證。如需詳細資訊,請參閱使用 對 AWS CloudFormation 範本進行 Git 預先遞交驗證cfn-lint。執行初始 linting 並修正cfn-lint可能引發的任何問題後,您可以使用 TaskCat,透過程式設計方式在 AWS 區域 您選擇的 中建立堆疊來測試範本。TaskCat 也會針對您選擇的每個區域產生具有通過/失敗等級的報告。

如需有關如何使用這兩種工具縮短回饋迴圈的逐步實作演練,請按照 AWS CloudFormation WorkshopLinting and Testing 實驗室進行操作。

依生命週期和所有權組織您的堆疊

使用 AWS 資源的生命週期和擁有權,協助您決定每個堆疊中應包含的資源。一開始,您可能會將所有資源放在一個堆疊中,但隨著您的堆疊逐漸成比例成長且範圍越來越廣泛,管理單一堆疊可能既繁瑣又耗時。透過根據通用生命週期和所有權來分組資源,擁有者就可以使用自己的程序和排程來變更一組資源,無需影響其他資源。

例如,假設一個開發人員和工程師團隊擁有在負載平衡器後方的 Amazon EC2 Auto Scaling 執行個體上託管的網站。由於網站有自己的生命週期並由網站團隊維護,因此您可以建立網站及其資源的堆疊。現在,假設網站也會使用後端資料庫,這些資料庫位於資料庫管理員擁有及維護的個別堆疊中。每當網站團隊或資料庫團隊需要更新其資源時,都可以在不影響彼此的堆疊下執行這項操作。如果所有資源都在同一個堆疊中,協調及傳達更新可能很困難。

如需組織您堆疊的其他指引,您可以使用兩個常見架構:多層架構和服務導向架構 (SOA)。

分層架構可將堆疊組織成彼此重疊的多個水平層,每個 layer 會相依於其正下方的 layer。您可以在每個 layer 中有一或多個堆疊,但在每個 layer 內,您的堆疊應該有生命週期和所有權類似的 AWS 資源。

使用服務導向架構,您可以將龐大的商務問題組織成多個易於管理的部分。每個部分都是一項服務,其具有明確定義的用途,並代表獨立的功能單位。您可以將這些服務映射至堆疊,每個堆疊都有自己的生命週期和擁有者。所有服務 (堆疊) 都可連接在一起,以便彼此互動。

使用跨堆疊參考來傳回另一個堆疊匯出的輸出值

當您根據生命週期和擁有權組織 AWS 資源時,建議您建置使用另一個堆疊中資源的堆疊。您可以硬式編碼值,或使用輸入參數來傳遞資源名稱和 ID。不過,這些方法可能會讓範本難以重複使用,或可能增加讓堆疊執行的成本。反之,使用跨堆疊參考來傳回由另一個堆疊匯出的輸出值,以便其他堆疊可以使用它們。堆疊可以透過使用 Fn::ImportValue 函數呼叫匯出的資源,來使用這些資源。

例如,您可能有一個網路堆疊,其中包含 VPC、安全群組和子網路。您想要讓所有公有 Web 應用程式使用這些資源。透過匯出資源,即允許具有公有 Web 應用程式的所有堆疊使用這些資源。如需詳細資訊,請參閱從部署的 CloudFormation 堆疊取得匯出的輸出

針對多帳戶和多區域部署使用 AWS CloudFormation StackSets

AWS CloudFormation StackSets 可讓您透過單一操作跨多個帳戶和區域建立、更新或刪除堆疊,藉此擴充堆疊的功能。使用 StackSets 在您的組織中部署常見的基礎設施元件、合規控制或共用服務。

使用 StackSets 時,使用 實作服務受管許可 AWS Organizations ,以簡化許可管理。此方法可讓您將 StackSets 部署到組織內的帳戶,而不需要在每個帳戶中手動設定 IAM 角色。

如需 StackSets 的詳細資訊,請參閱 StackSets 概念

驗證所有資源類型的配額

啟動堆疊之前,請確定您可以建立所需的所有資源,而不會達到 AWS 您的帳戶限制。如果您達到限制,在您提高配額或刪除額外資源之前,CloudFormation 都無法成功建立您的堆疊。每項服務可能會有各種限制,需要您在啟動堆疊前注意。例如,根據預設,您只能在 中的每個區域啟動 2000 個 CloudFormation 堆疊 AWS 帳戶。如需有關限制及如何提高預設限制的詳細資訊,請參閱 AWS 一般參考 中的 AWS 服務配額

重複使用範本在多個環境中複製堆疊

設定您的堆疊和資源之後,您可以重複使用範本在多個環境中複製您的基礎設施。例如,您可以建立適用於開發、測試和生產的環境,讓您可以測試變更,再將其實作到生產環境中。為了讓範本可重複使用,請使用參數、映射和條件區段,以便在建立堆疊時能夠自訂這些堆疊。例如,對於您的開發環境,您可以指定相較於生產環境成本較低的執行個體類型,但所有其他組態和設定則保持不變。如需參數、映射和條件的詳細資訊,請參閱CloudFormation 範本區段

使用模組以重複使用資源組態

隨著您的基礎設施逐漸成長,可能出現的常見模式即是您會在每個範本中宣告相同的元件。模組可讓您以透明、易於管理且可重複的方式,來封裝可包含在堆疊範本之間的資源組態。模組可透過可自訂的模組化建置區塊形式,來封裝通用服務組態和最佳實務,以便您將其納入堆疊範本中。

這些建置區塊可用於單一資源,例如定義 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的最佳實務;也可以用於多個資源,以定義應用程式架構的常見模式。這些建置區塊可以嵌套到其他模組中,因此您可以將最佳實務堆疊到較高層級的建置區塊中。CloudFormation 模組在 CloudFormation 登錄檔中可用,因此您可以像使用原生資源一樣使用这些模组。當您使用 CloudFormation 模組時,會將模組範本被擴展到消費範本,這樣一來,您可以存取使用 RefFn::GetAtt 模組內的資源。如需詳細資訊,請參閱使用 CloudFormation 模組建立可跨範本包含的可重複使用資源組態

採用基礎設施做為程式碼實務

透過實作基礎設施做為程式碼 (IaC) 實務,將 CloudFormation 範本視為程式碼。將您的範本存放在版本控制系統中,實作程式碼檢閱,並使用自動化測試來驗證變更。此方法可確保一致性、改善協同合作,並提供基礎設施變更的稽核線索。

請考慮為您的基礎設施程式碼實作 CI/CD 管道,以自動化 CloudFormation 範本的測試和部署。 AWS CodePipeline和 等工具 AWS CodeBuild AWS CodeDeploy 可用於為您的基礎設施部署建立自動化工作流程。

如需實作 IaC 最佳實務的詳細資訊,請參閱使用 AWS CloudFormation 做為 IaC 工具

如需搭配 CloudFormation 使用持續交付的詳細資訊,請參閱搭配 CodePipeline 持續交付

請勿在 範本中嵌入登入資料

建議您在堆疊範本中使用動態參考,而不是在 CloudFormation 範本中內嵌敏感資訊。

動態參考提供精簡且強大的方式,讓您參考儲存在其他服務中的外部值,例如 AWS Systems Manager 參數存放區或 AWS Secrets Manager。當您使用動態參考時,在堆疊和變更集操作期間,CloudFormation 會在必要時擷取指定參考的值,並將值傳遞至適當的資源。不過,CloudFormation 絕不會存放實際參考值。如需詳細資訊,請參閱使用動態參考來指定範本值

AWS Secrets Manager 可協助您安全地加密、存放和擷取資料庫和其他服務的登入資料。AWS Systems Manager 參數存放區提供安全的階層式儲存,以管理組態資料。

如需定義範本參數的詳細資訊,請參閱CloudFormation 範本Parameters語法

使用 AWS特定的參數類型

如果您的範本需要輸入現有 AWS特定值,例如現有 Amazon Virtual Private Cloud IDs或 Amazon EC2 AWS金鑰對名稱,請使用特定參數類型。例如,您可以將參數指定為類型 AWS::EC2::KeyPair::KeyName,這會使用您 和您建立堆疊 AWS 帳戶 之區域中的現有金鑰對名稱。CloudFormation 可以在建立堆疊之前快速驗證 AWS特定參數類型的值。此外,如果您使用 CloudFormation 主控台,CloudFormation 會顯示有效值的下拉式清單,因此您不需要查詢或記住正確的 VPC ID 或金鑰對名稱。如需詳細資訊,請參閱使用 CloudFormation 提供的參數類型,在執行時間指定現有的資源

使用參數限制條件

使用限制條件,您可以描述允許的輸入值,讓 CloudFormation 在建立堆疊之前攔截任何無效的值。您可以設定限制條件,例如長度下限、長度上限和允許的模式。例如,您可以對資料庫使用者名稱值設定限制條件,讓其長度至少為八個字元並只包含英數字元。如需詳細資訊,請參閱CloudFormation 範本Parameters語法

使用虛擬參數提升可攜性

您可以在範本中使用虛擬參數作為內部函數的引數,例如 RefFn::Sub。虛擬參數為 CloudFormation 預先定義的參數。請勿在範本中宣告這些參數。在內部函數中使用虛擬參數可提高堆疊範本跨區域和帳戶的可攜性。

例如,假設您想要建立範本,其中需要針對特定資源屬性指定另一個現有資源的 Amazon Resource Name (ARN)。在此情況下,現有資源是具有以下 ARN 的 AWS Systems Manager 參數存放區資源:arn:aws:ssm:us-east-1:123456789012:parameter/MySampleParameter。您需要根據目標 AWS 分割區、區域和帳戶 ID 來調整 ARN 格式。您可以使用 AWS::PartitionAWS::RegionAWS::AccountId 虛擬參數提升範本可攜性,而非對此類值進行硬式編碼。在此情況下,下列範例會示範如何將 ARN 中的元素與 CloudFormation 串連:!Sub 'arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter/MySampleParameter

針對另一個範例,假設您想要跨多個堆疊共用資源或組態。在此範例中,假設您已建立 VPC 的子網路,然後匯出其 ID 以用於相同 AWS 帳戶 和 區域中的其他堆疊。在另一個堆疊中,您可以在描述 Amazon EC2 執行個體時,參考子網路 ID 的匯出值。如需使用 Export 輸出欄位和 Fn::ImportValue 內部函數的詳細範例,請參閱 請參閱另一個 CloudFormation 堆疊中的資源輸出

堆疊匯出在每個帳戶和區域必須是唯一的。因此,在此情況下,您可以使用 AWS::StackName 虛擬參數為匯出建立字首。由於堆疊名稱在每個帳戶和區域也必須是唯一的,因此使用此虛擬參數做為字首會增加具有唯一匯出名稱的可能性,同時從匯出值的位置提升堆疊之間的可重複使用方法。或者,您可以自行選擇使用的字首。

使用 AWS::CloudFormation::Init 在 Amazon EC2 執行個體上部署軟體應用程式

啟動堆疊時,您可以使用cfn-init協助程式指令碼和資源,在 Amazon EC2 執行個體上安裝和設定軟體應用程式AWS::CloudFormation::Init。透過使用 AWS::CloudFormation::Init,您可以描述想要的組態,而不用編寫程序性步驟的指令碼。您也可以更新組態,無需重新建立執行個體。此外,如果您的組態發生任何錯誤,CloudFormation 會產生日誌,以供您用來調查問題。

在您的範本中,透過 AWS::CloudFormation::Init 資源指定安裝和組態狀態。如需示範如何使用 cfn-init和 的逐步解說AWS::CloudFormation::Init,請參閱 在 Amazon EC2 上部署應用程式

使用最新的協助程式指令碼

CloudFormation 協助程式指令碼會定期更新。請務必在您範本的 UserData 屬性中包含下列命令,再呼叫協助程式指令碼,以確保您已啟動的執行個體取得最新的協助程式指令碼:

yum install -y aws-cfn-bootstrap

如需取得最新協助程式指令碼的詳細資訊,請參閱《 範本參考指南》中的 CloudFormation 協助程式指令碼參考。 AWS CloudFormation

驗證後再使用範本

您可以使用 CloudFormation 驗證範本,再使用範本建立或更新堆疊。驗證範本可在 CloudFormation 建立任何資源之前,協助您攔截語法和一些語意錯誤,例如循環相依性。如果您使用 CloudFormation 主控台,則主控台會在您指定輸入參數之後自動驗證範本。對於 AWS CLI 或 CloudFormation API,請使用 validate-template CLI 命令或 ValidateTemplate API 操作。

在驗證期間,CloudFormation 會先檢查範本是否為有效的 JSON。如果不是,CloudFormation 會檢查範本是否為有效的 YAML。如果兩種檢查都失敗,則 CloudFormation 會傳回範本驗證錯誤。

驗證範本是否符合組織政策規範

您還可驗證範本與組織政策指導方針的符合性。 AWS CloudFormation Guard (cfn-guard) 是一種開放原始碼命令行介面 (CLI) 工具,提供政策即程式碼語言,以定義可檢查必要和禁止之資源組態的規則。然後,它可讓您根據這些規則驗證您的範本。例如,管理員可建立規則以確保使用者一律建立加密的 Amazon S3 儲存貯體。

您可在本機使用 cfn-guard,或自動作為 CI/CD 管道的一部分,以停止不合規資源的部署。

此外,cfn-guard 也包含功能 rulegen,該功能可讓您從現有的合規 CloudFormation 範本擷取規則。

如需詳細資訊,請參閱 GitHub 上的 cfn-guard 儲存庫。

使用 YAML 或 JSON 撰寫範本

CloudFormation 支援範本的 YAML 和 JSON 格式。每個 都有其優點,選擇取決於您的特定需求:

使用 YAML 時

  • 您會優先考慮人類可讀性和可維護性

  • 您想要包含註解以記錄您的範本

  • 您正在使用具有巢狀結構的複雜範本

  • 您想要使用 YAML 特定的功能,例如錨點和別名,以減少重複

在以下情況下使用 JSON:

  • 您需要與偏好 JSON 的工具或系統整合

  • 您正在使用程式設計範本產生或操作

  • 您需要嚴格的資料驗證

由於 YAML 的可讀性和評論支援,因此通常建議手動範本撰寫使用 YAML。它對於以縮排為基礎的結構有助於視覺化資源階層的複雜範本特別有用。在自動化工作流程或使用預期 JSON 輸入的 APIs時,JSON 可能是有利的。當您需要確保嚴格遵守特定結構時,這也很有幫助。無論您選擇哪種格式,都專注於建立結構化、記錄和可維護的範本。如果使用 YAML,請利用其錨點和別名等功能來減少重複並改善可維護性。

實作全面的標記策略

為 CloudFormation 範本建立的所有資源實作一致的標記策略。標籤可協助進行資源組織、成本分配、存取控制和自動化。考慮包含環境、擁有者、成本中心、應用程式和用途的標籤。

使用AWS::CloudFormation::Stack資源的 Tags 屬性,將標籤套用至堆疊中所有支援的資源。您也可以使用許多資源類型上可用的 TagSpecifications 屬性,在資源建立期間套用標籤。

如需標記的詳細資訊,請參閱資源標籤

利用範本巨集進行進階轉換

CloudFormation 巨集可讓您在範本上執行自訂處理,從find-and-replace操作等簡單動作,到產生其他資源的複雜轉換。使用巨集來擴展 CloudFormation 範本的功能,並在整個組織中實作可重複使用的模式。

AWS Serverless Application Model 是巨集的範例,可簡化無伺服器應用程式的開發。請考慮為組織特定的模式和需求建立自訂巨集。

如需在範本中使用巨集的詳細資訊,請參閱 CloudFormation 巨集概觀

透過 CloudFormation 管理所有堆疊資源

啟動堆疊之後,使用 CloudFormation 主控台APIAWS CLI 來更新堆疊中的資源。請勿在 CloudFormation 外變更堆疊資源。這樣做可能會在您堆疊的範本與您堆疊資源的目前狀態之間產生不相符的情況,如果您更新或刪除堆疊,這可能會造成錯誤。這稱為偏離。如果對 CloudFormation 範本外部的資源進行變更,且您更新堆疊,則會捨棄直接對資源所做的變更,且資源組態會還原為範本中的組態。

如需偏離的詳細資訊,請參閱 什麼是偏離?

如需更新堆疊的詳細資訊,請參閱 更新堆疊

更新您的堆疊之前建立變更集

變更集可讓您先查看提議的堆疊變更對執行中資源可能造成的影響,再實作這些變更。在您執行變更集之前,CloudFormation 不會對您的堆疊進行任何變更,這讓您可以決定是繼續進行提議的變更,還是建立其他變更集。

使用變更集可查看您的變更對執行中資源 (特別是重要資源) 造成的影響。例如,如果您變更 Amazon RDS 資料庫執行個體的名稱,CloudFormation 會建立新的資料庫並刪除舊的資料庫;除非您已進行備份,否則您將會遺失舊資料庫中的資料。如果您產生變更集,您會看到變更取代您的資料庫。這可協助您先規劃,再更新您的堆疊。如需詳細資訊,請參閱使用變更集更新 CloudFormation 堆疊

使用堆疊政策來保護資源

堆疊政策可協助防止意外更新重要的堆疊資源,這可能會導致資源被中斷或甚至被取代。堆疊政策是一種 JSON 文件,描述可在指定資源上執行的更新動作。每當您建立具有重要資源的堆疊時,請指定堆疊政策。

在堆疊更新期間,您必須明確地指定要更新的受保護資源,否則不會對受保護的資源進行任何變更。如需詳細資訊,請參閱避免更新堆疊資源

使用 AWS CloudTrail 記錄 CloudFormation 呼叫

AWS CloudTrail 會追蹤在您的 中進行 CloudFormation API 呼叫的任何人 AWS 帳戶。只要有人使用 CloudFormation API、CloudFormation 主控台、後端主控台或 CloudFormation AWS CLI 命令,就會記錄 API 呼叫。啟用記錄,然後指定 Amazon S3 儲存貯體來存放日誌。如此一來,如果您需要,就可以稽核帳戶中誰進行 CloudFormation 呼叫。

如需詳細資訊,請參閱使用 記錄 AWS CloudFormation API 呼叫 AWS CloudTrail

使用程式碼檢閱和修訂控制管理您的範本

您的堆疊範本描述 AWS 資源的組態,例如其屬性值。若要檢閱變更並保留確切的資源歷史記錄,請使用程式碼檢閱和修訂控制。這些方法可協助您追蹤不同版本的範本之間的變更,如此有助於追蹤您堆疊資源的變更。此外,透過維護歷史記錄,您就可以隨時將堆疊還原至範本的特定版本。

定期更新 Amazon EC2 執行個體

在所有 Amazon EC2 Windows 執行個體及使用 CloudFormation 建立的 Amazon EC2 Linux 執行個體上,定期執行 yum update 命令以更新 RPM 套件。這可確保您取得最新的修正程式和安全性更新。

定期使用偏離偵測

定期使用 CloudFormation 偏離偵測功能來識別已在 CloudFormation 管理之外修改的資源。偵測和解決偏離有助於維持基礎設施的完整性作為程式碼方法,並確保您的範本準確反映已部署資源的狀態。

請考慮在操作程序中實作自動偏離偵測。您可以使用 Amazon EventBridge 規則觸發的 AWS Lambda 函數定期檢查偏離,並在偵測到差異時通知您的團隊。

如需漂移的詳細資訊,請參閱使用漂移偵測堆疊和資源的未受管組態變更

設定自動復原的復原觸發

使用復原觸發來指定 CloudFormation 在堆疊建立和更新操作期間應監控的 Amazon CloudWatch 警示。如果任何指定的警示進入 ALARM 狀態,CloudFormation 會自動復原整個堆疊操作,協助確保您的基礎設施保持穩定狀態。

設定關鍵指標的轉返觸發條件,例如應用程式錯誤率、系統資源使用率,或指出應用程式和基礎設施運作狀態的自訂業務指標。

如需轉返觸發程序的詳細資訊,請參閱在警示違規時轉返堆疊

實作有效的堆疊重構策略

隨著基礎設施的演進,您可能需要重構 CloudFormation 堆疊,以提高可維護性、降低複雜性或適應不斷變化的需求。堆疊重構涉及重組您的範本和資源,同時保留其外部行為和功能。堆疊重構有助於透過下列方式與 CloudFormation 搭配使用:

  • 分割單體堆疊:將大型、複雜的堆疊分解為較小、更易於管理的堆疊,依生命週期或擁有權組織

  • 合併相關資源:將來自多個堆疊的相關資源合併為單一、具凝聚力的堆疊,以簡化管理

  • 擷取可重複使用的元件:將常見模式移入模組或巢狀堆疊,以促進重複使用和一致性

  • 改善資源組織:重組堆疊中的資源,以更好地反映其關係和相依性

如需重構 CloudFormation 堆疊的詳細資訊,請參閱 堆疊重構

使用 CloudFormation Hook 進行生命週期管理

CloudFormation Hooks 提供的程式碼,可在佈建之前主動檢查 AWS 資源的組態,並執行複雜的驗證檢查。勾點檢查您的資源、堆疊和變更集是否符合組織的安全性、營運和成本最佳化需求。它們會在資源佈建之前提供警告,或使操作失敗並完全停止,視其設定方式而定。違規和警告會記錄在 Amazon CloudWatch 中,以提供不合規部署的可見性。

如需這些 Hooks 最佳實務的詳細資訊,請參閱 AWS CloudFormation Hooks 概念

如需 Hooks 可以為您的 CloudFormation 資源做什麼的詳細資訊,請參閱什麼是 AWS CloudFormation Hooks?

使用 IaC 產生器從現有資源建立範本

CloudFormation IaC (基礎設施即程式碼) 產生器可協助您從現有 AWS 資源建立 CloudFormation 範本。當您需要複寫現有基礎設施、記錄手動建立的資源,或在 CloudFormation 管理下使用先前未受管的資源時,此功能特別有用。IaC 產生器適用於以下列方式建立 CloudFormation 範本:

  • 加速範本建立:從現有資源產生範本,而不是從頭開始撰寫範本

  • 一致的基礎設施:使用產生的範本作為起點,確保新的環境符合現有的環境

  • 遷移至基礎設施做為程式碼:逐漸在 CloudFormation 管理下手動建立資源

  • 文件:以範本形式建立現有基礎設施的記錄

如需 IaC 產生器的詳細資訊,請參閱使用 IaC 產生器從現有資源產生範本

AWS Infrastructure Composer 用於視覺化範本設計

AWS Infrastructure Composer 是一種視覺化設計工具,可協助您使用drag-and-drop界面建立、視覺化和修改 CloudFormation 範本。它在以下列方式使用 CloudFormation 時特別有用:

  • 架構規劃:在實作之前設計和驗證基礎設施架構

  • 範本現代化:視覺化現有範本以了解其結構,並識別改善機會

  • 訓練和加入:協助新團隊成員透過視覺化學習了解 CloudFormation 概念 AWS 和服務關係

  • 利益相關者溝通:使用清晰的視覺化呈現方式,向非技術利益相關者呈現基礎設施設計

  • 合規審查:使用視覺化圖表來促進基礎設施設計的安全性和合規審查

  • 合規審查:使用視覺化圖表來促進基礎設施設計的安全性和合規審查

如需 Infrastructure Composer 的詳細資訊,請參閱什麼是 AWS Infrastructure Composer?

考慮將 AWS Cloud Development Kit (AWS CDK) 用於複雜的基礎設施

如需複雜的基礎設施需求,請考慮使用 CDK,使用 TypeScript、Python、Java 和 .NET. AWS CDK generates CloudFormation 範本等熟悉的程式設計語言來定義您的雲端資源,讓您可以利用 CloudFormation 的完整功能,同時使用您慣用語言的抽象和程式設計建構。

AWS CDK 提供高階建構,可封裝最佳實務並簡化常見基礎設施模式的定義。這可以大幅減少定義基礎設施所需的程式碼數量,同時確保遵守最佳實務。

如需 CDK 的詳細資訊,請參閱 AWS Cloud Development Kit (AWS CDK)

使用 IAM 控制存取

IAM 是一項 AWS 服務,可用來管理 中的使用者及其許可 AWS。您可以使用 IAM 搭配 CloudFormation 來指定使用者可以執行哪些 CloudFormation 動作,例如檢視堆疊範本、建立堆疊或刪除堆疊。此外,管理 CloudFormation 堆疊的任何人都需要這些堆疊內資源的許可。例如,如果使用者想要使用 CloudFormation 啟動、更新或終止 Amazon EC2 執行個體,則必須具有呼叫相關 Amazon EC2 動作的許可。

在大多數情況下,使用者需要完整存取權才能管理範本中的所有資源。CloudFormation 會呼叫 來代表他們建立、修改和刪除這些資源。若要區隔使用者與 CloudFormation 服務之間的許可,請使用服務角色。CloudFormation 使用服務角色的政策進行呼叫,而不是使用者的政策。如需詳細資訊,請參閱AWS CloudFormation 服務角色

套用最低權限原則

為 CloudFormation 服務角色或範本建立的資源設定 IAM 角色時,請務必套用最低權限原則。僅授予預期功能所需的許可,並盡可能避免使用萬用字元許可。

使用 IAM Access Analyzer 檢閱授予 CloudFormation 服務角色的許可,並識別可以移除的未使用許可。定期檢閱和更新 IAM 政策,以確保它們符合您的安全需求。

安全敏感參數

如需密碼、API 金鑰和其他秘密等敏感資訊,請使用 AWS Systems Manager 參數存放區或 AWS Secrets Manager ,而非直接內嵌在您的範本中。在 範本中使用動態參考,在堆疊操作期間安全地擷取這些值。

在 範本中使用參數時,請將敏感參數trueNoEcho 屬性設定為 ,以防止其值顯示在主控台、API 回應或 CLI 輸出中。請注意,如果值傳遞給可能記錄該值的其他服務或資源, NoEcho 不會阻止記錄該值。

如需搭配 CloudFormation 使用 AWS Systems Manager 參數存放區的詳細資訊,請參閱從 AWS Systems Manager 參數存放區取得純文字值

如需使用 NoEcho 屬性的詳細資訊,請參閱 CloudFormation 範本參數語法

如需 AWS Secrets Manager 搭配 CloudFormation 使用 的詳細資訊,請參閱在 中建立 AWS Secrets Manager 秘密 AWS CloudFormation

使用 將政策實作為程式碼 AWS CloudFormation Guard

AWS CloudFormation Guard (cfn-guard) 是一種開放原始碼policy-as-code工具,可讓您定義和強制執行 CloudFormation 範本的規則。使用 來cfn-guard確保您的範本符合組織政策、安全最佳實務和控管要求。

整合cfn-guard到您的 CI/CD 管道,以在部署之前根據您的政策規則自動驗證範本。這有助於防止不合規資源部署到您的環境,並向開發人員提供有關政策違規的早期意見回饋。

如需 Guard 的詳細資訊,請參閱什麼是 AWS CloudFormation Guard?