어떤 보안 허점이라도 클라우드 운영에 영향을 미칠 수 있으며 조직 전체에 광범위한 파급효과를 가져올 수 있습니다. 인기 있는 CI/CD 플랫폼인 CircleCI에 대한 2022년 공격을 생각해보십시오. 해커들은 손상된 엔지니어의 노트북을 통해 액세스를 얻어 빌드 파이프라인에 저장된 환경 변수와 시크릿을 표적으로 삼았습니다. 이 사고는 2주간 지속되었으며 다양한 서드파티 시스템에 속한 환경 변수, 토큰, 키의 도난으로 이어졌습니다.
2023년, Microsoft는 중국 해커들이 Azure Active Directory의 토큰 검증 문제를 악용하여 여러 미국 정부 이메일 계정에 무단 액세스한 침해 사실을 공개했습니다. 이 침해는 처음 발생한 후 한 달이 지나서야 발견되었습니다.
이러한 사건들은 중요한 현실을 강조합니다. 클라우드 네이티브 시스템의 취약점은 치명적인 결과를 초래할 수 있습니다.
클라우드 네이티브 환경이 침해될 수 있는 방법은 여러 가지가 있습니다. 더 일반적인 공격 벡터는 다음과 같습니다.
클라우드 네이티브 애플리케이션에서는 보안을 계층별로 고려할 수 있으며, 일반적으로 클라우드 네이티브 보안의 4C로 알려져 있습니다.
▶️Cloud (클라우드)
▶️Container (컨테이너)
▶️Cluster (클러스터)
▶️Code (코드)
각 계층을 지배하는 일련의 원칙들이 클라우드 환경에서 안전하고 확장 가능하며 복원력 있는 애플리케이션과 서비스 개발을 주도해야 합니다. 즉, 각 계층은 다음 외부 계층에 의존한다는 의미입니다. 따라서 가장 안쪽 계층인 코드(Code)는 강력하고 안전한 클라우드(Cloud), 클러스터(Cluster), 컨테이너(Container) 계층을 갖는 것으로부터 이익을 얻습니다.
각 계층을 자세히 살펴보겠습니다.
▶️Cloud
클라우드 계층은 클라우드 환경에서 애플리케이션을 호스팅하고 실행하는 인프라입니다. 이 계층과 관련된 몇 가지 일반적인 보안 문제는 다음과 같습니다.
잘못된 구성: 일부 팀들은 인프라에 대해 기본 구성을 유지합니다. 예를 들어, 서버의 일부 중요한 포트를 인터넷 트래픽에 열어둘 수 있습니다. 공격자들은 이러한 취약한 포트를 악용하여 가상 네트워크에 진입하고 사이버 공격을 실행할 수 있습니다. 또 다른 예는 클라우드 리소스에 대한 약한 액세스 제어입니다. 이러한 일반적인 잘못된 구성 문제는 민감한 데이터 손실과 조직에 큰 비용을 초래할 수 있습니다.
자동화 문제: 자동화를 통해 클라우드에 리소스를 생성, 구성, 신속하게 배포할 수 있습니다. 그러나 이는 또한 보안 문제가 클라우드 환경에 신속하고 자동으로 배포될 수 있음을 의미합니다.
클라우드 보안을 달성하기 위해서는 클라우드 서비스 제공업체(CSP)와 함께 클라우드 인프라를 보호할 공동 책임이 있습니다. 공동 책임 모델로 알려진 이는 구성 보안, 데이터 보안 감독, 그리고 많은 다른 작업들을 포함합니다.
클라우드 보안에 더 가까워지기 위해 다음 모범 사례를 따르십시오.
· CSP의 보안 권장사항을 준수합니다.
· 애플리케이션 인프라에 잘못된 구성이 없는지 확인하기 위해 구성을 정기적으로 검토합니다.
· HashiCorp Terraform과 같은 Infrastructure as Code(IaC) 도구를 사용하여 클라우드 리소스 생성, 구성, 배포를 자동화합니다. 이는 수동 리소스 프로비저닝으로 인한 인적 오류를 최소화하며, Terraform의 정책 엔진을 통해 보안 표준을 코드로 강제할 수 있습니다.
· AWS GuardDuty, AWS Security Hub와 같은 클라우드 네이티브 보안 서비스를 활용하여 위협을 실시간으로 탐지하고 대응합니다.
· QueryPie와 같은 접근 통제 솔루션을 통해 클라우드 인프라에 대한 세밀한 접근 제어를 구현합니다.
▶️Container
컨테이너 계층은 컨테이너 이미지와 같은 컨테이너화된 애플리케이션의 리소스로 구성됩니다. 컨테이너 계층과 관련된 일반적인 보안 문제는 다음과 같습니다.
· 컨테이너 이미지에 보안 취약점이 포함될 수 있습니다.
· 약한 액세스 제어
· 신뢰할 수 없는 소스의 컨테이너 콘텐츠
컨테이너 보안을 달성하기 위해서는 다음을 수행해야 합니다.
· 이미지를 빌드할 때 오픈소스 도구를 사용하여 알려진 취약점을 스캔합니다.
· 알려진 취약점을 제거하여 보안을 강화하기 위해 컨테이너를 정기적으로 업데이트합니다.
· 컨테이너 기능을 수행하는 데 필요한 최소한의 액세스 권한을 가진 사용자를 생성합니다.
· AWS ECR과 같은 관리형 컨테이너 레지스트리를 사용하여 이미지 스캔 및 취약점 평가를 자동화하고, Docker Content Trust(DCT)와 같은 이미지 서명 도구로 이미지 무결성을 보장합니다.
· HashiCorp Vault를 활용하여 컨테이너가 필요로 하는 시크릿과 자격 증명을 안전하게 주입하고 관리합니다.
▶️Cluster
클라우드 네이티브 애플리케이션은 종종 컨테이너 클러스터를 가진 컨테이너화된 애플리케이션입니다. 이 계층은 일반적으로 클러스터 구성 요소와 애플리케이션을 포함하는 Kubernetes 클러스터입니다. 따라서 이 계층에서 조직들은 다음과 같은 방법으로 구성 요소와 애플리케이션의 보안에 집중해야 합니다.
· Kubernetes 구성 요소에 암호화된 통신 사용
· 들어오는 트래픽을 인증하기 위한 TLS 인증서 사용
· 보안 표준 및 네트워크 정책 충족 또는 초과
이 계층의 가장 중요한 구성 요소 중 하나는 Kubernetes API입니다. Kubernetes API를 승인하려면 역할 기반 액세스 제어(RBAC) 규칙을 사용하십시오. 이때 Okta와 같은 기업용 IAM 솔루션을 Kubernetes RBAC와 통합하여 중앙집중식 사용자 관리와 Single Sign-On(SSO)을 구현할 수 있습니다.
서비스 메시 기술인 HashiCorp Consul을 활용하면 마이크로서비스 간의 상호 TLS 인증과 네트워크 정책을 자동으로 관리할 수 있어 제로 트러스트 네트워킹을 구현할 수 있습니다.
▶️Code
가장 안쪽 계층인 코드 계층은 안전한 클라우드, 클러스터, 컨테이너 계층으로부터 이익을 얻습니다. 애플리케이션 계층으로도 알려진 이 계층은 안전한 코딩 전략에 중점을 둡니다. 클라우드 네이티브 애플리케이션 코딩과 관련된 일반적인 보안 문제는 다음과 같습니다.
· 개발자들이 앱 개발에 보안 취약점을 포함할 수 있는 서드파티 소프트웨어를 자주 사용합니다.
· 처리되지 않은 검증, 하드코딩된 패스워드 등과 같은 안전하지 않은 코딩 관행
· 부적절한 보안 위험 평가
애플리케이션 코드를 보호하는 데 도움이 되는 강력한 전략은 다음과 같습니다.
· 동적 보안 스캐닝 소프트웨어를 사용하여 크로스 사이트 스크립팅(XSS), 안전하지 않은 패스워드 저장소, 크로스 사이트 요청 위조(CSRF), SQL 인젝션과 같은 취약점을 드러내기 위해 코드를 자동으로 스캔합니다.
· 정적 코드 분석 도구로 안전하지 않은 코드를 탐지합니다. 이를 코딩 파이프라인에 통합하여 모든 코드 커밋에서 분석을 트리거할 수 있습니다.
· OWASP Dependency-Check 및 Snyk과 같은 의존성 검사 소프트웨어를 사용하여 서드파티 의존성의 취약점을 찾아냅니다.