在 AWS 上,Security Group(安全群組)就像是幫 EC2、RDS 等資源設立的一道虛擬防火牆,它控制著「誰可以進來、誰可以出去」。
是一種 虛擬防火牆(Virtual Firewall),用來保護 VPC 中的資源。
適用於:EC2、RDS、Lambda(VPC 模式)、ECS、Elastic Load Balancer 等。
運作在「資源層級(instance-level)」,而不是子網層級。
同一個資源可以套用多個 Security Group。
1.Inbound(入站)規則:誰可以連進來?
控制哪些 IP/Port/協定可以「對我發出連線請求」。
範例:只允許 TCP:22(SSH)從公司 IP 進來。
2.Outbound(出站)規則:我可以連出去嗎?
控制這個資源「可以連出去哪些地方」。
預設是開放所有出站(0.0.0.0/0),可以修改限制範圍。
Security Group 是「狀態式(Stateful)」防火牆: 如果 A 開放入站給 B,B 自動可以回應。
無需在出站也加規則。
例:你開 port 80 給外部訪問網站,不需手動設出站規則。
Security Group 可以 引用另一個 SG 作為來源。
非常適合「服務對服務」之間的安全連線:
例:
App Server SG 入站允許:來自 Database SG on port 3306
好處:動態、IP 不固定也 OK
Security Group 不支援 deny 規則。
這意味著:沒被允許的,就是預設拒絕。
如果你需要細緻的「拒絕某些 IP」,請用 NACL(Network ACL)。
預設 VPC 的 SG 允許自己和自己通訊。
適合用於:ECS Service、Auto Scaling Group 等動態建立的資源群彼此互連。
一但環境變複雜,你會看到一堆叫 sg-12345678 的鬼東西。
建議命名範例:
sg-prod-web-serversg-dev-rds-mysqlsg-shared-bastion
Tag:標記專案、環境(env)、負責人等,方便日後管理。
小補充: 真實慘案,之前在幫客戶進行review的時候,一定常常會發現有莫名其妙的IP出現在DB的SG,出現在那裏也不敢刪也不敢動,擔心會影響到線上的系統,所以標籤千萬注意。
常見實作範例
資源類型 | 入站規則 | 出站規則 |
---|---|---|
EC2 Bastion | TCP 22 from 公司 IP | All outbound |
Web Server | TCP 80/443 from 0.0.0.0/0 | TCP 443 to 外部 API |
App Server | TCP 8080 from Web Server SG | TCP 3306 to RDS SG |
RDS | TCP 3306 from App SG | 通常不開放任何出站 |
注意點 | 說明 |
---|---|
不要亂開 0.0.0.0/0 | 除非真的要對外提供服務,否則只允許內部或特定 IP |
多用 SG 引用 | 跨服務安全通訊更方便,也不怕動態 IP 變更 |
分環境設 SG | dev / staging / prod 請用不同的 SG,以防誤打誤撞 |
定期審查 | 每季檢查 SG,刪除不必要的 port 或已廢棄的規則 |
日誌記錄 | 搭配 VPC Flow Logs 查看實際流量,有助於除錯與稽核 |
小結一句話:
Security Group 就是 AWS 上的「誰可以來找我」規則,一定要控好、控精、控細。