- subnet과 NIC 둘 다에 NSG 설정 시, 두 수준 모두에 allow 규칙이 있어야 트래픽이 허용됨(subnet 및 NIC에 대해 독립적으로 평가됨)
Load Balancing
ASG(Application Security Groups)
- 가상 머신(웹 서버, 애플리케이션 서버)을 논리적으로 그룹화
- 트래픽 흐름을 제어하는 규칙 정의
- 보안을 강화하기 위해 ASG를 NSG로 포장
Service Endpoint
- VNet(가상 네트워크) Service Endpoint는 Azure 백본 네트워크에서 최적화된 경로를 통해 Azure 서비스에 대한 안전한 직접 연결을 제공한다.
- Service Endpoint를 사용하면 가상 네트워크에 대해 중요한 Azure 서비스 리소스를 보호할 수 있다.
- VNet에 public IP 주소가 없어도 private IP 주소를 통해Azure Service Endpoint에 연결할 수 있다.
service endpoint
실습) NSG, ASG 조직에는 두 개의 서버 그룹이 있다. 웹 서버 및 관리 서버. 각 서버 그룹은 자체 ASG에 있어야 한다. 관리 서버로 RDP를 전송할 수 있어야 하고, 웹 서버는 인터넷에서 액세스할 때 IIS 웹 페이지를 표시해야 한다. 또한 트래픽이 올바르게 라우팅되도록 하려면 NSG를 만들어야 한다.
실습 구성도NSG
가상 네트워크 myVirtualNetwork를 만들고, mySubnet이라는 서브넷을 만든 후
myNSG라는 네트워크 보안 그룹을 생성하여 이 서브넷에 연결시킨다.
Inbound 규칙 추가
myNSG에 Inbound 규칙을 추가한다.
myAsgWebServers ASG에는 80,443 포트로 들어오는 것을 허용하고 (웹)
myAsgMgmtServers ASG에는 3389 포트로 들어오는 것을 허용한다. (원격 접속)
myVmMgmt
myVmMgmt 로 원격 접속을 한 후, 여기서 myVmWeb에 원격 접속을 한다.
myVmMgmt는 원격 접속 포트를 허용해줬기 때문에 외부에서 들어올 수 있지만, myVmWeb은 허용하지 않았기 때문에 외부에서 곧바로 접속이 불가능하기 때문이다.
public IP를 확인한 후, 접속해본다. 80,443번 포트로 들어오는 것을 허용해놨기 때문에 접속에 성공할 수 있다.
Host Security(Server)
Endpoint Protection
- Endpoint System : 사용자와 직접 상호 작용하는 컴퓨터 시스템
- 엔드포인트를 보호하기 위해서 맬웨어 방지 솔루션 설치. Cloud와 통합하여 상태를 모니터링할 수도 있다.
Virtual Machine Templates - Resource Manager Templates를 사용하여 VM을 정의한다. 이를 사용하면 VM을 쉽게 배포 그리고 다시 배포할 수 있다. 새로 업데이트되어 보안이 강화된 OS를 강제로 배포하려는 경우 VM을 주기적으로 다시 배포하는 것이 좋은데, 템플릿을 사용하면 쉽게 배포가 가능하다.
Remote Access Management - Windows 기반 가상 시스템을 위한 RDP(원격 데스크톱 프로토콜) - Linux 기반 가상 시스템을 위한 SSH(Secure Shell Protocol) - SSL을 통한 포털을 통한 RDP/SSH의 기반 서브넷
Update Management - 전반적으로 업데이트 상태를 평가하고 on-premise 및 Azure 환경에 대해 Windows 서버 및 Linux 서버 업데이트를 관리할 수 있다.
Disk Encryption - 운영 체제 및 데이터 디스크를 암호화하여 제공할 수 있다. - Windows는 BitLocker, Linux는 DM-Crypt 이용 - Azure Key Vault와 통합되어 디스크 암호화 키 및 비밀을 제어 및 관리할 수 있다.
Container Security
ACI(Azure Container Instance) : 간단한 애플리케이션, 작업 자동화 및 빌드 작업 등 컨테이너에서 작동하는 시나리오용 PaaS 서비스 - 빠른 시작 시간(Azure에서 몇 초만에 컨테이너를 시작할 수 있음) / Public IP 와 DNS로 컨테이너 액세스 가능 / 애플리케이션이 VM에 있는 것처럼 컨테이너에서 격리되도록 보장
※ 1. 도커 호스트가 vm 인 경우 docker를 설치하고 로그인을 한 후에 image를 Azure Container Registry에 있는 걸 다운 ※ 2. 도커 호스트가 Azure Container Instance인 경우에 docker를 설치하지 않고 Azure Conatainer Registry 에 있는 걸 바로 다운받아 서비스 할 수 있음 (ACI가 좋은 이유는 Public IP가 컨테이너마다 부여되고, docker를 따로 안깔아도 된다는 점)
ACR(Azure Container Registry) : 컨테이너 이미지를 저장하고 배포하는 서비스 - Azure CLI 또는 표준 docker login 명령을 사용하여 레지스트리에 로그인 > Azure Container Registry는 HTTPS를 통해 컨테이너 이미지를 전송하고 TLS를 지원하여 클라이언트 연결을 보호 - RBAC(역할기반 액세스 컨트롤) 을 사용하여 사용자 또는 시스템에 세분화된 권한을 레지스트리에 할당할 수 있음
AKS(Azure Kubuernetes Service) 컨테이너 기반 애플리케이션 배포 및 관리를 간소화하는 서비스
실습) ACR과 AKS 구성하기 & 보안 활동 1. Dockerfile을 사용하여 이미지를 빌드 2. Azure Container Registry를 사용하여 이미지 저장 3. Azure Kubernetes 서비스를 구성 4. 내부 및 외부 모두에서 컨테이너 애플리케이션을 보호하고 액세스
az group list --query "[?name=='AZ500LAB09']"-o table
az acr create --resource-group AZ500LAB09--name az500$RANDOM$RANDOM--sku Basic
az acr list --resource-group AZ500LAB09
Azure Cloudshell (bash)를 이용해
image를 저장할 Azure Container Regisrty를 생성한다.
Task 2: Create a Dockerfile, build a container and push it to Azure Container Registry
echo FROM nginx >DockerfileACRNAME=$(az acr list --resource-group AZ500LAB09--query '[].{Name:name}' --output tsv)
az acr build --image sample/nginx:v1 --registry $ACRNAME--file Dockerfile .
nginx 이미지를 담고있는 Dockerfile을 이용해 컨테이너를 생성하고, Task1에서 만들었던 ACR에 넣어준다.
Task 3: Create an Azure Kubernetes Service
Kubernetes Service를 하나 생성하고 배포된 것을 확인한다.
Task 4: Give AKS permission to access the ACR
이전에 생성한 Azure Container Registry 인스턴스를 사용하도록 AKS 클러스터를 구성한다.
Task 5: Deploy an external facing container from ACR to AKS
처음에 받아뒀던 파일을 cloudshell 업로드/다운로드 기능을 활용하여 업로드한다.yaml 파일 24번째 줄에서 내가 만든 ACR 이름으로 바꿔줘야 한다.
Task 6: Verify you can access the container externally
Task 7: Deploy an internal facing container from ACR to AKS
external yaml 파일과 똑같이 24번째 줄에서 수정을 하고
Task 8: Verify you can access the container internally
external pod에서 internal pod가 동작중인지 확인해본다.
실습 2) Azure Kubernetes Service 이용 이 때 image는 Azure Container Registry에 저장된 것을 사용
① Resouce Group 생성 ② ACR를 GUI로 생성하세요 ACR 서버 : yerimcr.azurecr.io ACR Username : yerimcr Password : Kv1=A1A60MDBp5kSRI7m6GLP/qu5JMaY
③ CentOS VM을 하나 생성하여 docker를 설치합니다. yum install epel-release -y yum update -y vi /etc/sysconfig/selinux --> selinux=disabled로 수정 reboot curl -sSL http://get.docker.com | bash systemctl start docker
④ nginx, jesuswithme/verify-pod를 다운로드하여 nginx는 내용을 수정하세요 docker pull nginx docker pull jesuswithme/verify-pod docker run -d --name testing -p 80:80 nginx docker exec -it testing /bin/bash /# find -name "index.html" >> index.html 수정하기 위해 위치를 찾고 /# echo "Hello" > ./usr/share/nginx/html/index.html /# exit (VM으로 만든 컨테이너는 http://VM의publicIP:컨테이너포트번호로 확인한다)
⑤ ACR에 맞는 tag를 넣어서 이미지를 생성합니다. docker tag 이미지 ACR서버/ACR에저장할이미지이름:태그명 docker commit 컨테이너ID ACR서버/ACR에저장할이미지이름:태그명 (docker images 하면 확인가능)
⑥ VM에서 ACR에 Image를 업로드합니다 docker login ACR서버 -u ACRusername docker push ACR서버/이미지이름:태그명 (이제 ACR에서 올라간 이미지 확인 가능!!)
⑦ ACI에서 Container를 실행합니다 생성 중간에 Azure Container Registry 선택 후 여기에 업로드 한 이미지로 생성 생긴 Container의 Public IP로 접속
⑧ AKS를 구성합니다.
⑨ AKS에서 Deployment와 Service를 생성하여 Pod에 접속하게 합니다. yaml파일을 이용하려면 VM에서 다운로드하여 사용하세요 (vm) curl -sSL http://down.cloudshell.kr/down/k8slab.sh | bash (vm) ls -l (vm) cd k8s (vm) cat 명령어로 deployment 대한 yaml 파일 확인하고 복사
AKS에서 deployment를 생성(복사한 yaml파일 활용)
(Cloudshell-Bash) az aks get-credentials -g yerimRG -n yrkube (Cloudshell-Bash) kubectl get deployment -o wide (Cloudshell-Bash) kubectl expose deployment app-deploy --port=80 --type=LoadBalancer (Cloudshell-Bash) kubectl get svc -o wide >>서비스 Public IP로 접속
실습) Azure 방화벽을 설치하면 인바운드 및 아웃바운드 네트워크 액세스를 제어할 수 있다.
구조
Workload-SN 서브넷과 Jump-SN 서브넷이 있는 가상 네트워크 상에서 Workload-SN의 모든 아웃바운드 워크로드 트래픽은 사용자가 지정하는 route를 통해 방화벽을 통과하여 나간다. 이번 실습에서는 www.bing.com에 대한 아웃바운드 트래픽만 허용하는 Firewall Application Rule을 만들고 외부 DNS 서버 검색을 허용하는 Firewall Network Rule을 생성해본다.
Task 1: Deploy the Azure firewall
방화벽 배포
Task 2: Create a default route
Route table을 만들어 서브넷과 연동, Route를 추가한다.
Task 3: Configure an application rule
application rule 생성
www.bing.com에 대한 아웃바운드 액세스를 허용하는 Firewall application rule 생성
Task 4: Configure a network rule
Network rule 추가
53번 포트(DNS)의 두 IP 주소(209.244.0.3, 209.244.0.4)에 대한 아웃바운드 액세스를 허용하는 Firewall network rule 생성
Firewall Rules - NAT Rules = Port Forwarding (밖→안) - Application Rules = 웹 관련 rule (안→밖) - Network Rules = 나머지 rule (안→밖)
VPN Forced Tunneling vnet에 있는 서버들이 서브넷으로 나눠져 있음(모두 인터넷 나갈 수 있음) → on-premise와 VPN으로 연결 → on-premise를 거쳐서 인터넷을 나가도록 하는 것을 VPN Forced Tunneling이라고 한다
vpn forced tunneling
User Defined Routes and Network Virtual Appliance 중간에 정보를 수집하기 위한 장치 UDR : 기본 시스템 경로를 재정의, 서브넷과 연결 NVA : 네트워크 간 네트워크 트래픽 흐름을 제어
UDR, NVA
실습) NVA Azure는 기본적으로 가상 네트워크 내의 모든 서브넷 간에 트래픽을 라우팅한다. 하지만, 사용자 정의 route를 생성하여 Azure의 기본 라우팅을 재정의할 수 있다. NVA(Network Virtual Appliance)는 서브넷 간 트래픽을 라우팅하는 경우에 유용하다.
Task 1: Create a route table & Task 2: Create a route
Route Table을 하나 만들고, Route를 추가하여 정의해준다.
10.0.1.0/24로 갈때는 생성한 라우팅 테이블(10.0.2.4)을 거치라고 하는 것이다.
Task 3: Associate a route table to a subnet & Task 4: Add subnets to the virtual network
vnet과 그 서브넷 생성
Task 5: Associate myRouteTablePublic to your Public subnet
생성한 라우팅 테이블과 Public 서브넷을 연결시켜준다.
Task 6: Create an NVA
NVA는 라우팅 및 방화벽 최적화와 같은 네트워크 기능을 지원하는 VM이다.
Task 7: Turn on IP forwarding
NVA VM의 Network Interface와 DMZ를 연결한다.
Task 8: Create public and private virtual machines
각 서브넷(public, private)에 VM을 하나씩 생성한다.(myvmPublic, myvmPrivate)
Task 9: Route traffic through an NVA & Task 10: Enable ICMP through the Windows firewall
private vm
Trace route를 위한 ICMP가 Windows 방화벽을 통과하지 않도록 설정한다.
myvmPublic VM도 위와 같은 설정을 해준다!!
Task 11: Turn on IP forwarding within myVmNva
nva vm
Task 12: Test the routing of network traffic
myVmPublic VM →→ myVmPrivate VM
첫 번째 홉은 10.0.2.4 (myNVA의 IP 주소)
두 번째 홉은 10.0.1.4 (myVmPrivate의 private IP 주소)
Task5의 결과로 트래픽을 myvmPrivate로 직접 전송하지 않고 NVA를 통해 전송한 것을 알 수 있다.
myVmPrivate VM →→ myVmPublic VM으로는 트래픽을 직접 라우팅하는 것을 볼 수 있다.
Pass-through authentication(PTA) : 사내 ad에서 인증을 받아야 함
AD FS : 조건 기반 인증(특수 조건 만족하는 직원만 인증)
PHS - on-premise 암호를 해시로 암호화 하여 Azure AD에 동기화 - on-premise에 있는 암호를 사용하여 Azure AD 서비스에 로그인 - 사용자의 생산성 향상 및 헬프데스크 비용 절감
PTA★
Pass-through authentication
- 모든 웹 브라우저 기반 응용 프로그램과 Microsoft Office 클라이언트 응용 프로그램에 대한 사용자 로그인 지원 - Azure AD Connect를 통해 활성화할 수 있음 - 사용자 로그인뿐만 아니라 조직에서 다른 Azure AD 기능(MFA 및 셀프 서비스 암호 재설정)을 사용할 수 있음
Federation with Azure AD - 도메인 간 신뢰 관계로 연결해놓은 것 - 다른 조직과 연동(쿠팡에서 회원가입할 때 네이버로 가입하는 등) - 모든 user의 인증은 on-premise에서 이뤄짐
Password Writeback - 암호는 on-premise에 있는데, Azure AD에서 암호를 재설정하면 다시 on-premise로 이 정보가 저장되어야 함
++ Lab06 끝나고 추가로 해봐야할 것 1. IT ou 계정으로 azure 포탈 접속(o) 2. Sales ou 계정으로 azure 포탈 접속(x) 3. IT ou에서 계정만들어서 powershell sync 명령어(Start-ADSyncSyncCycle) 4. IT ou 계정 MFA 설정
IaaS(Infrastructure as a Service) : 상/하수도, 전기, 도로, 항만, 통신 / Network, Server Computer, Firewall, VPN
PaaS(Platform as a Service) : 시장(거기에 가면 모든 물건을 구매할 수 있다) Amazon, 쿠팡 / OS 및 관련 프로그램 설치 (App Service, Azure SQL, VM with Visual Studio, Azure Container Instance(도커), Azure Kubernetes Service)
SaaS(Software as a Service) : 음식, 장난감, 스포츠, 놀이공원, 핸드폰 / Application (DB, Spread Sheet, Document, 통신...) / Microsoft 365, ZOOM, EverNote
CaaS(Code as a Service) : VM, Network, Firewall 하기 위해서 Code로 구축하기(DebOps) / GUI(Azure Portal) -> CLI(Azure PowerShell, Azure CLI) -> Template(ARM Template) -> Code(Terraform으로 작업을 하면 AWS, Azure, GCP 등등의 VM을 한 방에 생성할 수 있다(표준)) -> Ansible(VM 관리)
DaaS(Desktop as a Service) : WDS(Windows Desktop Service ; AWS, Azure) 데스크톱을 빌림
** DevOps : Development & Operations(개발 및 운영). 개발자가 운영도 같이 해라
** Serverless Computing : Cloud에서 Kubernetes 운영, Azure의 App Service 등
<Azure 보안 기술>
Shared Responsibility Model
- 서비스를 어떻게 하느냐에 따라 신경 쓸 부분(책임)이 달라진다.
- IaaS > PaaS > SaaS 순으로 고객이 할 일이 줄어든다. 보안이 높아진다.
Azure Cloud Security Advantages
- 클라우드 사용 시 보안성이 매우 높다
Azure Hierarchy
- Management Group : 구독을 관리하는 그룹
- Management Group(이건 잘 안씀) > Subscription(그 계정을 위한 제품과 서비스를 준비함) > Resource Group(리소스를 논리적으로 묶어 관리함. 리소스끼리는 life cycle이 같음) > Resource
Azure Policy
- Resource에 Property를 적용(type, locations, tag, SKU 등)
- 먼저 조사 후 그 규정에 준수하고 있지 않은 Resource를 체크한다
- 장점 : 강제와 규정을 통한 확실한 관리 가능/범위 조정 가능
Azue Role-Based Access Control
- 특정 유저, 그룹에게 특정 자원 액세스 통제권 줌. "자원"에 대해서!!
- OWNER, Contributor, Reader 등
- Azure AD와 다른 수준임(AAD에서 유저에게 role 주는 경우. Azue Portal에 접속하게 하기 위해서. Global admin, Application admin 등)
** RBAC - 해당 자원에 대해 뭐할건지, 어떤 역할을 둘건지. Azure Resource에 대해 누가 접근할 수 있는지.