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

Fly.io에서 의료 앱 만들기

원문 보기 위키 갱신

Fly.io는 의료 애플리케이션을 개발하고 호스팅하기에 아주 좋은 곳이에요. 무료로 시작해 몇 분 안에 완전히 안전한 솔루션을 구동할 수 있거든요. 의료 앱과 데이터는 일반적인 앱과는 다른 존재임을 저희도 잘 알고 있어요. 그래서 환자 데이터를 보호하고, 감사 담당자를 만족시키기 위한 준비도 갖추고 있습니다.

출처: 문서

본문

Fly.io는 의료 애플리케이션을 개발하고 호스팅하기에 아주 좋은 곳이에요! 무료로 시작해서 몇 분 안에 완전히 안전한 솔루션을 구동할 수 있습니다.

의료 앱과 데이터는 일반적인 것과는 다른 존재라는 점을 저희도 잘 알고 있습니다. 그리고 환자 데이터를 보호하고 감사 담당자를 만족시키기 위해 최선을 다하고 있어요. 저희는 SOC2(Type 2) 감사를 받고 있으며, BAA(비즈니스 제휴 계약)에 서명할 수 있고, 플랫폼이 규정 준수 요구 사항을 어떻게 충족하는지에 대한 질문에도 답변을 드릴 수 있습니다. (그냥 물어보세요!)

HIPAA를 준수하는 애플리케이션의 보안을 완성하는 것은 큰 작업이 될 수 있고, 어떤 호스팅 제공업체도 그 모든 것을 대신해 주지는 못해요. 하지만 Fly.io는 보안 우선 설계와 HIPAA를 간단하게 만들어 주는 여러 기능을 갖추고 있습니다:

접근 제어 (Access Control)

데이터베이스 엔드포인트 보안

Fly.io Postgres를 사용하든 자체 데이터베이스를 사용하든, 오직 애플리케이션만 데이터베이스 서버와 통신할 수 있도록 보장하기 위해 네트워크 ACL이 필요하지 않아요. Fly.io의 데이터베이스는 6PN과 WireGuard를 통해 앱 서버와 통신하며, 절대 공용 인터넷에 노출되지 않습니다.

스푸핑 방지 제어

악의적인 Fly.io 앱을 실행하는 공격자는 다른 Fly.io 인스턴스에 패킷을 스푸핑할 수 없어요. 저희는 이를 보장하기 위해 Linux 커널 제어, IP 라우팅, eBPF 프로그램을 함께 사용합니다. 1998년쯤에나 걱정할 법한 공격이긴 하지만, 혹시 감사 담당자가 신경 쓴다면 저희가 이미 해결해 놓았어요.

감사 (Audit)

로깅과 메트릭 중앙화

Fly.io는 앱에서 로그와 메트릭을 수집해서 필요한 곳 어디든 보낼 수 있어요. 모든 인스턴스의 로그를 하나의 피드로 받아 ELK 클러스터나 Splunk 인스턴스로 보낼 수 있고, Grafana를 메트릭에 연결해 앱에서 무슨 일이 일어나고 있는지에 대한 가시성과 감사 추적을 얻을 수 있습니다.

무결성 (Integrity)

강화된 호스팅 (Hardened Hosting)

Fly.io에서 실행되는 앱은 Rust 기반의 메모리 안전 KVM 하이퍼바이저인 Firecracker 내부에서 실행돼요. Firecracker는 Amazon이 Fargate의 엔진으로 설계한 것이죠. Fly.io에서는 사용자의 컨테이너 이미지를 받아서 VM으로 변환하여, 애플리케이션 간에 커널을 공유하지 않는 완전한 격리를 제공합니다. Firecracker VM은 호스트에서 사용자 영역 프로세스로 실행되며, cgroups, 파일·네트워크 네임스페이스, 리소스 제한, 권한 분리 등 현대적인 Linux 보안 도구로 추가적으로 잠겨 있습니다.

커널 취약점 대응

Fly.io는 호스트 커널 보안은 물론 앱이 실행되는 게스트 커널의 보안까지 책임집니다. 그래서 여러분이 걱정할 일이 하나 줄어들어요.

인증 (Authentication)

다중 인증 (Multi-Factor Authentication)

Fly.io는 표준 다중 인증 앱을 지원합니다. 당연하죠. 이걸 물어보셨다는 사실에 좀 서운하네요.

비밀 관리 (Secrets Management)

실행 중인 앱에 비밀을 노출하되 구성에는 유출하지 않는 것은 쉽습니다. 저희는 '쓰기 전용' 비밀 관리 방식을 제공해서 앱 비밀을 암호화된 상태로 유지하고, 앱을 실행 중인 인스턴스에만 노출시켜요. 토큰 기반 시스템을 사용하기 때문에 평문 비밀은 여러분의 앱을 실행하지 않는 머신에는 절대 닿지 않습니다.

기밀성 (Confidentiality)

어디에나 WireGuard

Fly.io 플랫폼은 WireGuard 메시로 연결된 호스트들로 엮여 있어요. 모든 것이 서로 WireGuard를 통해 통신합니다. WireGuard는 취약점 연구자들이 단순함, 감사 가능성, 현대적인 암호화를 위해 설계한 차세대 인커널(및 사용자 영역) VPN이에요. Linux 커널 구현의 WireGuard는 동적 메모리 할당 없이 정상 상태로 실행됩니다! WireGuard는 훌륭하며 안전한 네트워크 전송의 금본위제라고 할 수 있어요. 저희는 WireGuard의 완전한 메시를 운영합니다. 즉 인터넷에서 요청이 에지(edge)에 도착하면, 그 요청을 앱을 실행하는 호스트로 프록시할 때 그 통신은 WireGuard 가상 네트워크를 통해 이루어집니다.

또한 API에서도 WireGuard를 사용해요. 앱 인스턴스에 SSH가 필요하다고요? 그건 WireGuard를 통해 이루어집니다. Postgres 셸을 열어야 한다고요? WireGuard죠. Fly.io에서 실행되는 원격 빌더를 사용해 새 인스턴스를 배포한다고요? 맞아요. Docker 프로토콜 통신도 여러분의 머신에서 저희 호스트까지 WireGuard를 통해 실행됩니다.

전송 중 암호화 (Encryption In Transit)

위를 보세요! WireGuard는 인증된 Curve25519 키 교환과 함께 256비트 ChaCha20-Poly1305를 실행합니다.

어디에나 TLS (TLS Everywhere)

Fly.io는 사용자를 대신해 에지에서 TLS를 종료합니다. 저희는 Hyper와 Rustls 라이브러리를 사용해 HTTPS를 구현하는 메모리 안전한 Rust 기반 프록시 플릿을 운영하며, Qualys SSL Labs에서 A 등급을 받는 타이트한 구성으로 되어 있어요. 여러분이 아무것도 하지 않아도 됩니다.

정말 원한다면 에지 대신 애플리케이션에서 TLS를 종료할 수도 있어요. 하지만 그러고 싶지 않으실 거예요.

LetsEncrypt를 통한 자동 인증서 관리

Fly.io는 ACME 프로토콜을 관리해 LetsEncrypt TLS 인증서를 안전하게 프로비저닝합니다. 그래서 이것도 여러분이 크게 생각하지 않아도 될 일이 하나 더 늘었어요.

HTTP Strict Transport Security와 HTTPS 전용

(단일 구성 한 줄로) 앱을 HTTPS 전용으로 잠그는 것은 쉽습니다. HSTS 프로토콜을 사용해 브라우저를 애플리케이션의 보안 엔드포인트로만 안내하고 SSL-스트리핑 공격을 무력화할 수 있어요.

기본 거부 공용 네트워킹

Fly.io에서 실행되는 앱은 라우팅 가능한 IPv6 주소와 공유 IPv4 주소를 얻습니다. 하지만 사용자가 그 주소에 접속하면 앱 인스턴스에 직접 부딪히는 것이 아니라 저희 에지로 라우팅되고, 거기서 메모리 안전한 Rust 프록시가 트래픽을 안내합니다. 이게 의미하는 바는, 여러분이 요청하지 않는 한 앱의 어떤 것도 노출되지 않는다는 거예요. 보안 그룹 규칙이나 네트워크 ACL이 필요 없습니다! 기본적으로 잠겨 있는 것입니다.

6PN 사설 네트워킹

현대적인 애플리케이션은 종종 여러 서비스로 구성됩니다. 그중 일부는 인터넷의 무작위 사용자와 통신하기에 적합하고, 다른 일부는 숨겨 두는 것이 최선이에요. Fly.io는 여러 서비스로 구성된 복잡한 애플리케이션을 쉽게 배포할 수 있게 해 줍니다. 모든 Fly.io 앱은 조직 전용의 사설 IPv6 네트워크에 살고 있어요. 저희는 Linux 커널의 eBPF를 사용해 사설 네트워크가 서로 통신할 수 없음을 보장합니다. 추가 구성 없이 완전히 사적이에요. 이 기능을 6PN('IPv6 Private Network'의 약자)이라고 부르며, 데이터베이스, Redis 캐시, 백그라운드 작업 스케줄러를 배포하는 데 보안 잠금 작업이 전혀 필요하지 않다는 뜻입니다. 앱 서버는 바로 그것들과 통신할 수 있게 되고, 조직 외부의 누구도 그들에 전혀 접근할 수 없어요.

네트워크 분리 (Network Segregation)

'네트워크 분리(Network Segregation)'는 큰 은행의 엔터프라이즈 IT 관리자가 6PN을 설명할 때 쓰는 용어예요. 네, 여러분의 네트워크는 분리되어 있습니다.

안전한 네트워크 아키텍처

물론 6PN을 그렇게 부를 수도 있어요. 검토할 보안 그룹 규칙이 없다는 말씀을 드렸나요? 검토할 보안 그룹 규칙은 없습니다.

저장 중 암호화 (Encryption At Rest)

Fly.io Postgres 같은 데이터베이스는 저희의 영구 스토리지 기능인 Fly.io Volumes 위에 구축됩니다. 앱 인스턴스에 꽂아 마운트하는 드라이브처럼 동작하죠. 그리고 그 드라이브는 AES-XTS로 블록 수준에서 암호화됩니다. 저희가 토큰 기반 오케스트레이션 시스템을 사용해 드라이브 키를 관리하며, 키가 실제로 앱을 실행하는 호스트의 권한 있는 프로세스에서만 접근 가능하도록 보장해요. HITRUST CSF 요구 사항도 하나 체크하세요!

가용성 (Availability)

고가용성 (High Availability)

앱을 지리적 지역에 걸쳐 확장하는 것이, 그러니까 이 서비스의 핵심 목적 아닌가요? 아마 그럴 거예요? 어쨌든: 확실히 저희가 하는 일이에요.

DDoS 보호

Fly.io는 DDoS 보호 제공업체가 아니에요. 하지만 저희 업스트림에는 블랙홀 라우팅과 트래픽 스크러빙을 포함한 정교한 DDoS 도구가 있으며, 정기적으로 작동합니다.

롤링 배포 (Rolling Deployments)

모든 것을 망가뜨릴까 걱정하지 않고 자신 있게 Fly.io 앱을 배포할 수 있어요. 카나리와 헬스 체크를 포함한 롤링 배포를 제공하므로 항상 검증된 정상 버전의 앱이 실행되고 있습니다.

고급 앱 인스턴스 복구 공간 변조기

앱이 충돌하거나 종료되면 VM을 다시 시작합니다. 저희에게는 그 기술이 있습니다.

오프사이트 백업 (Off-Site Backups)

Fly.io 볼륨에 영구적으로 저장된 모든 것은 정기 일정에 따라 백업됩니다.

더 알아보기 (More info)

의료 앱으로 프로덕션 가기 블루프린트는 개발자 또는 운영 엔지니어를 위해 HIPAA 의료 앱에 대한 Fly.io 보안 평가, 파일럿 애플리케이션 출시, BAA 서명, 프로덕션 배포 과정을 안내합니다.

질문에 대한 답은 커뮤니티에서도 확인할 수 있어요.

원하는 것을 찾지 못했거나 더 알고 싶다면 연락 주세요.

더 알아보기 (Learn more)