모든 게시물

  • Published on
    구글 켈린더에서 RFC 5545로 정의된 값으로 반복일정을 생성할 수 있다. 그런데 구글 켈린더의 반복 일정을 API로 생성/수정/삭제 하는 과정에서 삽질을 하게 되었다.😂 혹시나 누군가 구글 켈린더 반복일정을 API로 수정/변경/삭제 해야하는 경우, 이 블로그 글을 통해서 불필요하게 삽질을 하지 않기 바라며 작성했다. 반복일정을 수정/삭제 할 때 선택하는 세 가지 옵션(이 일정, 모든 일정, 이 일정 및 향후 일정)에 따라서 이벤트 id를 다르게 설정하여 요청해야 한다.
  • Published on
    Vault를 구글 인증을 통해서 로그인하도록 설정해본다. Admin Directory API를 통해서 workspace의 user와 group의 정보를 가져올 수 있고, 해당 정보를 통해서 인증 조건을 추가할 수 있다. 예로 특정 workspace group에 속한 계정만 인증에 성공할 수 있도록 조건을 추가할 수 있다. Admin Directory API에 요청하기 위해서 필요한 권한을 설정할 수 있는데, Service Account의 key 파일을 생성하는 대신에, Application Default Credentials를 활용해보았다. Application Default Credentials를 사용하는 과정에서 삽질을 많이 했는데, 혹시나 동일한 작업을 하는 분들은 나처럼 시간을 허비하지 않기를 바라며 글을 작성한다.🥹
  • Published on
    컨테이너 이미지에 최소한으로 필요한 software만 포함하는 것이 보안적으로 모범사례이다. 이러한 모범사례를 따르는 가장 쉽고 합리적인 방법은 구글에서 제공하는 Distroless Image를 활용하는 것이다. Distroless Image는 nonroot, debug, debug-nonroot Tag를 가지고 있다. nonroot은 conatiner에게 root 권한을 주지않고, shell도 없어서 Terminal로 접속이 불가능하다. 그런데 Distroless Image에 추가로 필요한 debian package를 설치하면 어떻게 해야할까? 이번 글에서는 bazel로 빌드할 때 원하는 debian package를 추가하는 방법을 알아 본다.
  • Published on
    Vault에서 다양한 credentials를 보관하게 된다. 따라서 어떤 접근들이 있었는지 Audit Log들을 남겨서 관리하고 싶었다. Vault에서 Audit Device 기능을 제공하여서 file, syslog, socket등으로 Vault API 요청과 응답을 로그로 남길 수 있다. socket은 log 손실의 위험이 있고, syslog는 Vault Pod에서 추가적인 package설치와 설정이 필요하다. 따라서 Kubernetes에서 Vault를 운영하는 과정에서 file 방식으로 Audit log를 남겨보았다.
  • Published on
    ModSecurity는 오픈소스로 제공하는 WAF이다. Nginx connector를 통해서 ModSecurity를 Nginx에 쉽게 연동할 수 있다. Nginx Ingress Controller에서는 해당 설정을 할 수 있도록 Configmap에 설정 옵션들을 제공한다. 해당 옵션들을 설정함으로서 쉽게 Nginx에 WAF를 구현할 수 있다. ModSecurity는 Trustware라는 회사가 관리하다가 2024년 1월에 OWASP foundation으로 넘어가게 되었다. ModSecurity는 오래된 프로젝트이고, Production Ready라고 소개되고 있다. 하지만 ModSecurity가 앞으로도 계속 커뮤니티를 통해서 활발히 관리될지는 지켜봐야겠다.
  • Published on
    두 권의 책 Wiring the winning organization과 최고의 팀은 무엇이 다른가(The secrets of highly successful groups)을 읽었다. 성공하는 조직은 어떠한 특성을 가지고 있는지 두 권의 책으로 살펴보았다.
  • Published on
    소스코드를 변경하지 않고 opentelemetry-operator의 Instrumentation CRD를 통해서 Python Application을 자동으로 Instrumentation을 해봤다. 이 과정에서 OpenTelemetry Logging의 경우에는 기존 Logging Libarary에 Bridge API로 연동하는 구조로 설계된 것을 알게 되었고, Python opentelemetry sdk가 logger에 handler를 추가하는 것을 알게 되었다. 또한 sitecustomize.py을 통해서 Python Application이 실행되기 전에 Instrumentation library를 셋팅하는 것을 이해하게 되었다. Gunicorn으로 Flask를 실행할 때와 Uvicorn으로 FastAPI를 실행할 때, Auto Instrumentation이 잘 되는 것을 확인하였다.
  • Published on
    Google Oauth2를 프로덕션 단계로 사용할 때, Gmail 권한을 사용하려면 CASA(클라우드 어플리케이션 보안 평가)를 수행해야 한다. 관련 문서에서 동적 검사를 할 때,ZAP을 활용하는 방법을 설명하고 있다. 따라서 기본적인 ZAP 사용법을 확인하였다. Docker Container로 Sciprt를 실행하여 API 스캐닝을 해봤고, Automation Framework와 ZAP Desktop Application을 활용하여 React Router에 의해서 이동되는 페이지들을 크롤링하는 것을 테스트해봤다.
  • Published on
    나도 어느덧 개발자의 길을 들어선지 8년 정도가 지났다. 나는 어떻게 하면 시니어다운 개발자가 될 수 있을지 계속 질문을 하고 있다. 나는 풍부한 개발 지식과 경험을 통해서 리더쉽을 발휘할 수 있는 시니어가 되고 싶다. 그렇게 되기 위해서 개발자 커리어 동안 항상 배움에 목말라 했고 성장에 집착했었다. 나의 개발자 커리어에서 잠깐동안 5명 정도 되는 팀을 이끄는 팀장 역할을 하기도 했지만, 나머지 기간은 팀원의 역할로 다양한 업무를 맡았다. 이렇게 나는 어떠한 조직을 이끄는 매니저 역할을 고민하기보다는, 팀원으로 회사에 어떻게 기여하고 성과를 낼 수 있는지 고민하는 시간을 주로 가졌다. 따라서 "팀장의 탄생" 책을 읽으면서 과거 나의 팀을 이끌던 팀장분들을 떠올려보았고, 앞으로 내가 팀장 같은 역할을 가지면 기억해야할 점을 남겨보았다.
  • Published on
    Kubernetes Worker Node와 Pod Container에 Terminal shell로 접근하여 명령어를 입력하면 로그를 남기고, 경우에 따라서 알림을 보내고 싶었다. CNCF 졸업한 Project인 Falco를 활용하면 이를 구현할 수 있지 않을까 하여 테스트를 해보게 되었다. Falco는 kernel module이나 eBPF probe등을 통해서 kernel event를 저장하고, 설정된 rule에 따라서 해당 event를 filter하여 원하는 output 형태로 저장한다. Falco는 모든 로그를 저장하기보다는 Rule에 따라 선택적으로 보안 위협이 있는 이벤트를 수집하고 실시간으로 알림하는 것이 목적이다. 따라서 Falco를 통해서 원하던 기능을 구현하는 것은 합리적인 방법이 아닌 것으로 판단 된다.