DevOps
41 posts
On-premise 8. 호스트 서버 모니터링 및 꺼짐 방지

홈 서버로 API 서버를 운영 중에 이벤트 뷰어 상에서 Windows 자동 업데이트 및 Kernel power 이벤트로 자꾸 서버가 재부팅되며 운영 상에 문제가 발생하였다. 이를 해결하기 위한 방법에 대한 글이다. 윈도우 OS 자동 재부팅 방지 관련 이벤트 : 1074 기존에는 아래와 블로그 글과 같은 해결 방법을 통해 자동 업데이트 차단이 가능했으나 이제는 불가능하다. https://igotit.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-10-%EC%9E%90%EB%8F%99%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%9E%90%EB%8F%99%EC%9E%AC%EB%B6%80%ED%8C%85-%EB%B0%A9%EC%A7%80-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0 Window 10 프로 홈서버 OS 자동 업데이트 방지 방법 업뎃 1. gpedit.msc 로 그룹 정책 편집기 열기 컴퓨터…

June 16, 2024
DevOps
RHCSA

1. root 비번 재설정 VM 재기동 ( ctrl-alt-delete ) rescue console ‘e’(edit) 로 진입하여 linux … 행에 추가 Ctrl-x로 저장하면 자동으로 레스큐 콘솔로 재부팅 된다. iui ]o[o[]]i][ ][i]i[][i] l[]o[]o] kkkk echo ‘anypass’ | passwd —stdin root 재부팅 시 파일 시스템의 SELinux 컨텍j스j트를 자동으로 재라벨링하도록 한다. touch /.autorelabel | ``` 2. 서버 네트웍 설정 x nmtui 명령을 통해 진입하는 콘솔에서 hostname, ip, gateway, dns server 등에 대한 설정 가능 3. 서버 리포지토리 관리 dnf repository 추가 4. SELinux SELinux의 http에 추가된 포트 확인 및 포트 추가 방화벽에 위에서 추가된 82번 port를 오픈하기 위해 추가 httpd 재시작 및 적용 5.논리 볼륨 크기 조정 -r…

March 25, 2024
Linux
DevOps
쿠버네티스 네트웍 내부구조

전체적인 쿠버네티스 네트웍 구조는 Service를 통해 pod를 노출시키되, service는 L4영역까지만 담당하고, L7의 역할을 하는 ingress를 Loadbalancer type service와 연결시켜서 사용하게 되는 구조이다. 멀티 노드 클러스터를 외부에 노출하기 위해서 Loadbalancer를 꼭 써야 하는 것은 아니다. 물론 그렇게 할 수도 있지만, 특정 워커 노드들에 ingressgateway를 고정으로 박아두고, nodePort로 오픈한 다음, 앞 단에 로드 밸런서를 두고 해당 node의 ip : port로 로드밸런싱되도록 설정할 수도 있다. rolling update 배포 모니터링 : watch -n 0.1 옵션 사용으로 실시간 확인 가능 롤백 k8s 네트웍 용어 NAT : 내부망을 위한 ip 주소로 변환 SNAT : 패킷이 내부에서 외부로 나갈 때 Source ip주소를 고정(public) ip로 변환 DNAT : 패킷이 외부에서 내부로 들어올 때 Destin…

March 05, 2024
Linux
DevOps
[기술 세미나] 리눅스 패키지 문제해결 사례 핵심분석

문제란 무엇인가? 문제란 목표와 현 상황의 차이(Gap)이다. 따라서 단순히 에러 메시지가 어떻다에서 그치지 않고 목표를 정확하게 잘 정의하는 것이 중요하다. 문제 해결의 다양한 접근 방법 1 : “문제의 현상과 원인은 다르다” 예를 들어 보자. 문제의 현상 : 파일 생성 오류 파일 생성 오류가 나는 것은 root cause가 아니라 현상이다. 따라서 이에 대한 원인을 하나씩 찾아나가는 것이 중요하다. 문제 해결의 다양한 접근 방법 2 : “잘게 쪼개고 구체화하라” 절차, 단계, 열거, 관찰, 점검을 통해 문제를 해결한다. 리눅스 / 네트웍이 어떻게 원래 돌아가는 지 알아야 절차와 단계, 열거를 할 수 있다. 이게 가능하기 위해서는 2~3 depth까지는 현상 뿐만이 아니라 원리(왜 되는지?) 에 대해서 알아야 한다. 문제 해결의 다양한 접근 방법 3 : “연역적 접근 vs 귀납적 접근” 연역적 접근 방식 만으로는 변수와 예외가 너무 많기에 해결이 안될 수도 있다. 따라서 경험을…

December 15, 2023
DevOps
Linux
[CKS] Realexam

TLS 관련 문제 바로 스킵 Falco 문제는 배점이 11점이었는데 falco에서 아무 로그가 안 잡혀서 못품;; 무슨 image scanner 관련된 문제가 있었는데 (kubesec아니고,,) 못품. 아마 admission controller, webhook 관련 문제였던 것 같다. kubelet에서 authorization mode를 alwaysAllow로 되어 있던 걸 Webhook으로 수정했어야 하는데 kubernetes.io에 레퍼런스를 못찾아서 ‘Deny’라고 잘못 품 도큐먼트에서 ‘kubelet’으로 검색하니깐 찾을 수 있음.

November 15, 2023
DevOps
[CKS] Killer shell

Q1. You have access to multiple clusters from your main terminal through kubectl contexts. Write all context names into /opt/course/1/contexts, one per line. From the kubeconfig extract the certificate of user restricted@infra-prod and write it decoded to /opt/course/1/cert. Q1 정답 File /opt/course/1/contexts 가 모든 context를 포함하고 있는가 File /opt/course/1/cert 가 cert를 포함하고 있는가 kubeconfig 파일의 cluster가 아닌 restricted@infra-prod의 user 의 cert내용을 base64 -d로 디코드하여 /opt/course/1/cert에 저장 Q2 Falco is installe…

November 14, 2023
DevOps
[CKS] Mockexam 3

EXAM 2 Q1 Q1 Answer 에서 아래 2가지 사항 조치 수정 추가 Q2 Q2 Answer /etc/kubernetes/prod-audit.yaml 작성 kube-apiserver 설정 kube-apiserver volume / volumeMounts 설정 volumes volumeMounts Q3 : kubesec문제로 Pass~ Q4 Q4 Answer dev-write role 추가 developer sa 추가 kubectl create sa developer -n dev dev-write-binding rolebinding 추가 에서 serviceAccount developer로 수정 Q5 (OPA) / 중요! Q5 Answer configmap에 정의된 rego file을 살펴보면 로 시작하지 않는 repository를 거부하는 설정을 가지고 있다. 따라서 이미지 url을 아래와 같이 고친 후에 pod를 기동해주면 된다. Q6 Q6 Answer admission …

November 12, 2023
DevOps
[CKS] Mockexam 2

EXAM 2 Q1 Q1 Answer namespaceSelector 에서는 metadata.namspace의 동일한 namespace에 대한 것은 설정할 필요 없고, 다른 namespace에서 접근하고자 하는 경우에만 namespaceSelector를 적용한다. namespace에 대한 selector는 label 한 쌍으로 충분하지만, podSelector에서는 pod의 모든 label에 대해서 일치하도록 규칙을 설정하여야 한다. Q2 Q2 Answer 나의 답안은 아래와 같았으나 틀린 이유는 network policy에서 규칙을 정의할 때, 모든 label이 일치하도록 설정해야 하므로 위와 같이 하는 것이 옳다. Q3 Q3 Answer automountServiceAccountToken: false 필드를 pod에 추가 이 옵션을 추가해주면 serviceaccount token secret이 pod의 경로에 마운트 되지 않게 해준다. Q4 Q4 Answer /etc/falco…

November 11, 2023
DevOps
[CKS] 모니터링/로깅, 런타임 보안

Falco 아무리 보안이 강한 클러스터를 구축하여도 막상 공격 받았을 때는 어떻게 대처애햐 하는가? strace, Tracee 와 같은 툴로 application에서 사용된 syscall을 분석할 수 있지만 MSA 환경에서 수백개의 pod가 수만 개의 syscall을 생상하고 있는 환경에서 이를 일일히 분석하는 것은 쉬운 일이 아니다. 대신 Faclo를 활용하면 /etc/shadow 에 접근한다거나 log파일을 편집/삭제 하는 등의 의심스러운 행동을 Falco가 모니터링 해준다. Falco Architecture Falco Kernel module을 허용하지 않는 Provider도 있어서 Aquasec tracee처럼 eBPF를 활용하기도 한다. Syscall은 Falco module에 의해 감지되고 나서 library에서 분석되고 predefined된 Falco rule을 활용하여 policy engine에 의해 의심스러운 syscall인지 필터링된다. output/alert …

November 01, 2023
DevOps
[CKS] Mockexam 1

EXAM 1 Q1 Q1 Answer AppAromor profile 로드하기 profile 이름으로 정상 로드 확인하기 default sa를 제외하고 가장 권한이 적은 sa를 frontend-site pod에서 적용하도록 설정 Q2 Q2 Answer Q3 Q3 Answer trivy image 명령어를 이용해 실행 중인 pod 중에 가장 vulnerability가 적은 image를 실행하고 있는 pod만 남기고 모두 삭제하기 Q4 Q4 Answer mv /root/CKS/audit.json /var/lib/kubelet/seccomp/profiles Seccomp 적용하여 pod replace하기 Q5 The CIS Benchmark report for the Controller Manager and Scheduler is available at the tab called CIS Report 1. Report 내용: [FAIL] 1.1.12 Ensure that the etcd …

November 01, 2023
DevOps
[CKS] Cheatsheet: CKS 시험 필수 명령어

Container 활용 kubectl Resoruce API Version 확인 : kubectl api-resources Resource Spec/Status 확인 : kubectl explain –recursive {resource} AppArmor Profile 적용 : apparmor_parser {profile_path} Profile 확인 : aa-status | grep {profile_name} kubesec Resource 검사 : kubesec scan {resource} Trivy Image 검사 : trivy image –severity {UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL} {image_name} Tar Image 검사 : trivy image –severity {UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL} –input {image_tar} Falco & Sysdig Falco Falco 시작 : systemctl st…

November 01, 2023
DevOps
[CKS] Supply chain 보안

Base image footpring 최소화하기 base image란 무엇인가? dockerfile의 절에서 명시하는 이미지는 parent 이미지이다. 가령 아래 예시에서 보는 것처럼 httpd 이미지는 debian이라는 이미지를 parent로 가진다. 그리고 debian 이미지는 로 부터 생성되는데, 이렇게 scratch로 부터 생성되는 이미지를 base 이미지라고 하는데, parent 이미지라는 의미로 혼용되기도 한다. Modularize : 각각의 이미지는 여러 기능을 하지않고 1개의 주요 역할만 하도록 모듈화되어야 한다. Persist state : 데이터/state을 컨테이너내에 보관하지 않는다. ‘Official image’ 사용하기 이미지를 최소화하기 yum, wget, curl 과 같이 공격자가 활용할 수 있는 명령어들을 image에 포함시키지 않아야 한다. production 이미지와 dev/stg 이미지는 분리되어야 한다. 결국, 이미지에는 applicati…

October 31, 2023
DevOps
[CKS] Microservice 취약성

Security context 컨테이너를 실행할 때 하기와 같이 어떤 유저로 실행할지, 어떤 capability를 추가하거나 뺼 지 등 보안 설정을 할 수 있다. 이는 k8s pod definition에서도 Security context 절을 통해 설정할 수 있는데, pod 레벨에서 설정하면 pod 내의 모든 컨테이너에 적용되고 컨테이너 레벨에서 설정을 하면 그 설정으로 override된다. Pod 레벨 예시 Container 레벨 예시 명령을 통해 특정 pod를 실행시키고 있는 user가 무엇인지 알 수 있다. Admission controller admission controller는 authentication/authorization 단계에서 수행할 수 없는 보안조치를 위한 부가적인 기능들을 제공한다. NamespaceExists와 같은 모듈은 디폴트로 적용되어 있어서 pod가 생성될 namespace가 실제 존재하는지 체크하고, NamespaceAutoProvisio…

October 15, 2023
DevOps
[CKS] System Hardening 2

System Hardening 섹션에서는 하기의 내용들에 대해 다룬다. host OS foorprint 최소화 Node 접근 제한 SSH hardening Linux privilege escalation 불필요 패키지/서비스 제거 커널 모듈 제한 오픈 포트 제한 IAM role UFW 방화벽 Seccomp AppArmor 7. IAM role public cloud의 IAM policy, role을 최소화해야 한다. IAM user 관련 권한 관리는 group 활용하여 IAM policy를 그룹에 부여한다. IAM service 관련 관한 관리는 IAM policy를 service(ec2같은) 에 직접 부여할 수 없기에 IAM role을 활용한다. S3BucketAccessRole과 같은 role을 만들고 IAM policy를 해당 role에 부여한다. 그리고 이 role을 ec2에 부여한다. 8. UFW 방화벽/네트워크 네트웍 외부 접속의 최소화 앞서 보았듯, /etc/servi…

October 09, 2023
DevOps
[CKS] System Hardening 1

System Hardening 섹션에서는 하기의 내용들에 대해 다룬다. host OS foorprint 최소화 Node 접근 제한 SSH hardening Linux privilege escalation 불필요 패키지/서비스 제거 커널 모듈 제한 오픈 포트 제한 IAM role UFW 방화벽 Seccomp AppArmor Least privilege principal : 각 모듈은 필요한 최소한의 권한만을 지녀야 한다는 원칙으로, 리눅스, k8s를 포함한 모든 컴퓨터 시스템에 적용되는 원칙이며 k8s에서는 아래와 같은 작업에 충실함으로써 이 원칙을 지키게 된다. 노드 접근 제한 RBAC 불필요 패키지/서비스 제거 네트웍 접근 제한 불필요 커널 모듈 제거 오픈 포트 제한 Host OS foorprint 최소화 곧, attack surface를 최소화하는 것이다. 1. 노드 접근 제한 인터넷 접근이 안되는 환경을 택하고, VPN과 같은 솔루션을 통해 내부망에 접근하게 한다. 방화벽에서…

October 09, 2023
DevOps
[CKS] Cluster setup & hardening 2

KubeConfig ~/.kube/config 에 config 파일로서 certification 에 대한 경로 등을 저장하는 것을 통해 kubectl 시 별도의 인증서 명시 또는 apiserver에 대한 주소 명시 등을 할 필요가 없게 된다. KubeConfig 파일은 세 부분으로 구성된다. Cluster Contexts : Context는 어떤 유저가 어떤 Cluster를 사용할 것인지에 대해 정의한다. Users API Groups 아래 명령을 통해 어떤 리소스가 어떤 API Group에 속했는지 확인 가능하다. RBAC에서 리소스에 대한 apiGroup을 명시해야 하는데, 이 때 아래 명령을 활용하여 참고하면 좋다. 또한 어떤 리소스가 namespace에 국한되지 않는 cluster 리소스인지도 확이할 수 있다. Authorization Node Authorizor kubelet과 같이 system:node:node01 ‘system:node’라는 이름이 client ce…

September 26, 2023
DevOps
[CKS] Cluster setup & hardening 1

Cloud Native 보안의 4C Cloud : Datacenter, network, servers Cluster : Auth, Admission, NP Container : Restrict image, supply chain, sandboxing, privileged Code : Code security CIS Benchmark CIS는 커뮤니티 기반의 오픈소스 단체로서 세상의 사이버 보안을 향상하는 데 기여한다. CIS는 k8s 뿐만 아니라 다양한 IT 표준 기술들( web, was, db, OS, network )에 대해서 보안에 대한 best practice를 제공한다. CIS-CAT을 사용하면 현재 k8s 클러스터의 취약점을 html로 생성해준다. 그러나 CIS-CAT pro만 k8s assessment를 지원하며 유료이다. Lab : CIS benchmark on Ubuntu OS (CIS-CAT) CIS-CAT 실행 OS 선택 Ubuntu 20.04 LTS Prof…

September 16, 2023
DevOps
[Error] VM 꺼짐으로 인한 Kubernetes crash 이슈

https://igotit.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-10-%EC%9E%90%EB%8F%99%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%9E%90%EB%8F%99%EC%9E%AC%EB%B6%80%ED%8C%85-%EB%B0%A9%EC%A7%80-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

July 16, 2023
Error
DevOps
On-premise 7. Redis 구축하기

Redis 설치 remmi repo를 사용하지 않고 그냥 yum install하게 되면 redis3버전이 latest이므로 반드시 remi repo를 사용해야 한다. Redis 실행 Redis 구축 개발계 Redis 설정 redis를 설치한 현 상태에서는 systemctl 명령어로 단일 ‘redis’ 서비스만 관리할 수 있다. 나는 개발계용 redisdev service부터 운영용 redis1, redis2, redis3 service를 관리하고 싶은 상황이다. 따라서 최초에 실행 한 redis를 redisdev라는 서비스로 띄우고, 관련된 설정도 수정하고자 한다. 기존에 실행되고 있는 redis service를 내린다. /usr/lib/systemd/system/redis.service -> redisdev.service로 명칭 변경 /etc/redis.conf의 이름을 redisdev.conf로 변경하고, 해당 파일 내에 redis 관련된 path를 변경한다. 변경 한 경로의…

July 11, 2023
DevOps
On-premise 6. DB 서버 구축하기

MySQL 8.0 설치 1. 설치가능한 MySQL repository 확인 www.mysql.com/products/community/ 2. MySQL Repository 설치 1에서 확인한 yum, CentOS 7버전에 해당하는 repository를 찾아서 설치한다. 직접 찾아서 설치하지 않으면 outdate 될 수 있기 때문에 반드시 mysql홈페이지에서 직접 repostiory찾아야 한다. 3. MySQL 설치 4. MySQL 서버 시작 및 셋팅 아래 명령을 통해 설치된 mysql서버의 root 계정 비밀번호를 알아 낼 수 있음 MySQL Secure installation : MySQL 보안 강화하기 명령을 통해 mysql이 권장하는 보안 관련된 기본 설정을 셋팅한다. 이 과정에서 mysql에서는 root비밀번호 변경을 요청하니까 위에서 알아낸 password를 입력하고 변경하면 된다. 나중에 직접 root계정 비번만 변경하려면 아래와 같이 하면 됨 root계정 비밀번호…

July 10, 2023
DevOps
On-premise 5. 네트워크 설정

SSL 설정 K8S 네트워크 관련 에러 CNI 재설치 Calico Calico 제거 Calico 설치 On-premise2 k8s 구성 참조 Flannel Flannel 설치 pod-cidr 설정을 k8s cluster와 맞춰주도록 하자. Flannel 제거 참고자료 https://lcc3108.github.io/articles/2020-12/certmanager https://www.youtube.com/watch?v=BlzRx6ROiX0

July 02, 2023
DevOps
On-premise 4. Istio 환경 구축하기

Istio 환경구성 Istio 설치 생각보다 istio 설치하는 것 자체는 간단하다. 아래와 같은 과정을 따라 하면 끝이다. Istioctl 다운로드 : controlplane에서 다운로드 한다. istioctl 명령어 사용하기 위한 PATH 등록 istio 설치 ( https://istio.io/latest/docs/setup/install/istioctl/ ) istioctl로 바로 설치하기 default Profile으로 설치됨 설치 후 deployment에 istiod, istio-ingressgateway설치되었음을 확인 가능 istio-operator로 설치하기 : 이렇게 하면 istio-operator namespace와 함께 istio-operator pod가 생성된다. 그런 후 k apply -f 를 해서 아래 istio-operator 파일을 apply 해주면 istiod, istio-ingressgateway, egressgateway 등 istio가 …

July 02, 2023
DevOps
On-premise 서버 구축하기 3. 호스트 서버 보안

무작위 접속 시도 차단을 위한 ipban 적용 github에서 https://github.com/DigitalRuby/IPBan/releases url로 ipban을 다운로드 한다. 로그인/로그오프 기록을 로깅하여 ‘이벤트뷰어’-’보안’ 에서 확인하도록 하기 서비스등록 ipban.config 수정 후 서비스 재기동하기 로그인 5회 실패시 등록 이벤트 뷰어 보는 법 [실행창] - “eventvwr” 입력하면 된다. 생각보다 호스트 서버에 무작위로 접속 시도하는 경우가 많아서 윈도우 서버의 경우 이벤트 뷰어에 들어가서 누가 언제 호스트 서버에 접속했는지 확인할 수 있다. 접속 시도와 관련된 이벤트 id 및 로그온 유형은 다음과 같다. Event ID 4624 성공적인 로그인을 뜻한다. 따라서 관리자가 접속한 시간이 아닌 경우에 4624가 발생했다면 외부 공격을 의심해야 한다. 4625 계정 로그온 실패로 분류되며, 나의 경우에는 이벤트 뷰어에서 4624 이벤트가 초 단위로 쌓…

July 02, 2023
DevOps
On-premise 1. 공유기, 서버, 네트웍 설정

1. 서버/VM 구축 1. 서버 셋팅 1) 공유기 설정 공유기 어드민 콘솔에 접근하여 DDNS 설정, 포트포워딩, 고정IP 할당을 해준다. 공유기 콘솔에 접근 하는 방법은 공유기 제조사 마다 다른데, 나의 경우는 tplink라서 192.168.0.1로 접근 가능 고정 IP 설정 공유기 콘솔에 들어가면 연결된 서버에 고정 ip를 할당 포트포워딩 설정 할당된 고정 ip에 포트포워딩을 설정한다. 예를 들어 공유기로 8080 포트로 들어왔을 때 서버의 9090포트로 포워딩 되도록 설정하는 것이다. 동적 DNS 설정 ( DDNS ) 실제 공유기의 공인 ip는 변동되기 때문에 동적 DNS 설정을 통해 ‘aaa.tplinkdns.com’ 이런 도메인으로 외부에서 서버로 접속 할 수 있도록 해주어야 한다. 여기까지 하면 aaa.tplinikdns.com:8080으로 접속했을 때, 내 서버가 설치된 공유기의 8080포트로 접속이 되게 되고, 고정ip와 포트포워딩 설정을 통해 LAN내에 존재하는 내…

July 01, 2023
DevOps
On-premise 2. K8S 클러스터 설치

1. 사전 설정 : 사전 설정은 모든 노드에서 실행해주어야 한다. cri-docker Install cri-docker Version Check cri-docker Active Check Docker cgroup Change Require to Systemd 2. 패키지 설치 : kubeadm, kubectl, kubelet 패키지 설치도 모든 노드에서 실행 해준다. Swap disable 처리 iptable이 bridged traffic 을 바라볼 수 있도록 설정. 컨테이너는 가상화된 네트워크 인터페이스를 사용하므로, 컨테이너 간의 통신 및 네트워크 기능을 지원하기 위해 호스트 단에서 커널 parameter를 위와 같이 변경하는 것이다. net.bridge.bridge-nf-call-ip6tables = 1: 이 설정은 IPv6 네트워크 트래픽이 브리지로 전달되어 IP 테이블에서 필터링될 수 있도록 한다. net.bridge.bridge-nf-call-iptables = …

July 01, 2023
DevOps
[Error] Prometheus CrashLoopbackOff

개발, 검증계와 동일한 prometheus의 yaml파일로 운영에서 pod 생성시 CrashLoopbackOff 상태에 빠지게 된다. configmap-reload 컨테이너를 제외시키고 prometheus pod의 로그만 확인 시, ‘/mnt/pv/… file not found’ 와 같은 에러가 발생했다. 실제 pod에서는 컨테이너 기동 시에 해당 tsdb를 찾으려고 하는 모양인데 실제 volume에는 해당 파일이 없는 것으로 pv debugger를 활용하여 확인하였다. PV debugger 활용 PV에 직접 접근할 방법이 별도로 없기 떄문에, busybox 이미지를 활용하여 문제가 되는 prometheus의 pvc를 volume으로 설정, mount하여 접근한다. 결국 tsdb의 path로 마운트된 볼륨에서 해당 경로를 백업한 뒤 모두 비워주고 Pod를 기동하니, 새로운 데이터를 쌓으면서 정상적으로 pod가 기동됨을 확인하였다.

December 14, 2022
Error
DevOps
[AWS architect] 13. 백업 및 복구, 재해대책

개요 재해 발생 시 인프라를 보호하는데 사용할 수 있는 전략은 무엇인가 백 가동 중단 시간을 최소화하면서도 비용 효율적인 방안은 무엇인가 가용성 고가용성 내결함성 백업 재해 복구 RPO, RTO RPO : 데이터 백업해야 하는 빈도 RTO : 복구하는데 걸리는 시간 스토리지 복제 Amazon S3 : cross-region replica Amazon EBS : 스냅샷을 떠서 S3에 저장할 수 있다. 복구용 AMI 구성 데이터베이스 백업 및 복제 RDS DynamoDB AWS backup 지속적인 학습 실습 링크 : https://us-east-1.student.classrooms.aws.training/class/5Hg5hDtgWR8wnGDGevtJcR 실습 참고 영상 : https://us-east-1.student.classrooms.aws.training/class/5Hg5hDtgWR8wnGDGevtJcR AWS architecture 그리기 https://aws.amazon…

July 08, 2022
AWS
DevOps
[AWS architect] 12. Edge service

개요 Route 53 CloudFront 정적 콘텐츠 캐싱 뿐만 아니라 동적 콘텐츠 가속화 ( AWS 고속 네트웍 망 활용) 하는 데에도 사용된다. 성능 개선 DDoS 보호 정상 패킷으로 공격 OSI 계층 공격 AWS Shield AWS WAF 6,7 계층 공격 방어 DDoS 복원력 참조 아키텍처 AWS outposts AWS 장비를 on-premise로 가져와서 private하게 사용하되, AWS의 코어 서비스를 활용할 수 있다. 실습

July 08, 2022
AWS
DevOps
[AWS architect] 11. Serverless

개요 Serverless란 프로비저닝, 관리할 인프라 없음 소비 단위에 따라 자동으로 scaling 내장된 보안/고가용성 컴퓨팅 [AWS 서버리스 서비스 목록 이미지] 서버리스 아키텍처 예시 Amazon API Gateway cognito, lambda 등을 통해 인증 붙일 수 있음 샘플 아키텍처 Amazon SQS 완전관리형 메시지 대기열 서비스 표준 대기열은 순서가 완전히 보장되지는 않는다. FIFO는 보장 Amazon SNS Amazon Kinesis AWS Step Functions 시각적 워크플로우를 사용한 마이크로서비스 조정 각 단계를 자동으로 시작하고 추적할 수 있다. 로그 및 시각화 제공 [이미지] Amazon State Language 실습 : 서버리스 아키텍처 구축

July 08, 2022
AWS
DevOps
[AWS architect] 10. Networking2

개요 AWS 서비스에 대한 연결을 프라이빗 상태로 유지할 수 있는가 VPC 간에 private 방식으로 트래픽을 라우팅하려면? 온프레이미스 <-> AWS 를 연결하려면 VPC Endpoint internet gateway 타지 않고 privateg하게 private subnet내에 있는 EC2 instance와 AWS 완전 관리형 서비스인 DynamoDB를 통신하게 할 수 있다. VPC Endpoint가 없다면 NAT를 타고 IGW를 타고 통신해야 한다. VPC 만들 때 Gateway endpoint와 Interface endpoint 하나 씩만 최초에 만들어주면 된다. Gateway endpoint 라우팅 테이블에 지정된 대상 S3, Dynamo DB 서비스 지원 추가 비용 없음 Interface endpoint private IP의 ENI를 통해 서비스와 통신한다고 이해하면 됨 추가 비용 존재 VPC endpoint도 리소스이므로 리소스 기반 정책을 적용할 수 있다. [심층 방…

July 08, 2022
AWS
DevOps
[AWS architect] 9. 컨테이너

AWS애서의 컨테이너 실행 컨테이너 오케스트레이션 EKS : AWS에서 지원하는 k8s 사용 툴 ECS : AWS에서 개발한 오케스트레이션 툴 ECR : AWS에서 개발한 고가용성 Container registry Fargate, EC2 : 컨테이너 호스팅 EC2의 유휴 리소스를 컨테이너가 다 활용하지 못하면 리소스 낭비이기 때문에 Fargate가 등장하게 되어 컨테이너를 서비리스하게 사용하게 되었음. K8S 아키텍처 [이미지] Amazon EKS controlplane은 AWS가 관리해준다. 워크로드는 Fargate를 활용하거나 EC2를 활용하여 워커노드를 구성한다. EKS workshop을 통해서 EKS 실습해볼 수 있다.

July 07, 2022
AWS
DevOps
[AWS architect] 7. AWS Monitoring

AWS Cloudwatch AWS의 모든 자원은 cloudwatch에 의해서 모니터링 된다. CloudWatch Logs AWS CloudTrail AWS 인프라에서 계정활동을 로깅/모니터링 한다. CloudTrail 로그 예시 VPC 흐름 로그 [image] 송/수신 되는 ip 트래픽에 대한 정보를 모두 수집하여 볼 수 있다. 네트웍 트러블슈팅 시 사용됨 Kinesis Firehose 활용 -> Datadog, splunk Elasticsearch 와 같은 SaaS 연동하기에 용이함 사용자 정의 로그 logback에서 수집한 로그를 CloudWatch agent를 설치하여 연동함으로써 Amazon CloudWatch Logs로 전송할 수 있다. CloudWatch 경보 [417 image] Eventbridge ELB (elastic load balancing) L4/L7 역할, round-robin이 디폴트. 상태확인 수행하여 문제 있을 시 그 쪽으로 안 보냄 무조건 2개 이상…

July 06, 2022
AWS
DevOps
[AWS architect] 8. AWS 자동화

IaC IaC의 장점 : 재사용성과 업데이트 AWS CloudFormation CloudFormation > Stack > create Stack에서 IaC yaml파일을 등록하여 한 꺼번에 프로비저닝 할 수 있다. AWS 대부분의 리소스를 CloudFormation 템플릿으로 제어할 수 있다. AWS Elastic Beanstalk 웹 콘솔에서 클릭으로 할 수 있기 때문에 편의성 면에서 프로비저닝하기 더 좋다. AWS CDK(Cloud Development Kit) python, typescript 등의 언어로 컴파일하여 CloudFormation template을 만들어준다. [보충 이미지] AWS 솔루션 라이브러리 사전 구축된 참조 아키텍처이며 도메인 별로 활용될 수 있는 다양한 아키텍처를 확인할 수 있다. CloudFormation 파일을 제공하는 아키텍처들도 있다. AWS Systems Manager 실습 3: AWS VPC 인프라에 데이터베이스 계층 생성 [실습 아키 이…

July 06, 2022
AWS
DevOps
[AWS architect] 6. AWS Database 서비스

개요 AWS 데이터베이스 솔루션은 무엇인가 클라우드에서 RDB를 더욱 효율적으로 관리할 수 있는 방법은 무엇인가 확장 가능한 key-value NoSQL을 구축하려면 어떻게 해야하는가? AWS 클라우드에서 데이터베이스를 캐시하는 방법은 무엇인가 기존 DB에서 AWS 클라우드로 마이그레이션 할 때 사용하는 도구는 무엇인가 RDB 및 NoSQL [image] 여러가지 AWS 데이터베이스 서비스 RDS, Aurora, DynamoDB외에도 Neptune등 많은 서비스가 있음 크기 조정, 고가용성, DB백업, DB s/w 패치, 설치 OS 패치 등의 작업을 사용자가 직접할 필요 없음 크기 조정 시 blue-green deploy도 지원하여 서비스 다운타임도 없앴을 수 있음 RDS [이미지] RDS Multi AZ 배포 stanby instance를 primary instance와 다른 AZ에 두고, 동기화 복제를 사용한다. primary instance가 fail 되면 stanby가 바로…

July 06, 2022
AWS
DevOps
[AWS architect] 5. AWS Storage

개요 블록/파일/객체 스토리지를 검토할 때 고려해야 하는 서비스는 무엇인가? 사용 사례에 적합한 객체 스토리지 솔루션을 어떻게 선택하는가? AWS에서 안전하고 확장 가능한 보안 스토리지를 구축하기 위한 파일 기반 옵션은 무엇인가? 어떻게 하면 짧은 시간 내에 대량의 데이터를 클라우드로 이관할 수 있는가? 스토리지(다시 듣기) 스토리지는 일반적으로 3개의 타입으로 나뉜다. 블록 스토리지 원시 스토리지 데이터가 관련 없는 블록의 어레이로 구성된다. 읽기/쓰기 자유 하드디스크, SAN 파일 스토리지 NAS 객체 스토리지 블록/파일 스토리지와 달리 디스크에 마운트 되지 않는 솔루션이다. http요청에 의해서 쓴다. ‘비연결 기반’이기 때문에 확장성이 매우 높다. 저장된 객체에 대한 unique key가 존재한다. [254 이미지] Amazon S3 버킷을 만들 때 용량을 설정하지 않는다. 용량이 무제한임 버킷에 데이터를 넣으면 3개 이상의 가용영역에 데이터를 복제하여 매우 고가용성이다. …

July 06, 2022
AWS
DevOps
[AWS architect] 3. Networking 기초

개요 워크로드를 지원하기 위해 충분한 IP주소가 네트웍에 있는 지를 어떻게 확인하는가? AWS 계정에 안전한 동적 네트워크 인프라륵 구축하는 방법은 무엇인가? 네트워크의 리소스 보호를 위해 인/아웃바운드 트래픽을 필터링하는 방법은 무엇인가? IP 주소 지정 -> 워크로드를 지원하기 위해 충분한 IP주소가 네트웍에 있는 지를 어떻게 확인하는 하는가? -> 즉 데이터 센터를 얼마나 크게 지을 것인가와도 관련이 있다. ip주소는 네트워크와 호스트를 식별한다. IPV4는 고갈되었기 때문에 NAT 대역을 사용하며 RFC1918규약에 따라 보통 10.대역, 192. ,172. 대역을 사용한다. CIDR ( classless inter-domain routing ) IP를 예전에는 클래스 단위로 나누었지만 해당 방법은 비효율적이어서 CIDR방법을 요즘에는 사용한다. VPC에서 지원되는 CIDR블록 /16 : 65536개 … /28 : 16개 VPC(Virtual Private Cloud)…

July 05, 2022
AWS
DevOps
[AWS architect] 4. Computing

개요 EC2에 서버를 배포할 때 고려해야 할 사항이 무엇인가? EC2에 연결할 볼륨 유형을 어떻게 알 수 있는가?(EBS) 비용을 최적화 하는 방법은 무엇인가? 서버리스 컴퓨팅 옵션은 어디서부터 시작할 있는가? EC2 인스턴스 생성 시 고려사항 이름/태그 태그 룰 지정 : enterprise레벨에서는 중요햐다. [ 태그 룰 이미지 ] AMI(Amazon Machine Image) : OS image + 필요한 설정 enterprise 레벨에서는 기본 AMI에 보안 등의 설정을 추가하여 ‘사용자 지정 AMI’로 만들어서 사용한다. 인스턴스 유형 이해 [ 인스턴스 유형 이름 이미지 ] 인스턴스 패밀리 범용 : T3, M5 메모리 최적화 : R5 스토리지 최적화 : I3 컴퓨팅 최적화 : C5 가속 컴퓨팅 : G4, F1 인스턴스 세대 : 최신 세대를 쓰는 것이 오히려 비용이 더 줄어듬. 추가 속성 : g(graviton), a(amd) 등 인스턴스 크기 : xlarge, 2xlarge…

July 05, 2022
AWS
DevOps
[AWS architect] 2. Account & Security

보안 주체와 자격증명 보안주체란 AWS리소스에 대한 작업을 요청할 수 있는 엔티티 root user IAM user IAM group Role IAM 구성요소 User Group : user는 여러 그룹에 속할 수 있다. Policy : json으로 구성된 권한을 담은 document Role : 임시 권한 부여(안전모)할 떄 사용 보안 정책 IAM 자격증명 기반 정책 ( 열쇠 들고 따고 들어가는 유형 ) IAM리소스 기반 정책 ( 경비원이 문 열어주는 유형 ) IAM 자격 증명 기반 정책 자격 증명 기반 정책의 경우 아래와 같다. 서비스 액세스 AmazonEC2FullAccess AmazonEC2ReadOnlyAccess 직무 AdministratorAccess Billing 사용자 정의 정책 DiChaTeam … 자격증명 기반 정책은 다음과 같이 작성할 수 있다. IAM 리소스 기반 정책 리소스 기반의 정책은 S3버킷이나 Lambda함수와 같은 단일 리소스에 연결되며 어떤…

July 05, 2022
AWS
DevOps
[AWS architect] 1. Architecting 기초

AWS 인프라 AWS는 2023년 7월 현재 전 세계 31개의 리전(region)을 지원하며, 각 리전은 최소 3개 이상의 가용영역(Availability zone)으로 이루어져 있다. 각 가용영역은 1개 이상의 데이터 센터로 구성되어 있다. Region Availability zone Local zone Edge location 어떤 리전을 선택해야 하는가? 법규(governence) 지연시간(latency) 서비스(AWS service) : 리전 별로 지원하는 서비스 수가 다름 비용 : 예컨대 상파울로 리전은 브라질 현지 전기 사정이 안 좋아서 직접 발전기까지 돌리기 때문에 cost가 비쌈 로컬 존(Local zone) region을 만들기까지는 애매한 지리적 위치에 있는 사용자에게 낮은 latency로 서비스를 제공하고자 할 떄 사용된다. 예컨대 Oregon region 안에는 LA의 로컬 존이 있다.(oregon<->LA거리 약 1000km) AWS에서는 LA가 별도 reg…

July 05, 2022
AWS
DevOps
DBeaver에서 MySQL DB dump하여 복사하기

기존에 MySQL 환경에서 1개 database로만 운영하던 서비스에 dev용 database를 추가하기 위해 DBeaver에서 dump하여 복사한 방법을 알아보자. 먼저 복사하려는 대상 db에서 우클릭하여 ‘dump database’를 선택한다. 그 후 정확한 DB와 모든 table들을 선택한 후 다음 output 폴더를 지정해주고 local client를 설정해준 이후 ‘Start’ 버튼을 눌러 dump하면 끝이다. 그 후 dev용 database (나의 경우 onyou-dev) 를 생성한 다음 우클릭하여 Restore database를 선택한다. 기존 db에서 dump로 생성했던 sq을 선택하고 ‘Start’ 눌러주면 끝이다.

July 01, 2022
Data
DevOps
[Git] Personal access token 이용하여 github remote 인증하기 in Mac

로컬에서 Github repo 로 push 할 때 이제는 깃헙계정 패스워드가 아닌 Personal access token을 입력하도록 한다. 근데 매번 이걸 입력하기는 너무 귀찮으니, personal access token을 발급 받아 로컬 키체인에 저장해두면 된다. personall access token 발급은 계정 setting - developer setting - personal access token 에서 generate하면 된다. 해당 토큰은 디바이스 별로 하나씩 생성하는 것이 좋을 듯하다. 나 같은 경우는 아래와 같이 ‘mac’ 이란 이름으로 토큰을 만들었고 repo에 대한 권한만 주었다. 그 후 command + space 하여 ‘keychain Access’ 를 열어서 아래와 같이 깃헙의 주소와 나의 깃헙 계정명을 적은 후 암호 란에 토큰 값을 복붙해주면 된다. 마지막으로 맥 터미널을 열어서 아래 명령어를 통해 키체인을 로컬 git에 등록해주면 끝이다.

February 09, 2022
DevOps