Säkerhetsgrupper
En säkerhetsgrupp är en tillståndskänslig brandvägg kopplad till instanser och lastbalanserare. Regler tillåter trafik; allt som inte uttryckligen tillåts nekas. Eftersom grupper är tillståndskänsliga tillåts returtrafik för en tillåten anslutning automatiskt — du lägger inte till en matchande omvänd regel.
Skapa en grupp och regler
Skapa en grupp med scope till en VPC, lägg sedan till regler. Varje regel har:
- Riktning —
ingress(inkommande) elleregress(utgående). - Protokoll —
tcp,udp,icmpellerany. - Portintervall — t.ex.
443, eller ett intervall (utelämna för ICMP /any). - Källa / destination — ett CIDR (t.ex.
0.0.0.0/0för var som helst) eller en referens till en annan säkerhetsgrupp (tillåt trafik från medlemmar i den gruppen, praktiskt för skiktade appar). - Åtgärd —
allow(standard) ellerdeny, med en prioritet (lägre vinner).
fm network security-group create --name web --vpc my-vpc
fm network security-group add-rule web \
--direction ingress --protocol tcp --port 443 --source 0.0.0.0/0resource "frostmoln_security_group" "web" {
vpc_id = frostmoln_vpc.main.id
name = "web"
}
resource "frostmoln_security_group_rule" "https" {
security_group_id = frostmoln_security_group.web.id
direction = "ingress"
protocol = "tcp"
port_range_min = 443
port_range_max = 443
remote_cidr = "0.0.0.0/0"
}Ändra en instans säkerhetsgrupper
Du kan ersätta säkerhetsgrupperna på en körande instans utan att återskapa den. Det finns två omfattningar:
- Enhetligt (det vanliga fallet) — en uppsättning som tillämpas på varje nätverksport på instansen.
- Per port — en annan uppsättning på enskilda portar på en instans med flera nätverkskort (t.ex. ett frontend-nätverkskort öppet mot internet och ett hanteringskort som inte är det). Använd detta endast när portarna verkligen behöver skilja sig åt; använd annars den enhetliga omfattningen.
Alla tre klienterna använder ersättningssemantik: uppsättningen du anger blir den fullständiga uppsättningen — varje grupp som inte listas tas bort.
Enhetligt (alla portar)
I portalen öppnar du instansen och redigerar säkerhetsgrupperna under fliken Nätverk. Med CLI eller Terraform:
# Ersätt instansens grupper på alla portar (säkerhetsgrupps-ID:n, inte namn)
fm compute instance security-groups set <instance-id> \
--security-group <sg-id> --security-group <sg-id>
# Visa nuvarande grupper (listar uppdelningen per port när portarna skiljer sig åt)
fm compute instance security-groups get <instance-id>resource "frostmoln_instance" "web" {
# ... namn, flavor, image, subnät ...
security_groups = [
frostmoln_security_group.web.id,
frostmoln_security_group.ssh.id,
]
}Per port (flera nätverkskort, olika uppsättningar)
Portalen visar en per-port-redigerare när en instans portar bär olika uppsättningar. Hitta port-ID:t i utdata från ... security-groups get (den listar portarna när de skiljer sig åt), och rikta sedan in dig på en port — de övriga lämnas orörda.
# Rikta in dig på en enda port via dess port-ID
fm compute instance security-groups set <instance-id> \
--port <port-id> --security-group <sg-id>resource "frostmoln_instance_port_security_groups" "frontend_nic" {
instance_id = frostmoln_instance.web.id
port_id = "b1e0f6c2-1234-4a5b-9c8d-abcdef012345" # port-ID:t från per-port-listan
security_groups = [frostmoln_security_group.web.id]
}Hantera en given port via antingen frostmoln_instance.security_groups (enhetligt) eller en per-port-resurs — inte båda.
Bra att veta
- Ändringen är asynkron. Portalen och CLI:t återvänder omedelbart och uppdateringen tillämpas i bakgrunden — kör
... security-groups getigen för att bekräfta.terraform applyväntar tills operationen är klar. - En tom uppsättning tar bort alla grupper och lämnar målet på VPC:ns default-drop (vanligtvis ingen inkommande åtkomst). CLI:t kräver
--clearför detta; i Terraform anger dusecurity_groups = []. - Att förstöra en
frostmoln_instance_port_security_groups-resurs tar inte bort portens grupper — det slutar bara att Terraform hanterar dem. För att faktiskt rensa en port anger dusecurity_groups = []och kör apply först, och tar sedan bort resursen. - En port med portsäkerhet avstängd avvisar en icke-tom uppsättning — du kan inte koppla grupper till en port vars portsäkerhet är avstängd.
God praxis
- Öppna endast de portar du behöver; föredra smala käll-CIDR:er framför
0.0.0.0/0. - Begränsa SSH (22) till kända administrativa adresser.
- Modellera skikt genom att referera grupper — låt t.ex.
web-gruppen nådb-gruppen på databasporten, i stället för att använda IP-intervall. - Ett fall sätter avsändarmatchningen ur spel. Både en käll-CIDR och en gruppreferens blir en matchning på avsändarens adress, och den bygger på att en instans inte kan göra anspråk på en adress den inte äger. En instans som anges som nästa hopp i en VPC-rutt får göra just det, så ingen avsändarregel av något slag begränsar den. Har en VPC en sådan rutt, betrakta den instansen som förmögen att nå allt i VPC:n, och använd något den inte kan förfalska där det spelar roll.