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

Virtual Network(VNET)

: VM들을 내부적으로 통신시키기 위해 같은 네트워크에 연결시킴

: 다른 네트워크에서 사설 IP로 들어오지 못하도록 하는 것(공인 IP의 경우 포트를 열면 들어오게 할 수 있음)

* VNET은 location이 중요하다. 한 번 설정한 지역은 못 바꾼다.

** DHCP 기능 : VNET에 연결을 해야지 vm이 사설 IP를 받는다.(같은 location이어야 함)

 

 

Network Security Groups(NSG)

NSG 예시

: 기본적으로 Internet에서 접속하는 모든 Traffic에 대하여 차단 및 허용하는 것

(적용 대상 : VM의 NIC 및 Subnet)

: VNET에 있는 리소스에 대한 트래픽을 제한

: Inbound/outbound에 대해 보안 규칙을 적용

: 하나를 만들어 다른 서브넷에 적용시킬 수 있다.(비용절약)

 

  • NSG default rules
    : default 룰은 삭제할 수 없고, 새로운 규칙은 이들의 후위 순서로 넣을 수 있다
  • NSG Effective Rules
    : allow의 경우 서브넷, LAN 모두에 있어야 한다.

 

NSG 사용

** Subnet : 서브넷에 NGS를 할당하고 보호된 서브넷(DMZ)를 만들 수 있다. 이러한 NSG는 해당 서브넷 내의 모든 컴퓨터로 트래픽 흐름을 제한한다. 각 서브넷에는 0개 또는 1개의 NSG를 연결할 수 있다.

** Network Interface : NIC에 NSG를 할당하면 NIC를 통해 이동하는 모든 트래픽을 NSG 규칙에 따라 제어할 수 있다. 서브넷에 있는 각 NIC에는 NSG를 0개 또는 1개 연결할 수 있다.

 

▶ NSG를 먼저 서브넷에 연결한 다음, 다른 NSG를 VM의 NIC에 연결하여 VM에 대해 이중으로 트래픽 제한을 둘 수 있다.

서브넷과 네트워크 인터페이스에 NSG가 각각 연결된 상태

이 경우에는 Inbound 트래픽에서는 Subnet NSG가 먼저 평가되어 Subnet NSG를 통해 허용되는 모든 트래픽이 VM SNG에서 평가된다. Outbound 트래픽의 경우, 반대로 VM NSG가 먼저 평가된다. 

이런 식으로 세부적인 보안 규칙을 적용할 수 있게 된다. 

 

 

Application Security Groups(ASG)

ASG

ASG를 사용하면 VM을 그룹화하고 해당 그룹에 따라 네트워크 보안 정책을 정의할 수 있다. 

 

예시

예시로 보면, NIC1과 NIC2 는 AsgWeb의 ASG 멤버이고 NIC3는 AsgLogic, NIC4는 AsgDb의 ASG 멤버이다.

여기서 각 NIC는 하나의 NSG에 속하지만 ASG는 다를 수 있다는 것을 알 수 있고 같은 NSG 규칙이 다른 서브넷에 적용될 수 있다는 것을 알 수 있다.

 


실습) 가상 네트워크 구현

실습 절차는 아래와 같다

  1. 가상 네트워크 생성 및 구성
  2. VM을 가상 네트워크에 배포
  3. Azure VM의 Private 및 Public IP 주소 구성
  4. 네트워크 보안 그룹(NSG) 구성
  5. 내부 이름 확인을 위해 Azure DNS 구성
  6. 외부 이름 확인을 위해 Azure DNS 구성

VNET 세부 항목 설정

먼저, Virtual Network를 생성한다.

subnet1 추가

서브넷이 두개 필요하므로 서브넷을 추가한다.


아래 두 명령어를 통해 Json 파일로 VM을 생성한다.

$rgName = 'az104-04-rg1'
New-AzResourceGroupDeployment -ResourceGroupName $rgName -TemplateFile $HOME/AZ104/Module04/az104-04-vms-template.json -TemplateParameterFile $HOME/AZ104/Module04/az104-04-vms-parameters.json -AsJob

NIC0의 구성

 

ipconfig1의 배포 형식을 Dynamic에서 Static으로 변경하고 Public IP도 새롭게 추가하여 설정한다.

nic1에 대해서도 이 과정을 반복하여 적용한다.

 

각 VM의 공인 IP 확인


** Standard SKU의 공용 IP 주소를 사용하려면 할당된 네트워크 인터페이스가 네트워크 보안 그룹에 의해 보호되어야 하기 때문에 이 에러가 발생할 수 있다고 한다. 원격 데스크톱 연결을 허용하려면 인터넷으로부터의 인바운드 RDP 트래픽을 명시적으로 허용하는 Network Security Group을 생성하고 이를 두 VM의 네트워크 인터페이스에 할당해야 한다.

 

NSG를 하나 생성하고(이름은 az104-04-nsg01) 아래와 같은 Inbound 규칙을 추가해준다.

Inbound 규칙
vm0 접속

그리고 나서 다시 vm에 접속하면 잘 들어가진다.


 

Private DNS 등록
Vnet을 link로 연결했더니 그 안에 속한 VM들에 자동적으로 Private DNS가 등록되었다.

VM0에 접속하여 Private DNS zone이 적용되었는지 확인한다.

nslookup az104-04-vm1.contoso.org


DNS Zones - Create
Record set을 추가하여 추가할 VM을 수동으로 등록한다.

powershell 창을 열어 아래 명령어를 통해 Public IP가 나오는 것을 확인한다.

nslookup az104-04-vm0.mycontoso.org [Name server 1]
nslookup az104-04-vm1.mycontoso.org [Name server 1]

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

AZ104 (Azure Storage)  (0) 2022.08.10
AZ104 (Load Balancing Services)  (0) 2022.08.10
AZ104 (관리자 도구)  (0) 2022.08.08
AZ104 (환경세팅)  (0) 2022.08.08
AZ104 (Administer Governance and Compliance)  (0) 2022.08.06

+ Recent posts