簡體   English   中英

在 CI/CD 中使用 Cloud Formation 創建 Ec2 SSH KEY

[英]Creating Ec2 SSH KEy with Cloud Formation in CI/CD

考慮這個 CI/CD 場景:

在開發階段,我想使用來自 CF 的 Ec2 實例和 EC2 密鑰對來部署我的堆棧。

從文檔中我了解 Cloud Formation 資源,可以指向可以從 AWS 管理控制台創建的現有密鑰,而沒有其他方式。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-keypair.html

我想用堆棧創建我的密鑰,以便我可以將它用於實例中的 ssh。 我會通過環境變量為我的 SSH 提供值,因此我將是唯一知道鍵值的人。

有人知道這種情況的解決方案嗎?

遺憾的是,您無法在普通 CloudFormation (CFN) 中創建ssh 密鑰對。 這是不支持的。 相反,如果您真的想使用 CFN 管理密鑰對創建,則必須使用自定義資源

該資源將采用lambda function的形式,它將使用 AWS SDK,例如, create_key_Parameter Store並將生成的私鑰保存在示例中。

任何需要生成密鑰的進一步應用程序都可以從存儲中檢索。

AWS 中的僅控制台操作通常不是問題。 實際上,控制台中的所有操作都使用底層公共 API(存在一些例外)。

如果您真的想在 CloudFormation 中創建 EC2 密鑰對,您可以通過自定義資源來完成。 這本質上是一個 Lambda Function 可以做任意事情並且可能會或可能不會返回值。

創建 KeyPair 是通過 EC2 API 中的CreateKeyPair操作完成的, 此處記錄了該操作。 您可以在自定義資源中使用此 API 調用來創建密鑰對,將公鑰保存在安全的地方(例如 Secrets Manager)並返回密鑰對的名稱作為屬性。

我建議不要這樣做。 確保只有您可以訪問私鑰並非易事。

我建議您以實例能夠使用 EC2 實例連接的方式配置 CloudFormation 模板。 這允許您使用 EC2 API 將臨時 SSH 密鑰注入實例以建立連接,甚至可以使用瀏覽器中的 session 管理器。 我更喜歡這些選項,因為它們使用臨時憑據和/或更易於審核。

參考

此功能現已通過AWS::EC2::KeyPair資源添加到 Cloudformation -“要讓 Amazon EC2 創建新密鑰對,請省略 PublicKeyMaterial 屬性。當 Amazon EC2 創建新密鑰對時,私鑰將保存到AWS Systems Manager 參數存儲

不確定這是什么時候添加的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM