열네번째 수업 | 스테이블 디퓨전 복습 | 클라우드 보안 | 로드밸런서 실습

Faithful Dev·2024년 9월 30일
0

박온순 강사님

스테이블 디퓨전 복습

Azure ML 실행 및 SSH 접속

  1. Azure 포털 접속: 포털 로그인 후, VM 페이지로 이동하여, 중지되어 있는 VM 선택, '시작' 버튼 눌러 실행
  2. SSH로 접속: SSH를 이용해 가상 머신 실행 후 접속할 수 있다. .pem 파일이 남아 있는지 확인!
ssh -i .\5a011-sdlab-key.pem azureuser@<공용IP주소> -p 50000
  • -i .\5a011-sdlab-key.pem: SSH 접속에 필요한 키 파일 경로
  • azureuser@<IP주소>: 접속할 가상머신 사용자 이름(azureuser)과 IP 주소
  • -p 50000: SSH가 열려있는 포트 번호

가상 환경 설정

  1. Downloads 폴더로 이동: SSH 접속 후 다운로드 폴더로 이동 (key 파일을 Downloads 폴더에 저장해뒀기 때문)
cd Downloads
  1. 가상 환경 활성화: Conda를 사용하여 가상 환경을 활성화. 해당 가상환경은 Stable Diffusion 실행을 위해 지난 수업에서 설정해둔 환경이다.
conda activate a1111-sdwebui
  • conda activate: 가상 환경을 활성화하라는 명령
  • a1111-sdwebui: Stable Diffusion을 실행하기 위한 환경 이름

Stable Diffusion 경로 설정

  1. 모델 경로로 이동: Stable Diffusion 모델이 있는 폴더로 이동
cd stable-diffusion-webui/models/Stable-diffusion
  • cd: 폴더 이동 명령어
  • 해당 경로는 Stable Diffusion 모델 파일들이 위치한 디렉토리이다.
  1. 루트 디렉토리로 이동: 모델 디렉토리에서 다시 상위 디렉토리로 이동
cd ../..
  • ../..: 두 단계 위의 상위 디렉토리로 이동한다는 의미. Stable Diffusion의 루트 디렉토리로 돌아가야 실행 파일을 실행할 수 있다.

Stable Diffusion Web UI 실행

accelerate launch --mixed_precision=bf16 --num_cpu_threads_per_process=6 launch.py --share --enable-insecure-extension-access --xformers --no-half-vae --gradio-auth username:password
  • accelerate launch: Stable Diffusion 실행을 위해 accelerate 라이브러리 사용. >> GPU 성능을 최대한 활용하기 위해 사용하는 것!
  • --mixed_precision=bf16: 혼합 정밀도 설정을 사용하여 메모리 사용 최적화. bf16(Bfloat16)은 딥러닝에서 자주 사용하는 데이터 타입이라고 한다. 나중에 더 공부하다보면 자주 만나게 될까?
  • --num_cpu_threads_per_process=6: CPU 스레드 수를 6개로 설정하여 실행 성능 최적화
  • launch.py: Stable Diffusion Web UI를 실행하는 파이썬 스크립트
  • --share: 외부에서 Web UI에 접근할 수 있도록 설정
  • --enalbe-insecure-extension-access: 확장 기능에 접근할 수 있게 해줌 (BUT 보안 위험 有)
  • --xformers: 성능 최적화를 위한 추가 옵션
  • --no-half-vae: VAE(Variational Autoencoder) 관련 문제 해결을 위한 옵션
  • --gradio-auth username:password: Web UI에 접속할 때 필요한 사용자 이름과 비밀번호 설정

여기서 잠깐, 이렇게 Stable Diffusion을 실행하니 local url과 public url이 제공되었다. local url로 Stable Diffusion 실행을 시도하니 접속이 불가했다. 왜?

Local URL의 의미

  • Local URL은 보통 localhost 또는 127.0.0.1로 시작하는 URL이다. 이는 해당 가상 머신 내부에서만 접속 가능한 주소로, 머신 외부에서 접속하려고 하면 연결이 되지 않는다.
  • Azure의 가상 머신은 인터넷에 연결된 외부 컴퓨터이다. 즉, 로컬 컴퓨터와는 네트워크적으로 분리되어 있다. 로컬 URL은 가상 머신 내에서만 작동하므로, 로컬에서 직접 접속하려 하면 접근할 수 없다.

Public URL의 역할

  • Public URL은 가상 머신에 대해 외부에서 접근할 수 있도록 설정된 URL이다. 이 URL은 Azure 가상 머신이 외부 네트워크에 열려 있는 포트를 통해 접속할 수 있도록 설정되었으므로, 로컬 컴퓨터에서 접근 가능하다.
  • --share 옵션을 통해 public URL이 생성되며, 이 URL을 통해 인터넷 상에서 누구나 접속할 수 있게 됨 (BUT 우리는 비밀번호를 설정하였으므로 인증된 사용자만 접근 가능)

왜 Local URL은 작동하지 않았을까?

Local URL은 가상 머신 내에서만 유효하므로, 로컬 컴퓨터에서 접근하려고 해도 접근할 수 없다. 만약 로컬 URL을 꼭 사용하고 싶다면, Azure 가상 머신과 로컬 컴퓨터 간에 포트 포워딩을 설정해야 한다고 한다. 어려우니까 넘어가자.

사이버 보안

사이버 공격 vs. 사이버 보안

  • 사이버 공격: 컴퓨터 시스템이나 네트워크를 파괴하거나 데이터를 훔치기 위한 악의적 행위.
  • 사이버 보안: 데이터와 시스템을 보호하기 위한 기술과 방법

사이버 공격의 주요 유형

  • 악성코드(Malware): 시스템을 손상시키는 악성 소프트웨어
  • 랜섬웨어: 데이터를 암호화해 인질로 잡고 금전을 요구
  • 피싱: 위장 이메일을 통해 정보를 탈취
  • DoS/DDoS 공격: 과도한 트래픽으로 시스템을 마비시키는 공격

사이버 보안의 역사절 발전

  • 1980년대, 최초의 바이러스 및 백신 등장
  • 1990년대, 인터넷 확산과 함께 사이버 보안이 중요한 문제로 대두
  • 2000년대, 사이버 범죄가 진화, 소셜 엔지니어링과 랜섬웨어 부상
  • 2010년대, 사이버 전쟁과 데이터 유출이 빈번하게 발생

사이버 보안의 기본 원칙 (CIA)

  • 기밀성(Confidentiality): 허가된 사람만이 데이터에 접근
  • 무결성(Integrity): 데이터가 변경되지 않고 신뢰성을 유지
  • 가용성(Aavailability): 필요할 때 시스템과 데이터에 접근 가능

주요 국가의 사이버 보안

  • 미국: 세계 최고 수준의 사이버 보안 인프라와 법제도 보유
  • 이스라엘: AI를 활용한 독창적 해킹 방어 기술
  • 한국: 세계 사이버 보안 지수 상위권, 정부 주도적 보안 강화

개인정보 보호

  • 개인정보 유출 위험: 해킹, 내부자에 의한 유출, 정보 오발송 등 다양한 경로
  • 개인정보 보호 원칙: 최소한의 정보만 수집하고, 암호화 등으로 보호

인공지능(AI)과 사이버 보안의 결합

  • AI 도입 효과: 자동화된 위협 탐지와 대응을 통해 사이버 공격 방어
  • AI의 역할: 악성코드 분석, 이상 행동 탐지, 리소스 부족한 보안팀 지원

클라우드 보안 관리자 (Azure Active Directory)

인증과 권한 부여 (Authentication & Authorisation)

  1. 공유 책임 모델 (Shared Responsibility Model): 클라우드 보안은 사용 모델에 따라 책임이 분담됨
    • SaaS, PaaS, IaaS, On-premises 등에서 보안 책임 범위가 달라짐
    • 기업의 책임: 클라우드 서비스를 사용하더라도 데이터, ID, 기기 등의 보안은 서비스를 이용하느 기업이나 개인이 책임져야 함
  2. 심층 방어: 다층 보안을 통해 공격을 지연시키고 차단하는 방식. CIA 원칙을 준수
  3. 제로 트러스트 모델: '아무도 믿지 않고, 모두 검증'하는 보안 접근법
    • 주요 요소: ID, 디바이스, 애플리케이션, 데이터, 인프라, 네트워크
  4. 암호화와 해시
    • 암호화: 데이터를 보호하는 양방향 방식
    • 해시: 데이터를 고정된 길이로 변환하는 단방향 방식. 주로 비밀번호 관리와 데이터 무결성 보장에 사용

ID 관리와 인증

  1. ID: 모든 사용자가 리소스에 접근하기 위해 ID가 필요함
    • 인증 (AuthN): 사용자의 신원을 검증하는 과정
    • 권한 부여 (AuthZ): 인증된 사용자에게 어떤 리소스에 접근할 권한이 있는지 결정하는 과정
  2. 싱글 사인 온(SSO): 한 번 로그인하면 여러 애플리케이션에 접근할 수 있게 해주는 인증 방식
  3. Azure Active Directory(AAD): 마이크로소프트의 클라우드 기반 ID 관리 서비스
    • 구독(Subscription) 을 통해 Azure 리소스에 대한 보안 경계를 설정
    • 그룹 관리: 보안 그룹 및 Microsoft 365 그룹을 통해 사용자의 권한과 리소스를 간편하게 관리
  4. 외부 ID 및 하이브리드 ID: 외부 사용자나 서비스와의 안전한 상호작용을 지원. 하이브리드 환경에서는 Azure AD Connect로 온 프레미스 Active Directory와 클라우드 Azure AD를 동기화 가능

다단계 인증과 보안

  1. 다단계 인증(MFA): 기본 암호 외에 추가적 인증 요소를 요구하여 보안을 강화
  2. SSPR(셀프 서비스 암호 재설정): 사용자가 암호를 직접 재설정할 수 있는 기능
  3. Azure AD의 암호 보호 기능: 전역 금지 암호 목록, 사용자 지정 암호 목록 등을 사용하여 암호 공격 방지

액세스 관리 및 ID 보호

  1. 조건부 액세스(Conditional Access): 사용자의 신호에 따라 액세스 정책을 결정하여 보안 강화
  2. 역할 기반 액세스 제어(RBAC): 사용자 역할에 따라 리소스에 접근할 수 있는 권한을 제어
  3. ID 거버넌스: 사용자와 리소스에 대한 권한 관리 및 액세스 검토
    • PIM(Privileged Identity Management): 중요한 리소스에 대한 접근 권한을 정밀하게 관리하여 보안 강화

클라우드 보안 기능

네트워크 보호 기능

  • Azuere DDoS Protection: DDoS 공격을 실시간으로 감지하고 차단하는 서비스로, 기본 및 표준 계층이 있음
  • Azure Firewall: 외부 공격으로부터 Azure Virtual Network(VNet)를 보호하는 중앙 방화벽
  • 웹 애플리케이션 방화벽(WAF): 웹 애플리케이션을 공격으로부터 보호
  • 네트워크 세분화(VNet) 리소스를 그룹화하고 격리해 네트워크 보안을 강화
  • 네트워크 보안 그룹(NSG): 네트워크 트래픽을 허용하거나 차단하는 규칙 설정

가상 머신 보호 기능

  • Azure Bastion: 외부 포트 없이 가상머신에 안전하게 접속할 수 있는 서비스
  • JIT(Just-in-Time) 액세스: 필요한 순간에만 가상머신 접근을 허용해 보안 강화

데이터 보호 기능

  • Azure 암호화: 스토리지 및 디스크 암호화, TDE를 통해 데이터 보호
  • Azure Key Vault: 비밀, 키, 인증서를 안전하게 관리하는 서비스

보안 관리

  • 클라우드용 Microsoft Defender: 클라우드 보안 태세(CSPM)와 워크로드 보호(CWP) 제공
  • 보안 점수: 클라우드 리소스의 현재 보안 상태를 점수로 확인하고 개선
  • Azure Ssecurity Benchmark(ASB): Azure 보안 모범 사례를 제공해 보안 관리에 도움

로드 밸런서 실습

리소스 그룹 만들기

  1. Azure 포털 로그인
  2. 리소스 그룹 선택 후 '만들기' 클릭
  3. 이름 설정 5a011-loadbalancer-rg / 지역 설정
  4. '만들기' 클릭

NAT 게이트웨이 만들기

NAT 게이트웨이는 외부에서 내부 네트워크로 접속할 수 있게 하는 장치!
1. Azure 포털에서 'NAT Gateway' 검색, '만들기' 클릭
2. NAT 게이트웨이 이름 설정 5a011-nat-gateway / 지역 설정
3. TCP 유휴 시간: 15초
4. 아웃바운드 IP에서 새 공용 IP 주소 만들기 5a011-nat-gw-public-ip
5. '검토 + 만들기' 버튼 선택, '만들기' 클릭

가상 네트워크(VNet) 만들기

가상 네트워크는 Azure에서 여러 대 컴퓨터를 하나의 네트워크로 묶는 기능. 이 가상 네트워크 안에 서버들이 서로 통신할 수 있다. 중요한 것! 서브넷 설정!
1. Azure 포털에서 '가상 네트워크' 선택, '만들기'
2. 리소스 그룹 선택 5a011-loadbalancer-rg
3. 가상 네트워크 이름 설정 5a011-lb-vnet
4. IP 주소 메뉴에서 서브넷 설정
5. 서브넷 이름 지정 5a011-backend-subnet, 나머지 설정은 그대로 두기
6. NAT 게이트웨이를 연결하고, '검토 + 만들기' 클릭

로드 밸런서 만들기

로드 밸런서는 여러 대의 서버가 있을 때, 사용자가 웹사이트에 접속하면 그 요청을 여러 서버에 나눠주는 역할을 한다. 이렇게 하면 서버가 과부하에 걸리지 않고, 빠르게 동작할 수 있다.
1. Azure 포털에서 '부하 분산' 검색, '부하 분산 장치 만들기' 클릭
2. 리소스 그룹 선택 5a011-loadbalancer-rg, 이름 설정 5a011-load-balancer
3. SKU: 표준 / 형식: 공개(Public) / 계층: 지역 설정
4. 프론트 엔드 IP 추가. 사용자가 웹사이트에 접속할 때 사용하는 주소가 됨
- 프론트 엔드 이름 설정 5a011-lb-frontend
- 새 공용 IP 생성
5. 백엔드 풀 구성. 백엔드 풀은 로드 밸런서가 트래픽을 보내줄 서버들의 그룹이다.
- 백엔드 풀 이름 지정 5a011-lb-backend-pool, 위에서 만든 가상 네트워크 연결
6. 부하 분산 규칙 설정. 이 규칙은 사용자 요청을 서버에 어떻게 나눠줄지 정하는 규칙이다.
- 이름 설정 5a011-lb-HTTP-rule
- 상태 프로브: HTTP
- 포트: 80

상태 프로브가 뭐지?
상태 프로브(Health Probe) 는 로드 밸런서가 서버들의 상태를 확인하는 방법. 상태 프로브는 정기적으로 각 서버에 신호를 보내 서버가 살아있는지 확인하고, 이 신호를 받은 서버가 제대로 응답하면 그 서버는 정상(Healthy) 상태로 간주, 응답이 없거나 오류가 발생하면 비정상(Unhealthy) 상태로 간주한다.
5a011-lb-HTTP-rule부하 분산 규칙이다. HTTP 프로브는 웹서버에 HTTP 요청을 보내서 서버가 정상적으로 작동하는지 확인하는 방식이다.
프로브 주기마다 상태 프로브가 서버에 요청을 보내서 응답 상태를 확인하는데, 응답이 정상적으로 오면 서버는 정상(Healthy) 상태로 유지되고 로드 밸런서가 트래픽을 그 서버로 계속 보내준다. 만약 응답이 없거나 오류가 발생하면 비정상(Unhealthy) 상태로 간주되어 해당 서버로의 트래픽을 차단한다.

가상머신 만들기

가상 머신(VM) 은 컴퓨터를 가상으로 만들어주는 기능으로, 우리는 웹 서버를 이곳에 설치. 로드 밸런서 실습에서는 두 개의 가상 머신을 만들어서, 각각 로드 밸런서에 연결해주었다.

VM1 생성

  1. Azure 포털에서 '가상 머신' 검색, '만들기' 클릭
  2. 리소스 그룹 지정 5a011-loadbalancer-rg, 가상 머신 이름 설정 5a011-lb-vm1
  3. 이미지: Windows Server 2022 Datacenter / 보안 - 사용자 이름/암호 방식
    • 사용자 이름 및 암호 설정
  4. 네트워크 설정에서 위에서 만든 가상 네트워크와 서브넷을 선택
  5. 공용 인바운드 포트: Bastion을 사용해 접속할 예정이므로 X
  6. 만들기

VM2 생성

  1. 이름 설정 5a011-lb-vm2
  2. 가상 네트워크와 서브넷을 지정하고, 같은 설정으로 생성

가용성 영역(Availability Zone)
같은 Azure 지역(Region) 내에서 서로 물리적으로 분리된 데이터 센터를 의미한다. 로드밸런서 실습에서 VM1은 Zone 1에, VM2는 Zone2에 각각 할당했다.
서버를 같은 영역에 두면, 그 영역에 장애가 발생할 경우 모든 서버가 중단될 수 있는데, 서로 다른 가용성 영역에 서버를 나누어 두면, 한 곳에서 장애가 발생해도 다른 곳의 서버는 계속 정상 작동할 수 있다.

웹 서버 설치하기

이제 가상 머신들에 IIS 웹서버를 설치할 것! IIS는 웹 페이지를 제공하는 Windows 서버 소프트웨어이다. 각각의 가상 머신(VM1, VM2)에 접속해서 powershell을 통해 아래 명령어 실행.

# IIS 서버 역할 설치
Install-WindowsFeature -name Web-Server -IncludeManagementTools

# 기본 웹 페이지 삭제
Remove-Item C:\inetpub\wwwroot\iisstart.htm

# 서버 이름을 보여주는 새로운 웹페이지 만들기
Add-Content -Path "C:\inetpub\wwwroot\iisstart.htm" -Value $("Hello World from " + $env:computername)

이 코드를 실행하면, 웹 서버가 설치되고 접속 시 서버 이름을 보여주는 페이지가 나온다.

테스트

로드 밸런서의 프론트 엔드 IP 주소를 웹 브라우저에 입력하면 VM1과 VM2가 번갈아가며 웹 페이지를 보여준다. 브라우저에서 F5 키로 새로고침을 누르면 서버가 바뀌는 것을 확인할 수 있다.
만약 VM1 또는 VM2를 중지하면, 나머지 하나의 서버만 계속해서 표시된다. 이것이 로드 밸런서의 핵심 기능으로, 하나의 서버가 중지되더라도 나머지 서버로 트래픽을 자동으로 넘겨주는 것

마무리

리소스 삭제하기!

Personal Insight

클라우드 보안 이론 부분 수업이 빠르게 진행되어 따라가기가 벅차고 숨 가쁜 순간도 있었지만, 중간중간 강사님께서 퀴즈를 진행해주셔서 덕분에 중요한 부분을 짚어가며 잠시 환기를 할 수 있었고, 벅차다고 느꼈던 내용 정리에 도움이 되었다. 나머지는 내가 스스로 복습하면서 소화해야 할 것 같다. 강사님 피셜 클라우드 부분은 한학기 분량이라고..
첫 월말 평가가 있었는데 스크롤 하다가 아무래도 클릭이 잘못된 문항이 있었나보다. 제출 전에 검토했으면 알았을 건데, 검토의 부재로 틀린 문제가 있었다. 너무 당연하게도 답에 자신이 있다 하더라도 꼭 한 번 더 확인하고 제출하는 습관을 가져야겠다는 교훈,, 😅
지난주에 혼자 로드 밸런서 실습을 했을 때는 그냥 이렇게 작동하는구나 하고 넘어갔는데, 오늘 수업에서 안할 줄 알았던 로드 밸런서 실습을 동기들과 함께 배우고 또 끝나고 다시 복습하며 스스로 정리하니 확실하게 이해가 되었다. 개념을 확인하고, 실습을 반복하면서 실제로 어떻게 작동하는지 더 명확하게 파악할 수 있고, 여러 번 학습하고 체득하는 과정이 굉장한 유익이 된다는 걸 다시금 느꼈다.
내일은 공휴일이지만 수업이 있는데, 게을러지지 말고 부지런하기.

profile
Turning Vision into Reality.

0개의 댓글