DevSecOps에서 보안을 코드로 구현하는 것이 중요한 이유

Jake Shin
Jake Shin | Full-Stack Engineer

Security as code가 무엇인가요?

Security as code는 애플리케이션 보안의 미래를 이끄는 동력 중 하나입니다. O’Reilly에 따르면, security as code는 코드 및 인프라스트럭쳐의 변화를 계획하고 그 위에 추가되어야 할 보안 검사, 테스트, 관문(gate)을 추가하면서도 불필요한 지연 비용은 없애는 방식으로 DevOps 도구와 환경에 보안을 구현하는 방법입니다. 개발자들은 프로그래밍 언어를 이용하여 인프라스트럭쳐를 정의할 수 있습니다. (Infrastructure as code) DevOps의 속도에 보안성을 추가하기 위해서는 같은 작업이 필요합니다.

기초 레벨에서는, security as code는 보안 규칙, 테스트, 스캐닝 등을 CI/CD 파이프라인과 코드에 통합시키는 것만으로도 실현될 수 있습니다. 테스트는 모든 코드 커밋에 대해서 실행되어야 하며, 그 결과는 즉시 개발자들에게 수정을 위해 공유되는 게 좋습니다. 코드 작성과 동시에 보안 스캐닝 작업이 실시된다면 소프트웨어 개발 라이프싸이클(software development lifecycle, SDLC)에서 리뷰 프로세스를 간소화할 수 있으므로 많은 양의 시간과 비용이 절감될 수 있을 것입니다.

왜 중요한가요?

Security as code는 보안 과정을 개발의 이른 시점에서 적용하도록 하는 DevSecOps의 중요한 부분입니다. 이를 위해서는 프로젝트의 시작부터 보안이 정의되어야 하며 반복적이고 균질하게 적용될 수 있도록 코드화되어야 합니다. 이렇게 해서 개발자들에게 스스로 코드 보안을 실현할 수 있는 셀프서비스 환경을 제공할 수 있습니다.

미리 정의된 보안 규칙들은 효율성을 증대시킬 뿐 아니라 자동화되기 때문에 개발 과정에서 생길 수 있는 작은 실수를 미연에 방지할 수 있습니다. (스테이징 환경에서 탐지되지 않은 코드가 전체 시스템 다운을 야기하는 등)

우선되어야 할 여섯 가지 security as code 역량

DevSecCon의 주최자이자 경영 임원인 Francois Raynaud에 따르면, security as code는 보안을 보다 투명하게 하는, 그리고 보안 담당자와 개발자들이 같은 언어로 의사소통하는 방법이라고 합니다. 달리 말하자면, 보안 담당자들은 개발자들이 어떻게 일하는지 이해할 수 있어야 하며 그를 바탕으로 개발자들이 필요한 보안 작업을 SDLC에서 구현할 수 있도록 도와야 한다고 할 수 있습니다. 개발자들은 열린 마음으로 그들의 개발 과정에서 보안성을 향상할 수 있는 새로운 도구와 프로세스에 적응해야 할 것입니다. 여러분의 CI/CD 파이프라인에 보안성을 구현할 수 있는 여섯 가지 최고 경험과 역량을 소개합니다.

  1. 정적 분석, 동적 분석, 침투 시험 등 각종 스캐닝 작업과 테스트를 CI/CD 파이프라인에서 자동 수행되도록 설정하여 모든 프로젝트와 환경에서 재사용 될 수 있도록 하십시오.
  2. 개발자들에게 결과를 공유하고 코딩하면서 문제를 해결할 수 있도록 하여 코딩 과정에서 보안 베스트 프랙티스를 체득할 수 있도록 하는 의사소통/피드백 체계를 만드십시오.
  3. 프로세스 안에 확인 과정을 두어 자동 작용하는 보안 규칙들을 평가하고 모니터링하십시오. 민감한 데이터 및 로그인 정보들이 무심결에 공유되거나 공개되고 있지는 않은지 확인하십시오.
  4. 필요하다면, 복잡하거나 시간이 많이 소요되는 수동 테스트를 사람이 최종 검수하는 커스텀 스크립트 구동 등의 방법으로 자동화하십시오. 해당 스크립트들의 효율성과 정확성을 평가하여 다른 프로젝트에서 재사용될 수 있도록 하십시오.
  5. 스테이징 환경에서부터 모든 새로운 코드들을 테스트하여, 실패의 위험을 줄이십시오.
  6. 정기적인, 혹은 상시 모니터링 체계에서는 로그 데이터 (혹은 경고 깃발 등)를 생산하고, 특정한 리뷰 대시보드(GitLab 의 security dashboard 등)에서 확인될 수 있어야 합니다.

Security as code는 더 큰 목표를 위한 베스트 프랙티스입니다.

Security as code는 DevSecOps 구현을 위한 실용적인 방법을 제시하지만, 그것이 여러분의 최종 목표가 되어서는 안 됩니다. 궁극적으로, security as code는 여러분의 SDLC 에 보안 작업을 통합시킴으로써 더 많은 직원을 동참시키는 방법입니다. Infrastructure as code를 해본 개발자라면 이 개념은 친숙할 것입니다. 또한, 보안 담당자들이 소프트웨어 개발을 더 잘 이해하고 프로세스 안에서 코드화될 수 있는 보안 규칙들을 디자인할 수 있도록 하는 계기가 될 것입니다.

여러분들이 자신의 DevSecOps 체계를 매끄럽게 운영하려 할수록, 필연적으로 security as code는 복잡한 여정에서의 효율적인 해법(smart solution)으로 등장할 것입니다.

GitLab 의 DevSecOps 방법론 평가 지표

DevSecOps 구현과 관련하여, 수행해야 할 일들은 많습니다. 이 주요 요소들을 확인하고 수행하는 과정을 돕기 위해 GitLab 에서는 DevSecOps 평가 지표를 개발하였습니다. 20여 개 분야에서의 점수를 입력하시면 여러분의 대략적인 DevSecOps 성숙도와 함께 어떤 작업을 수행해야 하는지 보여드립니다. 여기에서 다운로드받으세요.

이 포스트는 GitLab의 동의를 받아 공식 블로그의 영문 포스트를 우리말로 번역한 글입니다.