네트워크 정책
네트워크 정책을 사용해 Machines에 들어오고 나가는 트래픽을 제어하는 방법을 알려드릴게요. 특정 포트와 프로토콜의 인그레스(ingress)와 이그레스(egress)를 허용하거나 제한할 수 있습니다. 신뢰할 수 없는 코드를 실행하거나 허용할 트래픽을 엄격히 통제하고 싶을 때 유용해요.
출처: 문서
본문
네트워크 정책을 사용해 Machines에 들어오고 나가는 트래픽을 제어할 수 있습니다. 정책을 사용해 특정 포트와 프로토콜의 인그레스와 이그레스를 허용하거나 제한할 수 있습니다. 신뢰할 수 없는 코드를 실행하거나 허용되는 트래픽을 잠글 때 유용합니다.
네트워크 정책은 Machines로 직접 들어오고 나가는 트래픽에만 적용됩니다. Fly Proxy를 통해 라우팅되는 트래픽에는 영향을 주지 않습니다.동작 방식
네트워크 정책에는 다음이 포함됩니다:
- 정책이 적용되는 Machines를 매칭할
selector. - 허용할 포트와 프로토콜을 지정하는 인그레스 또는 이그레스용
rules목록.
방향(인그레스 또는 이그레스)에 대한 규칙을 하나 만들면, 해당 방향의 기본값은 "전부 거부(deny all)"가 됩니다. 명시적으로 허용된 트래픽만 허용됩니다.
이그레스 트래픽을 HTTP/HTTPS로 제한하기
예를 들어 아웃바운드 HTTP 및 HTTPS 요청만 해야 하는 앱을 실행한다면 다음과 같은 정책을 만들 수 있습니다:
curl --location 'https://api.machines.dev/v1/apps/my-app-name/network_policies' \
--header 'Authorization: Bearer ***' \
--header 'Content-Type: application/json' \
--data '{
"name": "specific-egress",
"selector": {
"all": true
},
"rules": [
{
"action": "allow",
"direction": "egress",
"ports": [
{ "protocol": "tcp", "port": 80 },
{ "protocol": "tcp", "port": 443 }
]
}
]
}'
<FLY_API_TOKEN>과 my-app-name을 실제 값으로 바꾸세요.
Selectors
Selector는 네트워크 정책이 적용되는 Machines를 결정합니다. 다음 방법 중 하나 이상을 사용해 Machines를 대상으로 지정할 수 있습니다:
앱의 모든 Machines
앱의 모든 Machine에 정책을 적용하려면:
{ "all": true }
특정 Machine ID
고유 식별자로 개별 Machines를 대상으로 하려면:
{ "machines": [ { "id": "abc" }, { "id": "def" } ] }
메타데이터 매칭
메타데이터 속성에 따라 Machines를 선택하려면:
{ "metadata": { "role": "web", "env": "production" } }
이런 선택 방법을 결합해 지정된 모든 기준을 충족하는 Machines를 매칭하는 더 정밀한 타깃팅 규칙을 만들 수 있습니다.
Rules
각 규칙에는 다음이 있습니다:
action:allow만 지원됩니다.direction:ingress또는egress중 하나.ports: 포트와 프로토콜 객체의 목록.
예시:
{
"action": "allow",
"direction": "egress",
"ports": [
{ "protocol": "tcp", "port": 443 }
]
}
규칙이 정의되면 해당 방향의 다른 모든 트래픽은 기본적으로 거부됩니다.
API 요약
정책 생성 또는 업데이트
POST /v1/apps/<app_name>/network_policies
요청 본문:
{
"name": "policy-name",
"id": "optional-policy-id",
"selector": { ... },
"rules": [ ... ]
}
기존 정책을 업데이트하려면 id 필드를 포함하세요.
정책 목록
GET /v1/apps/<app_name>/network_policies/
정책 삭제
DELETE /v1/apps/<app_name>/network_policies/<policy_id>
문제 해결
- 정책을 만들거나 업데이트한 후 Machines를 재시작하거나 다시 배포해야 변경 사항이 적용됩니다.
- DNS 마스킹을 피하려면 차단된 트래픽을 테스트할 때 호스트 이름이 아닌 직접 IP 주소를 사용하세요.
selector가 올바르고 기대하는 Machines와 일치하는지 확인하세요.- 트래픽이 예기치 않게 여전히 허용된다면 Fly Proxy를 통과하는지 확인해 보세요.