0Pricing
Cloud & IT Cert Prep · 课时

安全组与密钥对

使用安全组控制入站和出站流量,并通过 EC2 密钥对管理 SSH 身份验证。

安全组与密钥对 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

什么是安全组?

安全组是一种有状态的虚拟防火墙,用于控制进出 EC2 实例(或 RDS、Lambda、ELB 等其他 AWS 资源)的入站和出站流量。安全组在实例级别运行,每条规则都指定协议(TCP/UDP/ICMP)、端口范围和来源/目标(IP 范围或其他安全组)。与传统防火墙不同,安全组是有状态的:如果您允许入站流量,其响应流量会自动获准出站,无需显式规则。

入站和出站规则

安全组具有独立的入站和出站规则集。入站规则控制到达实例的流量,默认情况下,所有入站流量都会被拒绝。出站规则控制离开实例的流量,默认情况下,允许所有出站流量。您可添加显式 Allow 规则;安全组中没有显式 Deny 规则(需要显式拒绝时,请使用网络 ACL)。安全组中的所有规则会使用逻辑 OR 一起评估,任何匹配的 Allow 规则都会允许该流量。

# Add an inbound SSH rule to a security group
aws ec2 authorize-security-group-ingress \
  --group-id sg-12345678 \
  --protocol tcp \
  --port 22 \
  --cidr 203.0.113.0/24

# Add an inbound HTTP rule
aws ec2 authorize-security-group-ingress \
  --group-id sg-12345678 \
  --protocol tcp \
  --port 80 \
  --cidr 0.0.0.0/0

安全组链式引用

安全组支持来源/目标安全组引用,这比指定 IP 范围更灵活、更安全。例如,ALB 安全组允许端口 443 上来自 0.0.0.0/0 的流量。EC2 实例的安全组仅允许来自ALB 安全组 ID的入站端口 8080 流量,而不允许来自任意 IP 的流量。即使 ALB 被替换或扩展,规则仍会正确生效,无需更改 IP。这种模式可为多层架构构建分层、动态的防御机制。

# Allow inbound from another security group (not an IP)
aws ec2 authorize-security-group-ingress \
  --group-id sg-ec2-instances \
  --protocol tcp \
  --port 8080 \
  --source-group sg-load-balancer

安全组是有状态的

有状态意味着安全组会跟踪连接状态。如果您的入站规则允许来自互联网的 TCP 端口 80 流量,且客户端发出请求,则响应数据包(出站)会自动获准返回给客户端,即使没有针对端口 80 的出站规则也是如此。这与网络 ACL有根本区别,网络 ACL 是无状态的,需要为两个方向的流量都设置显式规则。有状态特性使安全组更易于针对典型应用程序流量模式进行配置。

一个实例上的多个安全组

您可以为单个 EC2 实例附加多个安全组(默认最多 5 个,可调整)。所有已附加安全组中的规则会取并集(OR 逻辑),只要任意安全组允许某个请求,该请求就会被允许。这意味着安全组只能添加权限,绝不能限制权限。若要收紧访问权限,必须删除或修改规则,而不是添加限制更严格的安全组。对于有关访问限制的考试题,请牢记这种累加行为。

默认安全组行为

每个 VPC 都包含一个默认安全组。其默认规则为:入站允许来自同样位于默认安全组中的其他实例的所有流量;出站允许前往任何位置的所有流量。这样设计是为了允许新实例默认进行通信。对于生产环境,应创建具有严格入站规则集的自定义安全组,并移除实例与默认安全组的关联,以避免意外暴露。

密钥对:工作原理

EC2 密钥对使用非对称加密进行 SSH 身份验证。AWS 会生成密钥对(或者您导入自己的公钥):AWS 存储公钥,并在启动时将其注入实例;您下载并保存私钥(.pem 文件),AWS 永远不会存储它。SSH 使用私钥向服务器证明您的身份,而无需传输密码。私钥必须具有严格的权限(chmod 400),否则 SSH 将拒绝使用它。

# Create a key pair and save the private key
aws ec2 create-key-pair \
  --key-name ProdKey \
  --key-type rsa \
  --key-format pem \
  --query 'KeyMaterial' \
  --output text > ProdKey.pem
chmod 400 ProdKey.pem

没有密钥对时恢复访问权限

如果您丢失了 Linux EC2 实例的私钥,就无法按常规方式通过 SSH 登录。恢复选项包括:Systems Manager Session Manager(如果 SSM 代理正在运行且已附加 IAM 角色,无需密钥)、EC2 Instance Connect(通过浏览器或 CLI 注入临时密钥,需要开放 SSH 端口和 EIC 权限),或者停止实例,分离根 EBS 卷,将其附加到另一实例,修改 authorized_keys 文件,再重新附加并重启。对于 Windows,请使用 Systems Manager 检索密码。

# Connect using EC2 Instance Connect (temporary key injection)
aws ec2-instance-connect send-ssh-public-key \
  --instance-id i-0abcdef1234567890 \
  --instance-os-user ec2-user \
  --ssh-public-key file://~/.ssh/id_rsa.pub
ssh -i ~/.ssh/id_rsa ec2-user@54.123.45.67

最佳实践:限制 SSH 访问

将 SSH(端口 22)对 0.0.0.0/0 开放,会使您的实例暴露于互联网上任何位置发起的暴力破解和凭据填充攻击。最佳实践:将 SSH 限制为您的特定企业 IP 范围,或在公有子网中使用堡垒主机(跳板机),并为其配置严格控制的安全组,然后从堡垒主机通过 SSH 访问私有实例。更好的做法是使用Systems Manager Session Manager,完全消除 SSH 端口暴露,无需任何入站规则。

# Example: restrict SSH to a corporate IP range
aws ec2 authorize-security-group-ingress \
  --group-id sg-12345678 \
  --protocol tcp \
  --port 22 \
  --cidr 198.51.100.0/24  # Your corporate CIDR

安全组限制和配额

安全组的主要默认限制(可通过服务配额调整)包括:每个 VPC 最多2,500 个安全组、每个安全组最多60 条入站规则和 60 条出站规则,以及每个网络接口 5 个安全组。将另一个安全组作为来源引用时,每个被引用安全组与规则的组合都会计为一条规则。如果达到规则限制,请通过引用安全组 ID 而非单个 IP 范围来整合规则,或使用前缀列表将多个 CIDR 组合为一个易于管理的实体。

托管前缀列表

托管前缀列表是一组 CIDR 块,您可以在安全组规则或路由表中引用它。AWS 为 S3 和 CloudFront 等服务维护AWS 托管前缀列表,因此您无需自行维护会随时间变化的 IP 范围,便可允许往返这些服务的流量。您还可以创建客户托管前缀列表来组合企业 IP 范围,在一处更新前缀列表后,所有引用它的安全组都会自动继承该变更。

# Allow outbound HTTPS to Amazon S3 using the AWS-managed prefix list
aws ec2 authorize-security-group-egress \
  --group-id sg-12345678 \
  --ip-permissions '[{"IpProtocol":"tcp","FromPort":443,"ToPort":443,"PrefixListIds":[{"PrefixListId":"pl-63a5400a"}]}]'

快速检查

检验您对本课 AWS Solutions Architect (SAA-C03) 概念的理解。

课程回顾

在本课中,您学习了:安全组是有状态的虚拟防火墙,默认拒绝流量,仅允许符合规则的流量、通过 ID 链式引用安全组比使用 IP 范围更安全、更灵活,以及密钥对提供非对称 SSH 身份验证,而 Systems Manager Session Manager 无需开放 SSH 端口。接下来我们将介绍 EC2 存储选项:Instance Store 与 EBS。

常见问题解答

「安全组与密钥对」课时是免费的吗?

是的 — 「安全组与密钥对」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「安全组与密钥对」这节课中我会学到什么?

使用安全组控制入站和出站流量,并通过 EC2 密钥对管理 SSH 身份验证。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「安全组与密钥对」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 启动您的第一个 EC2 实例
  2. 实例类型与定价模型
  3. 安全组与密钥对
  4. EC2 存储:实例存储与 EBS
← 返回 Cloud & IT Cert Prep