배포 파이프라인, Security까지 완벽하게!
많은 기업에서 DevOps를 도입하고 있다.
이는 즉슨, 개발 단계에서부터 실제 사용자, 서비스 제공자 (Product Owner) 입장에서 개발 아이템이 정의되고, 개발팀과 활발히 논의되며 Agile 방법론을 도입해 user story, work item, task등등이 관리되고, 이것이 PR(Pull Request)로 이어지고, 빌드 파이프라인을 통해 빌드 및 각종 테스트를 통과한 검증된 코드는 동료간의 상호 검토를 거쳐 Merge되고, 배포 파이프라인을 통해 배포되는 일련의 과정들을 일컫는다.
그럼 위와같은 일련의 과정속에서 Security에 대한 고민은 어느 시점에 하는 것이 좋을까?
Shift Left라는 컨셉이 있다. 가능한 빨리, 프로젝트 초기에 결함을 찾아내고 이를 해결하자는 것이다.
https://www.bmc.com/blogs/what-is-shift-left-shift-left-testing-explained/
즉, Security와 관련된 부분도 이와 마찬가지이다. 코드가 다 완성이 되고 배포 직전에 Security와 관련된 부분을 점검하는 것이아니라, 가능한 초반에 우려되는 부분을 발견하고 이를 고치자는 전략이다.
이와 관련하여 예제를 하나 들어보겠다. 개발자 A가 실수로 id, password를 코드에 포함한채로 commit했다고 가정해보자. (물론 PR과정에서 동료가 발견하고, 해결할 수도 있겠지만)
이 문제점이 PR과정에서 파이프라인을 통해 Credential이 포함되었음을 감지하고 Master Branch에 이 코드가 통합되지 못하도록 방지한다면 나중에 고치는 것보다 여려 측면에서 좋지 않을까?
더 복잡한 상황을 예를들어 보겠다. 코드 정적 분석을 해보니 개발자 A가 작성한 코드가 더 좋은 코드로 개선될 수 있는 여지가 있었다. 이러한 사항을 한참 뒤에 아는것 보다 PR 시점, 즉 개발자 A가 코드 작성한지 얼마 지나지 않아 알아차린다면 빠르게 그 부분을 고칠 수 있을 것이고 이는 전반적인 개발 팀의 효율성을 끌어올릴 수 있을 것이다.
이와 관련하여 좋은 Article이 있다. 다음 링크도 읽어보면 좋을 것 같다.
https://techbeacon.com/devops/how-google-facebook-do-code-analysis
그럼 어떤 Security 요소들을 검토해야 하며, 파이프라인 어디에 이 과정을 포함시키면 좋을까?
다음과 같은 요소들을 검토해볼만 하다.
1. 내 코드가 비밀번호와 같은 Credential 정보들을 포함하고 있지는 않은지?
2. 내 프로젝트에서 사용하고 있는 여러 패키지 및 Dependency를 가진 패키지에 문제가 있지는 않은지?
3. 정적 코드 분석 도구를 통해 코드의 개선점이 있지는 않은지 검토하기
4. 웹 서비스를 배포한다면 OWASP Top 10과 같이 잘 알려진 취약성에 대해 잘 대비가 되어있는지?
이 과정들은 전부 PR 과정에서 파이프라인을 통해 검증이 가능하고, 경우에 따라서 위의 여러가지 요소중 하나라도 만족하지 못하면 Master Branch에 Merge가 되지 못하도록 정책을 만들고 관리할 수 있을 것이다.
DevOps는 접하면 접할수록 흥미롭고 매력적이다. 프로세스의 변화가 어떻게 사람들이 일하는 방식을 변화시키는지, 이것이 문화를 바꾸고 전반적인 생산성을 극대화하는 과정을 보는것이 너무 재미있다.
DevOps과정에 (특히 파이프라인에) Security와 관련된 부분을 몇 가지 추가하는 것 만으로도 서비스의 보안과 관련된 부분을 한층 업그레이드 하고, 자칫 놓칠 수 있는 부분을 미연에 방지한다는 부분이 정말 마음에 든다.