首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有aws SSM的SSH tunel

带有aws SSM的SSH tunel
EN

Stack Overflow用户
提问于 2021-08-31 04:05:15
回答 1查看 547关注 0票数 0

希望这对其他人有所帮助,因为我花了几个小时试图弄清楚如何通过SSH从本地机器(macosx)连接到私有子网中的一个ec2实例,该实例充当通往其他资源(如redis、rds )的隧道。

为什么我需要访问我的私有子网资源?我希望能够为我正在构建的应用程序测试RDS数据库、redis和私有API网关。为什么我会采用OpenVPN上的SSM方法,公共子网中的Bastion主机,或者其他什么东西? 1)我直到最后才能完成我的MVP的构建,2)我从不同的来源读到,将一个堡垒主机放置到一个公共子网中可能会从安全的角度导致一些漏洞。

SSM方法似乎对我的沙箱环境很好,它目前是一个VPC,只有一个可用性区域中有一个公共子网和一个私有子网。我可以下载临时AWS CLI凭据,发出aws ssm控制台命令,并为驻留在私有子网后面的各种服务设置隧道。

我将列出我所采取的步骤,但是每次我想在私有子网中为服务设置隧道时,运行这些步骤似乎有点麻烦,因为有些vpn服务似乎很容易集成,而不需要额外的麻烦。如果您有更好的解决方案,或者改进我的方法,请告诉我。

,首先,我将介绍我在这种方法中所采取的各种步骤。

  1. I使用VPC启动向导将带有1个公共子网和1个私有子网的VPC启动到( used 1c)

中。

  1. I在私有子网

中启动了1个redis实例。

  1. I使用AmazonLinux2AMI在私有子网中启动了一个EC2实例。我没有启用对实例的公共访问。

  1. 我创建了一个IAM角色,并将其分配给EC2实例。该角色包含一个名为: AmazonSSMManagedInstanceCore的策略,虽然我正在阅读的指南解释了如何制定您自己的IAM策略(https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-instance-profile.html),但对我来说有点模糊,因为我对IAM没有那么丰富的经验,我也不完全确定如何设置它,尽管我确实相信我创建的策略是正确的,并将它附加到了我附加到EC2实例的角色中。即使按照上面提供kms加密和日志记录的指南,我也没有看到任何日志正在提交给cloudwatch或s3。不确定这些组件是否非常关键,但是如果有人有输入,请共享.

  1. I创建了一个仅具有编程访问权限的IAM用户。虽然我正在为这个“沙箱”帐户使用根帐户,但我认为不可能为根用户获取API密钥,因此我创建了一个辅助帐户。在没有附加策略AmazonSSMFullAccess和EC2InstanceConnect的情况下,我无法让AWS控制台命令在本地机器上工作(是否确实需要这些策略?)给我创建的IAM用户.

  1. 我在本地机器

上使用pip3 for Python安装了awscli包

我为macosx安装了SSM插件(再次是我的本地机器) (https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-macos)

  1. 为我在步骤4中创建的IAM用户配置了aws凭据(只需在控制台中运行aws配置),您将被提示输入各种值。

通过运行以下命令,

  1. I能够在私有子网中启动EC2实例的会话:

aws ssm启动-会话-目标i-xxxxxxxxxxxxxxxxx

输出:sh-4.2美元

  1. https://prismatic.io/blog/connect-to-aws-resources-with-ssh/指南帮助我完成了其余的步骤,包括使用以下命令向ec2实例添加公钥:

aws EC2-实例-连接

发送-ssh-公钥

-可用性-我们区-东-1c\

-实例-id i-xxxxxxxxxxxxxxxxx

-实例-os-用户EC2-用户

-ssh-公钥file://$HOME/.ssh/id_rsa.pub

我不完全确定为什么需要这一步,但如果有人有任何澄清,请补充。

  1. 把这个添加到我的$HOME/.ssh/config

主机i-* ProxyCommand sh -c "aws启动-会话-目标%h -文档名AWS-StartSSHSession -参数

  1. ,然后我可以设置我的第一个隧道到redis。此命令从localhost:5000在我的笔记本电脑上创建一个SSH隧道到redis实例。

用户@

我也不知道为什么仍然需要.pem文件,但是如果有人知道这是否真的是必需的,或者是另一种掩盖这一点的方法。如果没有pem文件,我将面临:拒绝许可(公共密钥,gssapi-keyex,gssapi-with-mic)。

请分享对此方法的任何正面或负面反馈。

EN

回答 1

Stack Overflow用户

发布于 2021-08-31 06:13:11

您之所以面临这个问题,是因为当您使用这个代理助手host i-* ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"运行SSH时,您所要做的就是在端口22上的AWS EC2实例之间创建一个oport隧道(默认情况下)。

这就是为什么在没有键的情况下连接到实例时会出现问题,因为在使用该实例跳转到redis服务器之前,需要将SSH连接到实例。

您的连接将以类似的方式穿越互联网:

代码语言:javascript
复制
ssh command -> aws ssm start-session -> internet -> ec2 server -> redis

如果您不想使用SSH密钥,我建议使用VPN选项连接到内部资源:

https://aws.amazon.com/blogs/awsmarketplace/setting-up-openvpn-access-server-in-amazon-vpc/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68992735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档