如何使用 CloudFormation 设置 EC2 实例连接?
Posted
技术标签:
【中文标题】如何使用 CloudFormation 设置 EC2 实例连接?【英文标题】:How do I setup EC2 instance Connect using CloudFormation? 【发布时间】:2021-12-16 02:44:06 【问题描述】:我正在尝试为 EC2 实例设置 EC2 Instance Connect:
AWSTemplateFormatVersion: 2010-09-09
Description: Part 1 - Spawn Ec2 instance with CloudFormation
Resources:
WebAppInstance:
Type: AWS::EC2::Instance
Properties:
AvailabilityZone: us-east-2a
ImageId: ami-074cce78125f09d61
InstanceType: t2.micro
虽然上面的模板允许我创建一个 EC2 实例,但它不允许我使用 EC2 Instance Connect 访问它。
如何在 CloudFormation 模板中配置 EC2 Instance Connect?
解决方案
AWSTemplateFormatVersion: 2010-09-09
Description: Part 1 - Build a webapp stack with CloudFormation
Resources:
WebAppInstance:
Type: AWS::EC2::Instance
Properties:
AvailabilityZone: us-east-2a
ImageId: ami-074cce78125f09d61
InstanceType: t2.micro
SecurityGroupIds:
- !Ref WebAppSecurityGroup
WebAppSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: !Join ["-", [webapp-security-group, dev]]
GroupDescription: "Allow HTTP/HTTPS and SSH inbound and outbound traffic"
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
WebAppEIP:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
InstanceId: !Ref WebAppInstance
Tags:
- Key: Name
Value: !Join ["-", [webapp-eip, dev]]
Outputs:
WebsiteURL:
Value: !Sub http://$WebAppEIP
Description: WebApp URL
【问题讨论】:
阻止用户通过 IAM 创建 SSH 密钥 @ErmiyaEskandary 这不是我要解决的问题。我使用上面的模板创建的实例确实创建了一个 EC2 实例,但它不允许我使用 EC2 Instance connect 连接到它。 嗯,好的 - 编辑您的问题,因为看起来您正在尝试强制执行 EC2 实例连接(“获得 ssh 访问机器的唯一可能方法应该是通过 EC2 实例连接” ) 除了 Marcin 的回答之外,您是否尝试通过 UI 进行连接?如果是这样,您的 EC2 实例必须具有公有 IPv4 地址。是吗? 设置公网ip解决了问题 【参考方案1】:在Amazon Linux 2 (any version)
和Ubuntu 16.04 or later
上,EC2 实例连接为installed and working默认情况下。所以你不需要做任何事情。
对于其他 AMI,您必须使用 user_data 到 install and setup 自己连接。
【讨论】:
我试过了,但我被重定向到出现错误的屏幕,显示“我们无法连接到您的实例。请确保您的实例的网络设置已针对 EC2 Instance Connect 正确配置。对于更多信息,请参阅任务 1:配置对实例的网络访问。" @Salam 如果您的安全组或 VPC 设置不正确,实例连接将无法工作。 使用公共 ip4 地址设置网络安全组就可以了。 @Salam 很高兴它成功了。如果任何答案有帮助,接受其中一个是一种很好的做法。【参考方案2】:确保您已分配公共 IP。
根据docs:
要使用 Amazon EC2 控制台(基于浏览器的客户端)进行连接,实例必须具有公有 IPv4 地址。**
你也可以 如果您不想/不能分配公共 IPv4 地址,请通过其他方法连接到 EC2 实例:
如果实例没有公共 IP 地址,您可以使用 SSH 客户端或 EC2 Instance Connect CLI 通过私有网络连接到实例。例如,您可以从同一 VPC 内或通过 *** 连接、中转网关或 AWS Direct Connect 进行连接。
仅供参考:对于具有除 Amazon Linux 2 或 Ubuntu 16.04+ 以外的 Linux 发行版的其他 AMI,您将需要额外的配置,正如 Marcin 的回答所指出的那样。
us-east-2
中的ami-074cce78125f09d61
对我来说是 Amazon Linux 2 AMI (HVM), SSD Volume Type
,它默认支持 EC2 实例连接,所以你的 AMI 应该没问题。
【讨论】:
以上是关于如何使用 CloudFormation 设置 EC2 实例连接?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复与 AWS::CloudFormation::Init 一起创建 EC2 的 cloudformation 模板
如何使用 CloudFormation 在现有 EC2 实例上启动容器?
如何使用 CloudFormation 将安全组添加到现有 EC2 实例
如何使用cloudformation模板将两个EC2实例(安装AMI创建的Elasticsearch)作为多节点?
如何在 cloudformation 中获取 Elastic Beanstalk EC2 实例的 instanceId?