Network Security

NSG(Network Security Group)

- 가상 네트워크 트래픽 제한

- 서브넷 또는 네트워크 인터페이스에 연결

- 보안 규칙을 사용하여 네트워크 트래픽 allow 또는 deny

- 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은 허용하지 않았기 때문에 외부에서 곧바로 접속이 불가능하기 때문이다.

외부에서 접속

myVmWeb에서 powershell 명령어를 통해 웹 서버를 설치하고

(Install-WindowsFeature -name Web-Server -IncludeManagementTools)

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. 내부 및 외부 모두에서 컨테이너 애플리케이션을 보호하고 액세스

먼저, 환경 구성

New-Item -Path "C:\" -Name "LabFiles" -ItemType "directory"

Start-BitsTransfer -Source 'https://github.com/MicrosoftLearning/AZ500-AzureSecurityTechnologies/archive/master.zip' -Destination C:\LabFiles

Expand-Archive -Path 'C:\LabFiles\master.zip' -DestinationPath 'C:\LabFiles'

Move-item -Path "C:\LabFiles\AZ500-AzureSecurityTechnologies-master\AllFiles\Labs\09*" -Destination "C:\LabFiles" -confirm:$false

실습 구성도

  • Task 1: Create an Azure Container Registry
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 > Dockerfile
ACRNAME=$(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로 접속

'Study > Cloud' 카테고리의 다른 글

AZ500 (Azure Firewall 구현)  (0) 2022.08.18
AZ500 (Implement Platform Protection)  (0) 2022.08.18
AZ500 (Hybrid Identity)  (0) 2022.08.18
AZ500 (Identity and Access)  (0) 2022.08.17
AZ104 (NAT)  (0) 2022.08.12

+ Recent posts