使用 SSM 远程主机进行端口转发
首先
在下面的更新中,SSM的文档已经支持使用会话管理器进行端口转发。
https://aws.amazon.com/jp/about-aws/whats-new/2022/05/aws-systems-manager-support-port-forwarding-remote-hosts-using-session-manager/
由於連結文件中幾乎沒有任何內容可供參考,因此我決定進行調查並試試看。
(備註:如果可以從控制台的會話管理器或RunCommand進行,那將更加方便,但目前看來並不可行。)
我想做的事情
这次我们将尝试从本地计算机登录到私有子网上的DocumentDB。
【接続経路】
ローカルPC(WSL2)→EC2(AmazonLinux2)→DocumentDB(Port:27017)
※我选择了DocumentDB作为连接目标,只是因为它对于当前的项目来说更容易测试,并没有其他意图(在EC2或RDS上也是可行的)
※由于这个原因,我需要创建Mongo-shell的执行环境,这有点麻烦,但这是个秘密。
事前准备
创建一个用于PortForwarding的EC2实例。
基本上,默认设置(不需要密钥对和安全组入站规则)就可以了,但是前提是可以通过会话管理器进行连接,所以只需要附加一个具有”AmazonSSMManagedInstanceCore”权限的实例配置文件(IAM角色)即可。
另外,PortForwarding需要SSM Agent的版本必须是「3.1.1374.0及以上」。
目前,AmazonLinux2的AMI默认安装的Agent版本较低,如果要使用PortForwarding功能,需要手动更新。
(因为这是最近新增的功能,相信很快会有更新)
※今日起動したインスタンスのSSMエージェントバージョン
# rpm -qa | grep -i ssm
amazon-ssm-agent-3.1.1188.0-1.amzn2.x86_64
以下是升级步骤:
https://docs.aws.amazon.com/systems-manager/latest/userguide/agent-install-al2.html
更新后的版本。
# rpm -qa | grep -i ssm
amazon-ssm-agent-3.1.1446.0-1.x86_64
连接命令
SSM文件名为“AWS-StartPortForwardingSessionToRemoteHost”。
具体详情请查看文件说明(可以在SSM控制台中查看),但只需设置本地/远程端口和目标主机(本次为DocumentDB的端点)作为参数即可连接。
$ aws ssm start-session --target i-xxxxxxxxxxxx --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters 'portNumber=27017,localPortNumber=27017,host=docdb.cluster-abcdefghij.ap-northeast-1.docdb.amazonaws.com'
Starting session with SessionId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Port 27017 opened for sessionId xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Waiting for connections...
执行后,您可以在另一个页面上连接到localhost并登录到目标地址。
$ mongo --host localhost:27017 --username mongo
MongoDB shell version v4.4.14
Enter password:
connecting to: mongodb://localhost:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c5988ed1-5497-4e17-9138-16ae18b0b71e") }
MongoDB server version: 4.0.0
(※中略)
rs0:PRIMARY>
参照
如果想在WSL2上使用Mongo shell,似乎无法简单地通过apt进行安装。
我参考了以下网站。
(由于我不需要数据库,所以仅安装了mongodb-org-shell)