【问题标题】:Creating Ec2 SSH KEy with Cloud Formation in CI/CD在 CI/CD 中使用 Cloud Formation 创建 Ec2 SSH KEY
【发布时间】:2021-05-23 04:53:36
【问题描述】:

考虑这个 CI/CD 场景:

在开发阶段,我想使用来自 CF 的 Ec2 实例和 EC2 密钥对来部署我的堆栈。

从我了解 Cloud Formation 资源的文档中,可以指向可以从 AWS 管理控制台创建的现有密钥,并且没有其他方式。

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

我想用堆栈创建我的密钥,以便我可以使用它在实例中进行 ssh。我会通过 env var 向我的 SSH 提供值,因此我将是唯一知道键值的人。

有人知道这种情况的解决方案吗?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 ssh


    【解决方案1】:

    遗憾的是,您无法在普通 CloudFormation (CFN) 中创建 ssh 密钥对。这是不支持的。相反,如果您真的想使用 CFN 管理密钥对创建,则必须使用 custom resources

    资源将采用 lambda 函数 的形式,该函数将使用 AWS 开发工具包,例如 create_key_pair,并将生成的私钥保存在 SSM 参数存储中。

    任何需要生成密钥的进一步应用程序都可以从存储中检索。

    【讨论】:

    • 你打败了我:D
    【解决方案2】:

    AWS 中的纯控制台操作通常不是一回事。控制台中的几乎所有操作都使用底层公共 API(存在一些例外)。

    如果您真的想在 CloudFormation 中创建 EC2 密钥对,您可以通过自定义资源来完成。这本质上是一个 Lambda 函数,可以做任意事情,可能会也可能不会返回值。

    创建密钥对是通过 EC2 API 中的 CreateKeyPair 操作完成的,该操作记录在 here 中。您可以在自定义资源中使用此 API 调用来创建密钥对,将公钥保存在安全的地方(例如 Secrets Manager)并将密钥对的名称作为属性返回。

    我建议不要这样做。确保只有您可以访问私钥并非易事。

    我建议您以实例能够使用 EC2 实例连接的方式配置 CloudFormation 模板。这允许您使用 EC2 API 将临时 SSH 密钥注入实例以建立连接,甚至可以使用浏览器中的会话管理器。我更喜欢这些选项,因为它们使用临时凭据和/或更易于审核。

    参考文献

    【讨论】:

    • 投了赞成票,因为已经分享了额外的知识。我不确定你在推荐中的意思是什么?你有我能读的CF吗?您的意思是引用我已经在 AWS 控制台中建立的密钥的名称并提供 SSM 资源吗?如果您可以在答案中提供,我认为 CF 资源可以解决问题?
    • 我认为这篇文章解释了如何使用 boto 创建密钥对。 stackoverflow.com/questions/11658578/…。此外,我认为您建议将 ssh 存储在 SSM 中?
    • 建议我的意思是我会避免使用这些长期存在的主凭据。要使用实例连接等,您只需为实例提供一个角色,该角色具有与系统管理员交谈的适当权限。之后,您可以使用 AWS CLI 使用短期 SSH 密钥在该实例中获取 SSH 会话。
    • 我认为短期 SSH 密钥是指 SSM 托管实例提供的功能。如果我需要授予应用程序权限以将文件传输到我的 ssh 怎么办? SSM 托管实例可以用于此类作业吗?
    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2020-10-30
    • 2021-08-25
    相关资源
    最近更新 更多