서버를 운영하게 되면 로그는 자연스럽게 발생한다. 이러한 로그들은 양도 많을 뿐더러 관리하는 서버의 수가 많아지면 그 내용들을 일일히 직접 확인하기란 어려울 따름이다. 그래서 로그 수집과 가시화 시스템을 구축하여 로그들을 모니터링하게 된다. 이번에는 Loki와 Promtail, Grafana를 이용해 로그를 모니터링하는 아키텍쳐를 구축해보도록 한다. Loki & PromtailLike Prometheus, but for logs Loki는 오픈소스 타입의 로그 모니터링 도구로, 로그를 Label을 통해 그룹화해 처리한다. Prometheus가 Metric을 수집하는데에 목적을 두었다면, Loki는 로그를 수집하는데에 목적을 둔 도구로 볼 수 있다.로그 라인의 메타데이터(Label)를 인덱싱해, 그 L..
전체보기
프로젝트 진행 중 input 영상 스트림에서 위험 구간을 탐지해 새로운 비디오 Clip 파일로 생성해주는 구간이 있었다.이 부분에서는 OpenCV의 VideoWriter 클래스를 이용해 파일을 생성했다. # VideoWriter 객체 선언out = cv2.VideoWriter(filename='out.mp4', fourcc=cv2.VideoWriter_fourcc(*'mp4v'), fps, frameSize)# frame을 VideoWriter에 저장 (프레임 저장)out.write(frame)# 비디오 파일로 저장out.release() VideoWriter 객체 생성에는 저장될 영상의 파일명을 포함한 속성값을 지정해주어야한다.filename : 파일명Video_Writer_fourcc : FOURCC..
SSL 트래픽을 처리하는 방법에는 크게 3가지가 존재한다.SSL Termination (Offloading)SSL PassthroughSSL Bridging이 방법들을 각각 알아보도록 한다. SSL Termination (Offloading)SSL Termination은 SSL 암호화 트래픽을 서버 측으로 전달하기 전에 로드밸런서 단에서 SSL 암호화를 푼 뒤, 전달해준다. 이 방식은 SSL 암복호화를 내부 웹 서버단이 아닌 로드밸런서/프록시가 해준다는 점에서 내부 백엔드 서버의 부담을 줄여주게 된다. 이러한 이유로 인해 SSL Offloading(전가)이라고도 불리게 된다.또한, SSL 인증서를 내부의 백엔드 서버별로 각각 설치해줄 필요 없이, 로드밸런서 측에만 설치해주면된다는 점도 존재한다. 다만..
시나리오 개요Starting with a very limited set of permissions, the attacker is able to leverage the instance-profile-attachment permissions to create a new EC2 instance with significantly greater privileges than their own. With access to this new EC2 instance, the attacker gains full administrative powers within the target account and is able to accomplish the scenario's goal - deleting the cg-super-cr..
ABACAttribute-Based Access Control, User나 Group에 Permission Attribute를 지정해 접근을 제어하는 방식이 방법은 개별 User나 Group에 대해 각각 권한 설정을 해줌에 따라 복잡하고 세밀한 권한제어가 가능하다. 허나 User나 Group의 수가 증가하게되는 경우, 이들을 일일히 ABAC로 권한 설정을 해주기는 어려울 것이다. ABAC policy 파일의 구성은 다음과 같다. 아래 Policy는 user 'jane'이 default namespace의 pod를 읽을 수 있도록 하는 내용이다. # abac_policy.json{ "apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": ..
kube 커맨드를 실행하기 위해 Kube API Server에 명령어를 Query해주어야한다.API Server에 Query하기 위해서는 User 인증을 위해 매번 User Certificate를 함께 보내주어야한다. kubectl get pods --server kubernetes.docker.internal:6443 \ --client-key admin.key \ --client-certificate admin.crt \ --certificate-authority ca.crt 매번 이렇게 커맨드를 실행할 수는 없지 않은가? 이 과정을 간소화시키기 위해 Context와 KubeConfig 파일이 존재한다. KubeConfig클러스터에 접근하고 상호작용하기 위해 필요한 설정을 포함하는 파일kubectl을..
Terraform을 통해 aws_instance를 만들면 기본 AMI값을 지정해주어야한다. 이 ami 값은 외우기도 좀 그렇고 자주 바뀌는 터라, 동적으로 가져와서 지정해줄 필요가 있다. Terraform의 'data' Block을 사용해 특정한 AMI 값을 AMI Marketplace에서 검색해 가져올 수 있다.예시로 ubuntu-22.04의 AMI 값을 가져와 본다.data "aws_ami" "ubuntu" { most_recent = true owners = ["099720109477"] # Canonical(Ubuntu 배포사)의 AWS 계정 ID filter { name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu-jammy..
시나리오 목표"vault" 컨테이너에 Access해 플래그 획득 시나리오 세팅./cloudgoat.py create ecs_takeover EC2 인스턴스의 Public IP가 연결된 DNS 주소 하나가 주어진다. ECS 클러스터 구조문제에 돌입하기 전에 ECS 서비스에 대한 구조를 간략하게 알고 넘어가보자.ECS의 리소스는 cluster, service, task, container로 구성되어있다. 이러한 구조는 k8s와도 살짝 닮아있는 것을 알 수 있다. Component설명ClusterECS Service와 Task를 실행하는 인프라, service와 task를 묶는 논리적인 단위가 된다. ECS의 가장 상위 수준의 리소스ServiceTask의 지속적인 실행을 관리하는 개체로, Task를 실행..