13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] 클라우드 보안 감사

  • [보안] 클라우드 보안 감사 체크리스트: AWS, Azure, GCP 공통 점검 사항과 베스트 프랙티스

    [보안] 클라우드 보안 감사 체크리스트: AWS, Azure, GCP 공통 점검 사항과 베스트 프랙티스

    [보안] 클라우드 보안 감사 체크리스트: AWS, Azure, GCP 공통 점검 사항과 베스트 프랙티스

    클라우드 보안 감사 이야기가 나오면 많은 분들이 일단 한숨부터 쉬시더라고요. 계정은 많고, 권한은 꼬여 있고, 네트워크는 복잡하고, 로그는 쌓이는데 정작 뭘 먼저 봐야 할지 막막하거든요. 저도 홈랩이랑 실제 운영 환경을 오가면서 비슷한 삽질을 꽤 했습니다 ㅎㅎ 처음엔 서비스별 메뉴만 뒤지다가 시간을 다 썼었는데, 나중에 보니 공통 체크리스트를 먼저 잡아두는 게 훨씬 효율적이었습니다. 이번 글에서는 클라우드 보안 감사를 할 때 AWS, Azure, GCP에서 공통으로 봐야 하는 항목을 한 번에 정리해보겠습니다.

    특히 이 글은 체크리스트 성격으로 구성했습니다. 즉, 이론만 설명하는 글이 아니라 실제로 점검 순서를 잡고, 빠르게 누락을 찾고, 운영팀과 보안팀이 같은 화면을 보면서 이야기할 수 있게 만드는 데 초점을 맞췄습니다. AWS 보안, Azure 보안, GCP 보안을 각각 따로 공부해도 결국 핵심은 비슷하더라고요. 인증, 권한, 네트워크, 로깅, 암호화, 자산 파악, 그리고 운영 통제. 여기서 중요한 포인트입니다.

    클라우드 보안 감사 전체 구조를 보여주는 멀티 클라우드 아키텍처 이미지

    멀티 클라우드 환경에서 IAM, 네트워크, 로깅, 암호화, 자산 관리가 어떻게 연결되는지 보여주는 개요 이미지입니다.

    1. 클라우드 보안 감사가 왜 어려운가

    쉽게 말해, 온프레미스(On-premise, 사내 구축 환경)에서는 자산이 한곳에 모여 있었는데 클라우드에서는 계정, 구독, 프로젝트 단위로 권한과 리소스가 흩어집니다. 여기에 사람이 직접 만든 예외 설정이 계속 쌓이니까, 어느 날 보면 기본 정책보다 예외가 더 많아지기도 합니다. 실제로 써보니까 보안 사고는 거창한 제로데이보다 오래된 액세스 키, 과도한 관리자 권한, 퍼블릭 오픈 스토리지 같은 기본 실수에서 더 자주 시작되더라고요.

    감사(Audit, 점검)의 목적은 단순히 체크박스를 채우는 게 아닙니다. 지금 환경이 누가 접근 가능한지, 무엇이 외부에 열려 있는지, 이상 징후를 추적 가능한지를 검증하는 과정입니다. 그래서 제품별 기능 이름보다 통제 항목(Control, 보안 통제)을 기준으로 보는 게 훨씬 낫습니다.

    2. AWS, Azure, GCP 공통 개념 먼저 잡기

    플랫폼 이름은 달라도 아래 개념은 거의 같습니다. 저도 처음엔 콘솔 화면이 달라서 별개처럼 느꼈는데, 구조로 보면 생각보다 단순합니다.

    통제 영역 AWS Azure GCP 감사 포인트
    인증/권한 IAM Microsoft Entra ID, RBAC Cloud IAM MFA, 최소 권한, 비활성 계정
    조직 구조 Organizations Management Groups, Subscriptions Organizations, Folders, Projects 정책 상속, 예외 관리
    로그/감사 CloudTrail, CloudWatch Activity Log, Monitor Cloud Audit Logs, Cloud Logging 관리 이벤트, 보존 기간, 경보
    네트워크 VPC, Security Group, NACL VNet, NSG VPC Firewall Rules 0.0.0.0/0 오픈 여부, 세그먼트 분리
    암호화 KMS Key Vault Cloud KMS 기본 암호화, 키 접근 제어
    자산 점검 Config, Trusted Advisor Azure Policy Security Command Center, Asset Inventory 미준수 리소스 탐지

    클라우드 보안 감사를 할 때는 이 표처럼 기능명이 아니라 역할 기준으로 정리하시면 훨씬 덜 헷갈립니다. 특히 멀티 클라우드 운영이면 더 그렇습니다.

    3. 클라우드 보안 감사 체크리스트: 계정과 권한

    3-1. 가장 먼저 볼 항목

    1. 루트(root) 또는 최고 권한 계정에 MFA(Multi-Factor Authentication)가 적용되어 있는지 확인해야 합니다.
    2. 공유 계정 사용 여부를 봅니다. 사람별 계정 분리가 안 되어 있으면 추적이 거의 안 됩니다.
    3. 장기 액세스 키(Long-lived access key) 사용 현황을 확인합니다.
    4. 권한이 광범위한 역할(Role)과 그룹(Group)을 찾습니다.
    5. 퇴사자, 장기 미사용 계정, 테스트용 계정을 비활성 또는 삭제합니다.

    제가 직접 해보니 여기서 제일 많이 걸리는 건 관리자 권한 남발이었습니다. 처음엔 빠르게 작업하려고 광범위한 권한을 주는데, 그게 몇 달 지나면 아무도 왜 있는지 모르는 권한 덩어리가 되거든요.

    3-2. 빠르게 확인하는 예시 명령어

    # AWS: 계정 별칭, 사용자, 액세스 키 마지막 사용일 확인 예시
    aws iam list-users
    aws iam get-account-summary
    aws iam generate-credential-report
    aws iam get-credential-report
    
    # Azure: 역할 할당 확인 예시
    az role assignment list --all
    az ad user list --query "[].{userPrincipalName:userPrincipalName,accountEnabled:accountEnabled}"
    
    # GCP: 프로젝트 IAM 정책 확인 예시
    gcloud projects get-iam-policy PROJECT_ID
    

    명령어 결과를 보면 중요한 건 수치보다 패턴입니다. 예를 들어 서비스 계정(Service Account, 시스템용 계정)이 사람처럼 쓰이고 있다거나, 테스트 계정이 아직도 관리자 권한을 가지고 있다면 바로 정리 대상입니다.

    4. 네트워크와 외부 노출 점검

    두 번째는 네트워크입니다. 보안 사고 대응할 때 제일 식은땀 나는 순간이 뭐냐면, 내부용이라고 생각했던 포트가 인터넷에 열려 있는 걸 발견했을 때입니다. 저도 예전에 홈랩에서 관리 포트를 열어놓고 잊어버린 적이 있었는데, 로그 보고 진짜 놀랐습니다.

    • 0.0.0.0/0 또는 모든 소스 허용 규칙이 있는지 확인합니다.
    • SSH(22), RDP(3389), 데이터베이스 포트가 외부에 직접 열려 있는지 확인합니다.
    • 관리망과 서비스망이 분리되어 있는지 봅니다.
    • 로드밸런서(Load Balancer, 트래픽 분산 장치) 뒤에 있어야 할 자원이 직접 노출되지 않았는지 확인합니다.
    • Egress(이그레스, 외부로 나가는 통신) 제어 정책이 있는지 확인합니다.
    클라우드 보안 감사에서 네트워크 외부 노출 점검을 설명하는 이미지

    보안 그룹(Security Group), NSG, 방화벽 규칙에서 외부 노출 경로를 식별하는 과정을 보여주는 이미지입니다.

    4-1. 점검 예시 명령어

    # AWS: 보안 그룹 확인 예시
    aws ec2 describe-security-groups
    
    # Azure: NSG 규칙 확인 예시
    az network nsg list
    az network nsg rule list --nsg-name MY_NSG --resource-group MY_RG
    
    # GCP: 방화벽 규칙 확인 예시
    gcloud compute firewall-rules list
    

    여기서 중요한 포인트! 단순히 포트가 열려 있냐만 보면 반쪽짜리 감사가 됩니다. 누가, 어떤 경로로, 어떤 자산에 접근 가능한지를 같이 봐야 합니다. Ingress(인그레스, 외부 트래픽 진입점)와 Egress를 함께 보셔야 사고 범위를 읽을 수 있습니다.

    5. 로그, 모니터링, 탐지 체계 확인

    로그가 없으면 사고가 나도 복기가 안 됩니다. 드디어 됐다! 싶게 정책을 잘 걸어놔도, 누가 언제 어떤 변경을 했는지 기록이 안 남으면 감사 품질이 확 떨어집니다. 그래서 클라우드 보안 감사에서 로그 영역은 거의 필수 코스입니다.

    1. 관리 이벤트 로그가 활성화되어 있는지 확인합니다.
    2. 로그 보존 기간이 조직 기준에 맞는지 확인합니다.
    3. 로그 저장소 접근 권한이 제한되어 있는지 확인합니다.
    4. 위험 이벤트에 대한 알림이 있는지 확인합니다.
    5. 시간 동기화와 리전별 로그 수집 누락이 없는지 확인합니다.
    # AWS: CloudTrail 추적 상태 확인 예시
    aws cloudtrail describe-trails
    aws cloudtrail get-trail-status --name TRAIL_NAME
    
    # Azure: 활동 로그 확인 예시
    az monitor activity-log list --max-events 20
    
    # GCP: 감사 로그 설정 확인에 활용할 기본 조회 예시
    gcloud logging logs list
    

    실제로 운영하다 보면 로그는 켜져 있는데 중요 이벤트 알림이 빠진 경우가 많습니다. 예를 들어 IAM 정책 변경, 방화벽 변경, 키 삭제, 감사 로그 비활성화 시도 같은 이벤트는 최소한 경보를 받는 구조가 있어야 합니다. 이거 진짜 편하더라고요. 사고 전에 조짐을 보게 되니까요.

    6. 데이터 보호: 암호화, 비밀정보, 백업

    보안 감사에서 의외로 자주 빠지는 게 백업과 키 접근 제어입니다. 암호화(Encryption, 데이터 보호)를 켜두는 것 자체도 중요하지만, 누가 키를 다룰 수 있는지가 더 중요하거든요.

    • 스토리지와 디스크의 기본 암호화가 활성화되어 있는지 확인합니다.
    • KMS(Key Management Service, 키 관리 서비스) 또는 동등한 키 관리 체계를 사용 중인지 확인합니다.
    • Secrets(시크릿, 비밀번호/토큰)와 인증서를 코드나 환경변수에 평문으로 두지 않는지 확인합니다.
    • 백업 데이터도 동일한 수준으로 보호되는지 확인합니다.
    • 복구 테스트가 실제로 수행되는지 확인합니다.
    checklist:
      encryption_at_rest: true
      encryption_in_transit: true
      kms_key_access_review: monthly
      secret_rotation: enabled
      backup_retention_review: required
      restore_test: scheduled
    

    저도 처음엔 백업만 있으면 된다고 생각했었는데, 복구 테스트를 안 하면 사실상 없는 거랑 비슷하더라고요. 백업 파일은 있는데 권한 문제나 키 문제로 복원이 안 되는 경우, 현장에서는 정말 난감합니다.

    클라우드 보안 감사 결과로 로그와 암호화 상태를 보여주는 보안 대시보드 이미지

    로깅, 암호화, 시크릿 관리, 백업 상태를 한눈에 보는 보안 감사 대시보드 예시 이미지입니다.

    7. 실전 구현: 제가 쓰는 공통 감사 진행 순서

    이 섹션은 제가 실제로 환경 점검할 때 자주 쓰는 흐름입니다. 완벽한 정답은 아니지만, 처음엔 이게 뭔가 싶었는데 몇 번 반복하니 누락이 확 줄었습니다.

    1. 자산 목록 수집: 계정, 구독, 프로젝트, 네트워크, 스토리지, 컴퓨트, 데이터베이스를 먼저 나열합니다.
    2. 권한 검토: 최고 권한 계정, 서비스 계정, 외부 협력사 계정, 장기 미사용 계정을 봅니다.
    3. 외부 노출 확인: 퍼블릭 IP, 오픈 포트, 공개 버킷/스토리지, 직접 노출된 관리 포트를 찾습니다.
    4. 로그/경보 확인: 감사 로그와 알림 체계가 빠지지 않았는지 확인합니다.
    5. 암호화/백업 확인: 저장 데이터, 전송 데이터, 시크릿, 키 접근 제어, 복구 테스트 여부를 확인합니다.
    6. 정책 위반 목록화: 우선순위를 나눠 즉시 수정, 계획 수정, 예외 승인으로 구분합니다.
    # 예시: 결과를 수집해 파일로 남기는 매우 단순한 형태
    mkdir -p audit-output
    aws iam get-account-summary > audit-output/aws-account-summary.json
    az role assignment list --all > audit-output/azure-role-assignments.json
    gcloud projects get-iam-policy PROJECT_ID --format=json > audit-output/gcp-iam-policy.json
    

    이렇게 결과를 남겨두면 다음 감사 때 비교가 쉬워집니다. 전월 대비 뭐가 늘었는지, 위험한 공개 설정이 새로 생겼는지 바로 보이거든요. 이전 글에서 다뤘던 자산 인벤토리 자동화와도 연결되는 부분이고, 다음 글에서는 정책 위반 항목을 자동으로 티켓화하는 방법도 다뤄볼 예정입니다.

    8. ⚠️ 자주 겪는 문제와 트러블슈팅

    8-1. MFA는 켰는데 예외 계정이 남아 있는 경우

    사람 계정엔 MFA를 걸었는데 자동화 계정이나 오래된 관리자 계정은 빠져 있는 경우가 많습니다. 해결은 단순합니다. 사람 계정과 시스템 계정을 분리하고, 시스템 계정은 키 회전과 최소 권한으로 관리하면 됩니다.

    8-2. 로그는 있는데 아무도 안 보는 경우

    이거 진짜 흔합니다. CloudTrail, Activity Log, Audit Logs 다 켜놨는데 알림 연결이 없으면 나중에 사고 후 분석용으로만 남습니다. 최소한 관리자 권한 변경, 네트워크 규칙 변경, 감사 비활성화 시도는 알림 대상에 넣어두세요.

    8-3. 공개 스토리지 예외가 누적되는 경우

    정적 웹 호스팅이나 파일 공유 때문에 공개 접근 예외를 열어두는 경우가 있습니다. 근데 여기서 범위를 넓게 잡아버리면 나중에 어디까지 공개인지 아무도 모르게 됩니다. 예외는 기간, 사유, 승인자를 같이 기록해두는 습관이 필요합니다.

    8-4. 멀티 클라우드라 기준이 제각각인 경우

    이럴 때는 서비스별 문구를 맞추려 하지 말고 통제 항목을 공통 표준으로 잡으면 됩니다. 예를 들면 “관리자 권한 계정은 월 1회 검토” 같은 식으로요. AWS 보안, Azure 보안, GCP 보안을 같은 언어로 묶는 방식입니다.

    9. 검증 결과 확인과 최종 정리

    감사가 끝났다고 해서 문서만 남기면 반쪽입니다. 검증은 보통 아래처럼 끝내는 게 좋습니다.

    • 고위험 항목이 실제로 줄었는지 확인합니다.
    • 예외 정책이 문서화되었는지 확인합니다.
    • 다음 감사 때 비교할 기준선(Baseline)을 저장합니다.
    • 자동화 가능한 항목과 수동 확인 항목을 분리합니다.

    제가 직접 해보니, 좋은 감사는 멋진 보고서보다 다음 달에도 반복 가능한 체크리스트를 남기는 쪽이 훨씬 가치가 컸습니다. 보안은 한 번 대청소하고 끝나는 일이 아니니까요. 결국 클라우드 보안 감사는 복잡한 기능을 다 외우는 싸움이 아니라, 기본 통제를 계속 유지하는 운영 습관의 문제였습니다.

    클라우드 보안 감사 전후 위험 항목 감소를 시각화한 이미지

    감사 전후의 위험 항목 수 변화, 우선순위 분류, 조치 완료율을 시각적으로 보여주는 이미지입니다.

    정리 체크리스트

    1. 최고 권한 계정과 사람 계정에 MFA가 적용되어 있는가
    2. 장기 액세스 키와 미사용 계정이 정리되어 있는가
    3. 관리 포트와 데이터 저장소가 외부에 불필요하게 노출되지 않았는가
    4. 감사 로그와 보안 경보가 활성화되어 있는가
    5. 암호화, 시크릿 관리, 백업 복구 테스트가 점검되었는가
    6. 예외 정책과 수정 이력이 문서화되어 있는가

    자주 묻는 질문

    Q. 클라우드 보안 감사는 얼마나 자주 해야 하나요?
    최소 분기 단위로 권한과 외부 노출 점검은 권장드립니다. 변경이 잦은 환경이면 월 단위가 더 현실적입니다.

    Q. 세 클라우드를 동시에 쓰면 도구도 반드시 통합해야 하나요?
    반드시 그렇진 않습니다. 다만 점검 기준과 결과 포맷은 통합하는 게 운영 효율이 좋습니다.

    Q. 처음 시작할 때 가장 중요한 한 가지는 뭔가요?
    권한부터 보시면 됩니다. 로그보다 먼저라는 뜻은 아니고, 사고 확률과 영향도를 같이 보면 권한 정리가 가장 효과가 큽니다.

    AWS 보안 Azure 보안 GCP 보안 공통 감사 체크리스트를 요약한 이미지

    AWS, Azure, GCP 공통 보안 감사 체크리스트를 한 장으로 요약한 인포그래픽 이미지입니다.

    오늘 내용은 공통 체크리스트 중심으로 정리해봤고, 다음 글에서는 각 클라우드별 관리형 보안 서비스와 정책 자동화 포인트를 더 깊게 다뤄보겠습니다. 혹시 이런 경험 있으신가요? 분명 설정은 맞는 것 같은데 감사에서 계속 비슷한 항목이 반복되는 경우요. 그런 환경일수록 체크리스트를 팀 표준으로 만드는 게 정말 중요합니다.

  • [OpenStack] OpenStack 프라이빗 클라우드 보안 강화: 최신 감사 보고서 분석 및 대응 전략

    [OpenStack] OpenStack 프라이빗 클라우드 보안 강화: 최신 감사 보고서 분석 및 대응 전략

    [인프라] OpenStack 프라이빗 클라우드 보안 강화 대응 전략

    OpenStack 프라이빗 클라우드 보안 이야기는 평소엔 좀 뒤로 밀리기 쉽습니다. 서비스가 잘 돌고 있으면 당장 체감이 안 되거든요. 그런데 클라우드 보안 감사 한 번 들어오면 분위기가 바로 달라집니다. 계정 정책, API TLS, 로그 보관, 이미지 무결성 같은 항목이 한꺼번에 쏟아지니까요. 저도 홈랩과 실무 환경에서 비슷한 점검을 여러 번 겪어봤는데, 처음엔 “이건 설정 파일 몇 개만 손보면 되겠지” 싶었거든요. 근데 막상 들어가 보니 Keystone(키스톤, 인증/인가), Nova(노바, 컴퓨트), Neutron(뉴트론, 네트워크), RabbitMQ(래빗MQ, 메시지 브로커)까지 서로 얽혀 있어서 삽질 좀 했습니다 ㅎㅎ

    이번 글은 특정 벤더 보고서 하나를 요약하는 방식보다는, 최근 감사에서 반복적으로 지적되는 OpenStack 보안 항목을 공식 Security Guide와 체크리스트 기준으로 묶어서 정리한 내용입니다. 즉, 보고서가 달라도 결국 자주 걸리는 포인트는 비슷하더라고요. 그래서 오늘은 OpenStack 프라이빗 클라우드 보안을 실제 운영 관점에서 어떻게 강화할지, 제가 실무에서 우선순위를 잡는 방식으로 풀어보겠습니다.

    컨트롤 플레인, 컴퓨트 노드, 스토리지, 관리망과 외부망을 분리한 OpenStack 보안 아키텍처 예시입니다.

    1. 왜 감사에서 늘 같은 항목이 걸릴까요?

    쉽게 말해 감사는 “설정이 있느냐”보다 보안 경계(Security Boundary, 보안 경계)가 실제로 분리되어 있느냐를 봅니다. OpenStack은 컴포넌트가 많아서, 한 군데만 HTTPS를 켰다고 끝나지 않거든요. 예를 들어 Horizon(호라이즌, 대시보드)은 TLS를 쓰는데 서비스 간 내부 통신은 평문으로 남아 있거나, RabbitMQ 인증서는 넣었는데 호스트네임 검증은 꺼져 있는 식입니다. 겉으로는 안전해 보여도 감사에서는 바로 티가 납니다.

    제가 최근 점검할 때도 지적이 많이 나온 항목은 아래 네 가지였습니다.

    • 관리망과 외부망 분리 부족: 내부 API가 외부 엔드포인트를 타는 경우
    • 과도한 권한: 관리자 계정 공유, 서비스 계정 권한 과다
    • 로그는 있는데 감사 추적이 어려움: 중앙 수집과 상관분석 부재
    • 이미지/메시지 경로 무결성 미흡: 이미지 서명 검증, 메시지 브로커 TLS 검증 미설정

    2. OpenStack 보안 베스트 프랙티스, 핵심만 먼저 잡아보겠습니다

    OpenStack 보안 베스트 프랙티스를 한 줄로 줄이면 이겁니다. “외부 공개 구간만 막지 말고, 내부 제어면(Control Plane, 제어 평면)까지 신뢰하지 말자.” 저도 처음엔 내부망이면 괜찮지 않나 싶었는데, 실제로는 운영자 실수나 계정 탈취가 더 무섭더라고요.

    감사 항목 자주 보이는 문제 즉시 대응 장기 대응
    인증/인가 관리자 계정 공유, MFA 미적용 관리자 계정 분리, 외부 IdP 연동 검토 RBAC 재설계, 페더레이션 적용
    통신 보안 내부 API 평문, 인증서 검증 비활성화 HTTPS 강제, internal endpoint 지정 전 구간 TLS, 인증서 수명주기 자동화
    감사 로그 노드별 로그 분산, 이벤트 표준화 부족 중앙 로그 수집 CADF 기반 감사 추적 체계화
    무결성 이미지 검증 없음, 설정 파일 변경 감시 없음 서명 검증, 권한 점검 FIM, 골든 이미지 파이프라인

    여기서 중요한 포인트! 감사 대응은 문서부터 쓰는 게 아니라 데이터 흐름부터 그려야 합니다. 누가 로그인하고, 어떤 API를 타고, 어떤 메시지 브로커를 지나, 최종적으로 어떤 로그가 남는지 보셔야 합니다. 이 흐름이 안 보이면 체크리스트만 돌려도 자꾸 빠지는 항목이 생깁니다.

    3. 실전 구현 1: 계정, 엔드포인트, TLS부터 정리합니다

    제가 직접 해보니 제일 효과가 큰 첫 단계는 “접속면 줄이기”였습니다. 즉, 공개 엔드포인트와 내부 엔드포인트를 분리하고, 서비스 간 통신이 public URL이 아니라 internal URL을 쓰도록 강제하는 겁니다.

    1. 서비스 카탈로그(Service Catalog, 서비스 목록)에서 internal endpoint를 분리합니다.
    2. 각 서비스 설정에서 Keystone 인증 URL과 연동 URL이 HTTPS인지 확인합니다.
    3. insecure = false 여부를 전부 확인합니다.
    openstack endpoint list --long
    openstack endpoint create identity --region RegionOne internal https://keystone.internal.example:5000/v3
    openstack endpoint create image --region RegionOne internal https://glance.internal.example:9292
    openstack endpoint create network --region RegionOne internal https://neutron.internal.example:9696
    # /etc/nova/nova.conf
    [keystone_authtoken]
    www_authenticate_uri = https://keystone.internal.example:5000
    auth_url = https://keystone.internal.example:5000
    insecure = false
    
    [glance]
    api_servers = https://glance.internal.example:9292

    이 작업은 단순해 보여도 효과가 큽니다. 내부 관리 트래픽이 외부 공개 주소를 타지 않게 되니까요. 특히 프록시나 로드밸런서가 여러 겹일 때 감사 추적도 훨씬 쉬워집니다.

    OpenStack 프라이빗 클라우드 보안 내부 API TLS 분리 구성 이미지

    public endpoint와 internal endpoint를 분리하고 서비스 간 통신을 HTTPS로 고정한 예시 구성입니다.

    4. 실전 구현 2: RabbitMQ, 로그, 이미지 무결성을 같이 보셔야 합니다

    OpenStack은 API만 안전해도 끝이 아닙니다. 실제로 서비스끼리 대화하는 길목은 RabbitMQ 같은 메시지 브로커인 경우가 많거든요. 여기 TLS를 켜도 인증서 체인만 보고 호스트네임 검증을 안 하면 허점이 남습니다. 최근 oslo.messaging 릴리스 노트에서도 이 부분이 분명히 언급됐습니다. 그래서 제가 운영할 때는 브로커 TLS와 로그 표준화를 같이 묶어서 봅니다.

    # /etc/nova/nova.conf 또는 공통 oslo.messaging 설정
    [oslo_messaging_rabbit]
    ssl = true
    ssl_ca_file = /etc/ssl/certs/openstack-ca.pem
    ssl_cert_file = /etc/ssl/certs/client.pem
    ssl_key_file = /etc/ssl/private/client-key.pem
    ssl_enforce_hostname_verification = true

    단, 이 옵션은 배포판 패키지 버전에 따라 지원 여부가 다를 수 있습니다. 그래서 바로 적용하기 전에 패키지 changelog나 릴리스 노트를 꼭 보셔야 합니다. 저도 이거 모르고 넣었다가 서비스 재시작만 반복한 적이 있었네요.

    감사 로그 쪽은 Keystone의 CADF(Cloud Auditing Data Federation, 클라우드 감사 이벤트 표준) 포맷을 적극 검토할 만합니다. 사람이 보기엔 조금 딱딱하지만, SIEM(보안 정보 이벤트 관리)으로 넘길 때 훨씬 정리가 잘 됩니다.

    # /etc/keystone/keystone.conf
    [DEFAULT]
    notification_format = cadf

    그리고 이미지 무결성도 자주 빠뜨립니다. Glance(글랜스, 이미지 서비스)와 Nova에서 서명 검증 흐름을 넣어두면, 검증되지 않은 이미지 부팅을 줄일 수 있습니다.

    # /etc/nova/nova.conf
    [glance]
    verify_glance_signatures = true

    처음엔 이게 너무 과한가 싶었는데, 골든 이미지(Golden Image, 표준 이미지)를 운영하는 환경에서는 진짜 편하더라고요. 누가 어떤 이미지를 올렸는지, 검증됐는지 흐름이 분명해집니다.

    OpenStack 프라이빗 클라우드 보안 감사 로그와 RabbitMQ TLS 흐름 이미지

    메시지 브로커 TLS 보호와 Keystone CADF 감사 로그가 중앙 수집 시스템으로 모이는 흐름입니다.

    5. 실전 구현 3: 파일 권한과 노드 하드닝은 기본인데 가장 많이 놓칩니다

    이건 너무 기본 같아서 오히려 빼먹습니다. 그런데 공식 Security Checklist를 보면 Keystone, Nova, Neutron 설정 파일의 소유권과 권한을 아주 명확하게 확인하라고 하거든요. 감사에서도 이건 빠지지 않습니다.

    stat -L -c "%U %G %a" /etc/keystone/keystone.conf
    stat -L -c "%U %G %a" /etc/nova/nova.conf
    stat -L -c "%U %G %a" /etc/neutron/neutron.conf
    find /etc/keystone /etc/nova /etc/neutron -type f -perm /027 -ls

    제가 주로 보는 기준은 이렇습니다.

    • 서비스 계정과 그룹이 올바른지 확인
    • 설정 파일 권한이 과도하게 열려 있지 않은지 확인
    • SELinux(셀리눅스, 강제 접근 통제)나 AppArmor 정책과 충돌 없는지 확인
    • FIM(File Integrity Management, 파일 무결성 감시) 대상에 핵심 설정 파일 포함

    여기서 많이 겪는 문제는 자동화 도구가 재배포하면서 권한을 널널하게 바꿔버리는 경우입니다. 특히 템플릿 한 군데 잘못 두면 전체 노드가 같은 실수를 반복합니다. 그래서 저는 배포 후 검증 명령을 CI 파이프라인이나 운영 점검 스크립트에 꼭 넣습니다.

    6. ⚠️ 감사 때 자주 터지는 트러블슈팅

    이 섹션은 실전에서 진짜 많이 부딪히는 부분입니다.

    6-1. HTTPS는 켰는데 인증 실패가 납니다

    대부분 CA 체인이나 호스트네임 불일치입니다. 인증서를 넣었다고 끝이 아니고, 서비스가 접속하는 URL과 인증서 SAN(Subject Alternative Name, 주체 대체 이름)이 맞아야 합니다.

    6-2. 내부 통신을 HTTPS로 바꾸니 서비스 등록은 됐는데 호출이 꼬입니다

    이 경우 public endpoint는 바꿨는데, 개별 서비스 설정은 여전히 외부 주소를 보고 있는 경우가 많습니다. 카탈로그와 각 서비스 설정 파일을 둘 다 봐야 합니다.

    6-3. 로그는 모이는데 감사 보고서에서 추적성이 부족하다고 나옵니다

    이건 단순 보관이 아니라 상관관계(Correlation, 상관 분석) 문제입니다. 사용자 로그인, 토큰 발급, 인스턴스 생성, 볼륨 연결, 보안그룹 변경 이벤트를 하나의 흐름으로 이어서 볼 수 있어야 하거든요. 그래서 Keystone 이벤트, API 로그, 하이퍼바이저 로그를 따로 보지 말고 묶어야 합니다.

    6-4. 보안 강화 후 성능이 걱정됩니다

    맞습니다. TLS와 추가 로깅은 비용이 있습니다. 그래서 저는 처음부터 전부 켜기보다 인터넷 노출 구간, 관리자 구간, 메시지 브로커, 이미지 검증 순서로 우선순위를 잡습니다. 한 번에 다 바꾸면 장애 원인 분석이 어려워집니다.

    7. 검증은 이렇게 하시면 됩니다

    보안 설정은 “넣었다”가 아니라 “검증됐다”로 끝내야 합니다. 제가 보통 마지막에 확인하는 체크는 아래와 같습니다.

    1. 모든 핵심 서비스 엔드포인트가 HTTPS인지 확인
    2. 서비스 설정의 insecure = true 흔적 제거 확인
    3. 메시지 브로커 TLS 연결 및 인증서 검증 확인
    4. CADF 또는 중앙 로그에서 관리자 행위 추적 가능 여부 확인
    5. 서명되지 않은 이미지가 정책상 차단되는지 확인
    openstack endpoint list --long | egrep "https|Region"
    grep -R "insecure *= *true" /etc/keystone /etc/nova /etc/neutron /etc/glance
    openssl s_client -connect rabbitmq.internal.example:5671 -servername rabbitmq.internal.example
    openstack image list
    openstack server list

    완료 후 대시보드와 CLI 둘 다 테스트해보세요. Horizon만 되고 CLI가 안 되거나, 반대로 API는 되는데 메타데이터 프록시가 깨지는 경우가 있습니다. 저도 이 단계에서 “드디어 됐다!” 했다가 보안그룹 갱신이 안 되는 걸 뒤늦게 발견한 적이 있었거든요.

    OpenStack 프라이빗 클라우드 보안 강화 결과 대시보드 이미지

    보안 점검 항목이 통과되고 중앙 로그에서 관리자 행위를 추적할 수 있는 결과 화면 예시입니다.

    8. 정리: OpenStack 프라이빗 클라우드 보안은 순서가 중요합니다

    OpenStack 프라이빗 클라우드 보안은 기능을 많이 넣는 게임이 아닙니다. 순서를 잘 잡는 작업에 가깝습니다. 제가 실제로 운영하면서 느낀 우선순위는 이렇습니다. 계정 통제 → 내부 API TLS → 메시지 브로커 보호 → 감사 로그 표준화 → 이미지 무결성 → 파일 무결성 감시. 이 순서로 가면 감사 대응도 수월하고, 장애가 나도 어디서 꼬였는지 찾기 편합니다.

    혹시 지금 프라이빗 클라우드 감사 대응을 준비 중이시라면, 문서부터 만들기보다 먼저 엔드포인트와 계정, 로그 흐름을 그림으로 그려보세요. 그 다음에 체크리스트를 맞추면 훨씬 빨라집니다. 다음 글에서는 Barbican(바비칸, 비밀 관리 서비스)과 이미지 서명 체계를 조금 더 깊게 다뤄보겠습니다. 이전에 정리한 리눅스 하드닝 글이 있으시면 그 흐름과 같이 보셔도 연결이 잘 됩니다.

    OpenStack 프라이빗 클라우드 보안 강화 우선순위 요약 이미지

    계정 통제, TLS, 로그, 이미지 무결성, 파일 무결성 감시 순서로 정리한 대응 우선순위 요약입니다.

    9. 자주 묻는 질문

    Q1. 작은 홈랩에도 이렇게까지 해야 할까요?

    전부 한 번에 할 필요는 없습니다. 다만 관리자 계정 분리, HTTPS, 설정 파일 권한 점검은 작은 환경에서도 바로 체감됩니다.

    Q2. 클라우드 보안 감사에서 가장 빨리 점수 올리는 항목은 뭔가요?

    보통은 내부 API TLS, 관리자 접근 통제, 중앙 로그 수집입니다. 이 세 개가 눈에 잘 보이고 재현도 쉽습니다.

    Q3. OpenStack 보안 베스트 프랙티스를 어디서 시작하면 좋을까요?

    공식 Security Checklist를 서비스별로 돌려보는 게 제일 현실적입니다. Keystone, Nova, Neutron부터 보시면 됩니다.