AWS EC2不开放22端口:Session Manager与IMDSv2加固实战

发布时间:2026/9/23 1:59:27

AWS EC2不开放22端口:Session Manager与IMDSv2加固实战
很多团队给 EC2 配置安全组时会习惯性地加入一条0.0.0.0/0 - TCP 22然后再依赖强密码、改端口或 Fail2ban。问题是只要 22 端口对公网可达扫描、爆破和密钥管理就一直存在更换员工、外包交接和跳板机维护也会增加运维负担。这篇文章给出一套可验证、可回滚的改造方案使用 AWS Systems Manager Session Manager 管理 EC2确认链路可用后删除 22 端口入站规则再把实例元数据服务切换为 IMDSv2。最终目标不是“绝对安全”而是减少公网暴露面把访问授权收敛到 IAM并保留审计与故障恢复能力。适用范围Amazon Linux、Ubuntu 等已受 AWS Systems Manager 支持的 EC2命令以 AWS CLI v2 和 Bash 为例。生产环境先在测试实例验证尤其不要在 Session Manager 尚未连通时删除 SSH 入口。一、先把事实说清楚根据 AWS 官方文档Session Manager 可以通过浏览器或 AWS CLI 建立交互式会话不需要开放入站端口也不需要维护堡垒机或 SSH 密钥。访问控制由 IAM 完成。受管节点需要运行 SSM Agent、具备实例角色权限并能通过 HTTPS 访问 Systems Manager 所需服务端点没有公网出口的私有子网可使用 VPC Interface Endpoint。IMDSv2 与 Session Manager 解决的是不同问题Session Manager减少管理入口的公网暴露并集中管理“谁能连哪台机器”IMDSv2访问实例元数据前必须先取得会话令牌降低无令牌元数据请求带来的风险安全组与主机防火墙继续负责业务端口的网络边界CloudTrail、Session Manager 日志配置负责访问事件和会话审计。二、改造前检查满足四个前提准备以下变量exportAWS_REGIONap-southeast-1exportINSTANCE_IDi-0123456789abcdef0exportROLE_NAMEEC2-SSM-Core-RoleexportPROFILE_NAMEEC2-SSM-Core-Profile先确认本地身份和目标实例防止操作错账号或区域aws sts get-caller-identity aws ec2 describe-instances\--region$AWS_REGION\--instance-ids$INSTANCE_ID\--queryReservations[0].Instances[0].{State:State.Name,VpcId:VpcId,SubnetId:SubnetId,PrivateIp:PrivateIpAddress,Iam:IamInstanceProfile.Arn}检查清单实例处于running操作者有创建/附加 IAM 角色、修改 EC2 与启动 SSM 会话的权限实例能够出站访问 Systems Manager 服务通常需要 TCP 443当前 SSH 会话暂时保留用作回滚通道。事实边界具体服务端点随区域和代理版本存在差异应以 AWS 的 Session Manager prerequisites 页面及所在区域的服务端点为准。不要为了省事给实例添加与业务无关的宽泛 IAM 权限。三、创建最小可用的 EC2 实例角色3.1 创建信任策略保存为ec2-trust-policy.json{Version:2012-10-17,Statement:[{Effect:Allow,Principal:{Service:ec2.amazonaws.com},Action:sts:AssumeRole}]}创建角色并附加 AWS 托管策略aws iam create-role\--role-name$ROLE_NAME\--assume-role-policy-document file://ec2-trust-policy.json aws iam attach-role-policy\--role-name$ROLE_NAME\--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore aws iam create-instance-profile\--instance-profile-name$PROFILE_NAMEaws iam add-role-to-instance-profile\--instance-profile-name$PROFILE_NAME\--role-name$ROLE_NAMEAmazonSSMManagedInstanceCore是供 EC2 角色使用的 AWS 托管策略提供 Systems Manager 核心功能所需权限。它不是给日常人员登录使用的用户权限策略也不应附加给 IAM 用户来“图省事”。3.2 关联到实例如果实例目前没有实例配置文件aws ec2 associate-iam-instance-profile\--region$AWS_REGION\--instance-id$INSTANCE_ID\--iam-instance-profileName$PROFILE_NAME如果已有实例角色不要直接覆盖。先检查原角色承载的业务权限再把AmazonSSMManagedInstanceCore合并到现有角色或使用变更流程替换配置文件。IAM 变更可能需要短时间传播遇到“角色已创建但实例看不到”时先等待并复查不要反复创建同名资源。四、验证 SSM Agent 和网络出口Amazon Linux 2/2023 及许多 AWS 提供的 Ubuntu AMI 通常预装 SSM Agent但不能假设所有自定义镜像都已安装。通过当前 SSH 或控制台执行sudosystemctl status amazon-ssm-agent --no-pagersudosystemctlenable--nowamazon-ssm-agentsudojournalctl-uamazon-ssm-agent-n80--no-pagerUbuntu 的 Snap 安装可能使用服务名snap.amazon-ssm-agent.amazon-ssm-agent.service应以systemctl list-units | grep ssm的实际结果为准。从本地检查实例是否注册为受管节点aws ssm describe-instance-information\--region$AWS_REGION\--filtersKeyInstanceIds,Values$INSTANCE_ID\--queryInstanceInformationList[0].{Ping:PingStatus,Agent:AgentVersion,Platform:PlatformName,LastPing:LastPingDateTime}预期PingStatus为Online。如果结果为空按顺序检查实例角色是否关联、Agent 是否运行、DNS 是否正常、出站 443 是否允许、NAT 或 VPC Endpoint 是否可达。五、先建立第二条会话再删除22端口5.1 浏览器连接在 AWS 控制台进入 EC2 → Instances → 选择实例 → Connect → Session Manager → Connect。能看到 shell 并执行以下命令才算第一阶段成功whoamihostnameuname-asudo-ntrue;echo$?whoami常见结果是ssm-user。是否具备 sudo 取决于操作系统、Agent 和本机 sudoers 配置生产环境应按职责收紧而不是默认所有会话都拥有无限制 root 权限。5.2 CLI 连接本地安装 AWS CLI v2 和 Session Manager plugin 后执行aws ssm start-session\--region$AWS_REGION\--target$INSTANCE_ID保持当前 SSH 不退出再开一个 Session Manager 会话。确认重连、sudo、DNS 和业务检查均正常后才删除安全组中的 22 端口规则。先列出实例安全组aws ec2 describe-instances\--region$AWS_REGION\--instance-ids$INSTANCE_ID\--queryReservations[0].Instances[0].SecurityGroups[*].[GroupId,GroupName]\--outputtable删除规则时优先使用规则 ID避免误删同端口但不同来源的规则aws ec2 describe-security-group-rules\--region$AWS_REGION\--filtersNamegroup-id,Valuessg-0123456789abcdef0\--querySecurityGroupRules[?IsEgressfalse].[SecurityGroupRuleId,IpProtocol,FromPort,ToPort,CidrIpv4,Description]\--outputtable aws ec2 revoke-security-group-ingress\--region$AWS_REGION\--group-id sg-0123456789abcdef0\--security-group-rule-ids sgr-0123456789abcdef0不要复制示例 ID必须替换成自己账号中的真实资源。删除后重新启动一次 Session Manager 会话确认入口已从 SSH 切换到 SSM。六、把实例元数据切换为 IMDSv26.1 先评估兼容性旧版 SDK、脚本或代理可能仍使用 IMDSv1。AWS 官方建议先观察 CloudWatch 的MetadataNoToken指标确认无令牌调用降为零再对现有实例强制 IMDSv2。生产实例不要跳过这一步。查看当前配置aws ec2 describe-instances\--region$AWS_REGION\--instance-ids$INSTANCE_ID\--queryReservations[0].Instances[0].MetadataOptions确认应用兼容后执行aws ec2 modify-instance-metadata-options\--region$AWS_REGION\--instance-id$INSTANCE_ID\--http-endpoint enabled\--http-tokens required容器环境的 hop limit 需要按网络路径评估。AWS 对在容器环境中要求 IMDSv2 的场景建议将响应 hop limit 设为 2普通主机不要机械照抄应以实际工作负载和最小可用值验证。6.2 在实例内验证无令牌请求应失败curl-s-o/dev/null-w%{http_code}\n\http://169.254.169.254/latest/meta-data/再使用 IMDSv2 令牌TOKEN$(curl-sS-XPUT\-HX-aws-ec2-metadata-token-ttl-seconds: 21600\http://169.254.169.254/latest/api/token)curl-sS\-HX-aws-ec2-metadata-token:$TOKEN\http://169.254.169.254/latest/meta-data/instance-id返回值应等于当前实例 ID。不要把实例角色临时凭证打印到日志、工单或聊天窗口。七、可选用 Session Manager 做端口转发数据库和内部管理面板不必直接开放公网端口。以下 Bash 示例把实例的 5432 端口映射到本地 15432aws ssm start-session\--region$AWS_REGION\--target$INSTANCE_ID\--document-name AWS-StartPortForwardingSession\--parameters{portNumber:[5432],localPortNumber:[15432]}然后本地客户端连接127.0.0.1:15432。这不等于数据库可以忽略账号、TLS 和最小权限它只改变网络访问路径。Windows PowerShell 的 JSON 引号转义与 Bash 不同建议把参数写入 JSON 文件或按 PowerShell 语法调整。八、验收矩阵与回滚按下表逐项验收检查项命令或位置通过标准SSM 在线describe-instance-informationPingStatusOnline会话重连控制台和 CLI 各测试一次均可进入目标实例公网入口安全组入站规则不存在 TCP 22 公网规则元数据配置describe-instancesHttpTokensrequiredIMDSv1无令牌curl请求失败或返回 401IMDSv2带令牌curl返回当前实例 ID业务健康监控、日志、接口探测错误率与延迟无异常恢复通道EC2 Serial Console/救援方案权限和流程已验证回滚原则如果 SSM 不在线不要删除 22 端口如果强制 IMDSv2 后应用异常可在授权和变更记录完整的前提下临时将--http-tokens optional回滚并尽快升级 SDK 或脚本。回滚是恢复业务的短期措施不应成为长期配置。九、常见失败定位TargetNotConnected优先检查 SSM Agent、实例角色、区域是否一致、出站 443、DNS、NAT 或 VPC Endpoint。实例 ID 正确但区域写错是最常见的低级问题之一。关联角色后仍不在线IAM 需要传播时间检查实例配置文件而不只是 IAM 角色名称。实例必须关联 instance profile只有孤立的 role 不会自动生效。删除22端口后无法运维使用保留的原 SSH 会话恢复规则或通过 EC2 控制台救援能力处理。真正删除规则前必须完成第二会话重连测试。IMDSv2 开启后应用取不到凭证检查 SDK 版本、容器 hop limit 和MetadataNoToken指标。不要通过把元数据端口代理到公网等危险方式“修复”。十、结论这套方案的价值不是把 SSH 换一个入口而是把运维访问从“公网端口 长期密钥”迁移到“身份权限 受管通道”再通过 IMDSv2、日志和验收清单补齐关键边界。对于多账号、多环境团队还应进一步引入 IAM Identity Center、权限边界、Session Manager 日志、VPC Endpoint 和基础设施即代码。如果你正在规划国际业务、海外站点或 AI 服务可提供国际云服务器合规开户流程咨询、实例选型、部署与运维支持。客户本人完成实名、验证码、支付和合同确认可通过平台私信说明目标区域、业务类型、预计流量和预算以便先做架构与成本边界梳理。官方参考资料AWS Systems Manager Session Managerhttps://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.htmlSession Manager prerequisiteshttps://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-prerequisites.html连接 EC2 的 Session Manager 步骤https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-with-systems-manager-session-manager.htmlAmazonSSMManagedInstanceCore 托管策略https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSSMManagedInstanceCore.html新实例要求 IMDSv2https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html现有实例迁移到 IMDSv2https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-transition-to-version-2.html

相关新闻

开展即高燃!台湾高技亮相APIE2026,展台人气见证技术实力

开展即高燃!台湾高技亮相APIE2026,展台人气见证技术实力

2026/9/5 0:26:36

2026年7月16日,APIE2026第7届亚太国际智能装备博览会暨第28届中国青岛国际工业自动化技术及装备展览会正在青岛 火热开展!开展首日展馆内人头攒动、客商云集,自动化上下游企业齐聚一堂,共探智能制造发展新机遇。台湾高技携旗下滚珠…

抖音内容创作终极解决方案:从零开始构建你的无水印素材库

抖音内容创作终极解决方案:从零开始构建你的无水印素材库

2026/8/22 23:58:30

抖音内容创作终极解决方案:从零开始构建你的无水印素材库 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

Excel数据查询效率低?这个批量查询工具帮你一键解决多文件搜索难题

Excel数据查询效率低?这个批量查询工具帮你一键解决多文件搜索难题

2026/8/22 23:58:30

Excel数据查询效率低?这个批量查询工具帮你一键解决多文件搜索难题 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 在日常办公和数据处理工作中,你是否经常需要从数十甚至上百个…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/21 18:38:46

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/21 18:41:09

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/21 18:36:40

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/21 18:37:26

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/21 18:40:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/21 18:36:17

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/22 0:19:28

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/21 23:38:13

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/22 0:48:53

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…