본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

네트워크 정책

원문 보기 위키 갱신

네트워크 정책을 사용해 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를 통과하는지 확인해 보세요.

더 알아보기 (Learn more)