헬스케어 앱 프로덕션 출시하기
이 가이드에서는 HIPAA 규정을 준수하는 헬스케어 애플리케이션을 Fly.io에서 운영하기 위해 알아야 할 보안 요소를 설명하고, 파일럿 앱을 시작한 뒤 BAA(업무 제휴 계약, Business Associate Agreement)를 체결하고 프로덕션에 배포하는 전체 과정을 안내해 드릴게요. 개발자나 운영 엔지니어가 Fly.io의 보안을 평가하는 과정을 단계별로 따라갈 수 있도록 구성했습니다.
출처: 문서
본문
개요
Fly.io는 보안 연구자들이 생산성과 보안을 모두 갖추도록 처음부터 설계했습니다. 자주 배포하는 생산적인 팀에게 HIPAA 규정을 준수하는 프로덕션 헬스케어 애플리케이션을 운영하기 좋은 환경이 됩니다.
이 가이드는 개발자 또는 운영 엔지니어가 HIPAA 헬스케어 앱을 위해 Fly.io의 보안을 평가하고, 파일럿 애플리케이션을 시작하고, BAA(업무 제휴 계약)에 서명하고, 프로덕션에 배포하는 과정을 안내합니다.
HIPAA와 Fly.io 프라이머
HIPAA(건강 보험 이동성 및 책임에 관한 법률, Health Insurance Portability and Accountability Act)는 민감한 환자 데이터를 보호하기 위한 기준을 정합니다. 보호된 건강 정보(PHI, protected health information)를 처리하는 모든 회사는 필요한 물리적, 네트워크, 프로세스 보안 조치를 모두 갖추고 준수해야 합니다.
Fly.io는 "최소 권한 원칙(principle of least privilege)" 방식으로 보안을 다룹니다. 헬스케어 앱 개발자가 Fly.io에서 기본으로 얻을 수 있는 주요 사항은 다음과 같습니다:
데이터 보호와 암호화
HIPAA는 무단 접근을 방지하기 위해 PHI가 전송 중(in transit)과 저장 상태(at rest) 모두에서 암호화되도록 요구합니다:
- 전송 중(In Transit): Fly.io는 네트워크 간에 이동하는 데이터를 암호화하기 위해 WireGuard를 사용해 HIPAA의 전송 보안 요구사항을 준수합니다.
- 저장 상태(At Rest): Fly.io는 암호화된 NVMe 사용자 볼륨에 저장된 데이터의 보안을 보장하며, 이는 HIPAA가 스토리지 보안에 요구하는 암호화 표준과 일치합니다.
접근 제어
PHI에 대한 접근은 승인된 인력에게만 제한되어야 하며, 이는 다음을 통해 관리됩니다:
- 네트워크 격리: Fly.io의 각 애플리케이션은 기본적으로 자체 사설 네트워크 안에서 실행되어 무단 접근의 위험을 줄입니다.
- 시크릿 관리: Fly.io는 API 자격 증명과 환경 변수를 안전하게 저장하고 처리하는 시크릿 매니저를 제공하며, 민감한 정보가 승인된 애플리케이션에만 접근 가능하도록 보장합니다.
- 격리된 애플리케이션 환경: Fly.io는 조직이 서로 다른 환경을 위해 별도의 조직을 만들 수 있게 해 주며, 프로덕션 환경이 테스트 및 스테이징 환경과 격리되도록 보장합니다.
- 워크로드 격리(Workload Isolation): Fly.io의 Docker 워크로드는 Firecracker VM 런타임을 통해 커널 하드웨어 수준에서 격리됩니다. 이러한 워크로드는 Fly.io 전용 하드웨어의 보안 데이터 센터에서 호스팅되어 무단 접근의 위험을 최소화하고 PHI 데이터를 엄격하게 통제함으로써 HIPAA 준수를 보장합니다.
감사 통제(Audit Controls)
HIPAA는 PHI를 포함하는 시스템의 활동을 기록하고 검토하는 하드웨어, 소프트웨어, 절차적 메커니즘을 구현하도록 요구합니다:
- 로깅과 모니터링: Fly.io는 조직이 접근과 사용을 모니터링하고 기록할 수 있게 해 주며, HIPAA의 정보 시스템 활동 검토 요구사항 준수를 돕습니다.
- 버전 관리되는 구성: Fly.io는 애플리케이션 배포를 관리하기 위해 Dockerfile과 fly.toml 구성 파일을 사용합니다. 이러한 파일은 Github 같은 버전 관리 시스템에 커밋할 수 있어 인프라 변경에 대한 포괄적인 감사 추적(audit trail)을 제공합니다. 이 기능은 PHI를 처리하는 시스템의 수정과 관리에 있어 추적성과 책임성에 대한 HIPAA의 요구사항을 지원합니다.
데이터 무결성
HIPAA를 준수하기 위해 기업은 PHI가 승인되지 않은 방식으로 변경되거나 파괴되지 않도록 보장해야 합니다:
- 데이터 저장과 백업: Fly.io의 인프라는 데이터 손실을 방지하기 위해 암호화된 볼륨의 정기적인 스냅샷을 포함한 견고한 데이터 무결성 제어를 제공합니다.
- 재현 가능한 배포: Fly.io가 Docker를 사용하면 애플리케이션 배포가 재현 가능하고 대부분 읽기 전용 상태로 잠글 수 있습니다. 이는 애플리케이션 환경에 대한 무단 수정의 가능성을 줄여, 승인되지 않은 변경이나 파괴로부터 PHI를 보호하라는 HIPAA의 요구사항을 충족합니다.
물리적 보안
PHI가 저장된 데이터 센터에 대한 물리적 접근은 통제되어야 합니다:
- 데이터 센터: Fly.io는 접근 제한, 감시, 환경 제어를 갖춘 보안 데이터 센터에서 서비스를 호스팅하여 PHI를 저장하고 처리하는 하드웨어의 물리적 보안을 보장합니다.
- 지역 데이터 제어: Fly.io는 간단한 명령으로 데이터가 저장되고 처리되는 물리적 지역(region)을 제어할 수 있게 해 주며, 미국 같은 지정된 보안 지역 내에 PHI를 저장함으로써 HIPAA의 데이터 상주(data residency) 요구사항 준수를 지원합니다.
자세한 내용은 https://fly.io/docs/about/healthcare과 https://fly.io/security에서 확인할 수 있습니다. Fly.io의 보안 인프라 및 관행에 대해 추가 질문이 있다면 연락해 주세요.
파일럿 애플리케이션 시작하기
파일럿 앱을 배포하는 가장 빠른 방법은 Fly.io Speedrun을 따라 해 보는 것입니다.
무료 데모 계정에 파일럿 애플리케이션을 위한 리소스가 충분하지 않다면, 유료 플랜으로 업그레이드하거나 문의(mailto:sales@fly.io)해 다른 방법을 마련할 수 있습니다.
배포 지역 지정하기
Fly는 전 세계 30개 이상의 지역 중 가장 가까운 곳을 기본 데이터 지역으로 자동 감지합니다.
기본 지역이 앱을 호스팅하고 싶은 곳이 아니라면 fly platform regions를 실행해 가장 최신 지역 목록을 확인하세요.
fly platform regions
NAME \tCODE\tGATEWAY\tCAPACITY\tLAUNCH PLAN+
North America
Ashburn, Virginia (US) \tiad \t✓ \t164
Chicago, Illinois (US) \tord \t✓ \t385
Dallas, Texas (US) \tdfw \t✓ \t426
Los Angeles, California (US)\tlax \t✓ \t635
San Jose, California (US) \tsjc \t✓ \t2399
Secaucus, NJ (US) \tewr 233
Toronto, Canada \tyyz \t✓ \t 70
# ... Lots more regions...
그런 다음 원하는 지역을 선택하세요:
$ fly regions add ord
원하지 않는 지역도 제거할 수 있습니다:
$ fly regions remove sin
애플리케이션은 지정된 지역에 자동으로 배포되며, 지역 간 통신은 사설 암호화 WireGuard 네트워크를 통해 이루어집니다.
Secrets Manager에 API 키와 자격 증명 추가하기
Fly.io의 시크릿 매니저는 애플리케이션의 API 자격 증명과 시크릿을 보안 볼트에 저장합니다. 내용은 암호화된 상태로 유지되며 실행 중인 Machine 인스턴스에서 환경 변수로만 접근할 수 있습니다.
질문이 있으면 솔루션 아키텍트와 상담하기
Fly를 평가하는 과정에서 인프라, 보안 또는 서비스 약관에 대해 질문이 있으면 언제든지 커뮤니티 포럼에서 물어보거나 Fly.io에 이메일로 질문을 보낼 수 있습니다.
프로덕션에 배포하기
Fly.io를 평가하고 BAA를 확보했다면 프로덕션으로 나아갈 때입니다. 이 가이드의 나머지 부분에서는 격리된 프로덕션 환경을 설정하고, 접근을 제어하고, 애플리케이션을 배포하는 방법을 안내합니다.
BAA(업무 제휴 계약)에 서명하기
HIPAA 앱 배포를 시작할 준비가 되면 서류 작업이 필요합니다 (걱정 마세요, 디지털 서명을 사용합니다). 모든 것이 규정을 준수하도록 하기 위해서입니다.
- HIPAA/BAA 문서가 포함된 컴플라이언스 패키지를 선택하세요.
- 대시보드에 로그인해 https://fly.io/dashboard/personal/compliance에서 서명된 BAA를 요청하거나 문의해 주시면 도와드리겠습니다.
격리된 프로덕션 환경 프로비저닝하기
프로덕션 환경이 이 애플리케이션을 테스트하는 데 사용된 테스트 및 스테이징 환경과 분리되도록 하세요.
Fly는 "조직(organization)"을 사용해 "애플리케이션"에 대한 접근을 제어합니다. 프로덕션 환경은 자체 접근 제어가 필요하므로, 모든 프로덕션 애플리케이션을 담을 새 조직을 만들겠습니다.
# Replace $MYORG with the name of your organization
$ fly orgs create $MYORG-production
Fly.io 내에서 새 조직을 만드는 단계를 따라 진행하게 됩니다. 새 조직을 위해 결제 수단을 추가하고 적절한 플랜을 선택해야 합니다. 이 과정에서 도움이 필요하거나 플랜이 여러 조직에 걸쳐 어떻게 적용되는지 궁금하다면 연락해 주세요.
프로덕션 환경에 팀원 초대하기
프로덕션 환경에 접근할 수 있는 팀원에게 접근 권한을 부여하세요:
$ fly orgs invite somebody@$MYORG.com --org $MYORG-production
애플리케이션 시작하기
다음으로 각 환경에 대한 fly.toml 파일이 있는지 확인하세요:
$ cp fly.toml fly.staging.toml
$ mv fly.toml fly.production.toml
fly launch를 실행해 프로덕션 환경을 프로비저닝합니다.
# Replace $MYAPPNAME with the name of your app
$ fly launch --name $MYAPPNAME-production --path fly.production.yml --org $MYORG-production
An existing fly.toml file was found for app $MYAPPNAME
? Would you like to copy its configuration to the new app? (y/N) y
구성 파일을 복사할지 물어보면, 이전에 스테이징이었던 fly.toml 파일의 동일한 설정을 사용하려는 경우 y를 선택하세요. 이 fly.toml 파일들은 저장소에 커밋해 두는 것이 좋습니다.
배포 중 또는 배포 후에 문제가 발생하면 fly logs --path fly.production.yml을 실행해 애플리케이션이 기록하는 오류를 확인할 수 있습니다.
SSL 인증서와 사용자 지정 도메인 생성하기
다음으로 fly certs를 통해 도메인 이름을 새 프로덕션 환경으로 연결합니다.
$ fly certs add myappname.com --path fly.production.yml
명령 출력에는 Fly.io의 애플리케이션을 가리키도록 DNS 레코드를 업데이트하는 데 필요한 정보가 포함됩니다.
애플리케이션 배포하기
마지막으로 fly deploy --path fly.production.yml을 실행해 애플리케이션을 배포한 다음, 브라우저에서 애플리케이션을 열어 정상적으로 실행 중인지 확인하세요.
마무리
Fly.io는 HIPAA 규정을 준수하는 헬스케어 애플리케이션을 배포하기 위한 안전하고 생산적인 플랫폼입니다. 이 플랫폼은 PHI가 HIPAA 요구사항에 따라 보호되도록 필요한 보안 제어와 기능을 제공하면서도, 개발 팀이 자주 배포하고 빠르게 확장할 수 있는 유연성을 제공합니다.
관련 읽을거리
- Healthcare apps on Fly.io 암호화, 네트워크 격리, 감사 통제를 포함해 Fly.io가 HIPAA 준수 앱을 어떻게 지원하는지에 대한 개요.
- Going to production checklist Fly.io 앱을 위한 일반적인 프로덕션 준비 체크리스트.