< Building Secure Networks >
A database migration project requires a secure network configuration in Google Cloud
데이터베이스 마이그레이션 프로젝트에는 GCP의 보안 네트워크 구성이 필요
- 데이터베이스 서버를 호스팅할 보안 네트워크를 구축하는 것이 가장 먼저 시작해야 하는 것
- 프로젝트에 있어야 하는 모든 리소스는 Google 클라우드에서 가상 네트워킹을 제공하는 하나 이상의 VPCs를 포함함
- Google 클라우드에서 VPCs는 전역 리소스이며 각 VPC에는 지역 리소스인 서브넷이 하나 이상 포함되어 있음
- VMs을 만들려는 각 지역에 대한 서브넷을 생성
Use multiple networks to easily isolate machines from each other
여러 네트워크를 사용하여 시스템을 서로 쉽게 격리
- 기본적으로 동일한 VPC의 머신이 속한 지역에 관계없이 내부 IP 주소를 통해 서로 통신할 수 있으며
다른 VPC에 있는 시스템은 외부 IP 주소를 통해 통신함
즉, Public IP 주소가 없는 VM은 동일한 VPC 내의 다른 리소스에만 연결이 가능하다는 것 - 여러 네트워크를 사용해서 다른 시스템에서 연결할 수 있는 시스템을 제어할 수 있음
Firewall rules are used to control which machines can communicate using which ports
방화벽 규칙은 어떤 컴퓨터가 어떤 포트를 사용하여 통신할 수 있는지 제어하는 데 사용
- 외부로부터 시스템을 격리하는 방화벽 규칙을 통해 서로 통신할 수 있는 시스템을 제어할 수 있음
- 기본적으로는 모든 포트가 지정되어 있으며 수신에는 닫혀있지만 송신에 대해서는 열려있음
- 방화벽 규칙은 VPC 규칙이 적용되는 VPC 외부 시스템을 지정하는 대상과 수신이 닫혀있기 때문에
vpc 규칙이 적용되는 시스템과 vpc 규칙이 적용되지 않는 시스템을 지정하는 소스 지정 - 기본적으로 허용 규칙을 사용해 특정 수신을 허용하고 송신이 기본적으로 열려있으므로 거부 규칙을 사용해 특정 송신을 막음
A default network is created when you enable the Compute Engine service
Compute Engine 서비스를 사용 설정하면 기본 네트워크가 생성됨
- 자동으로 기본 네트워크를 생성하며 기본 네트워크는 각각에 대한 서브넷이 포함
- SSH, RDP, HTTP, HTTPS, ICMP에 대한 기본 방화벽 규칙이 생성되고 모든 내부 트래픽이 허용
- 기본 네트워크를 통해 쉽게 시작할수도 있지만 대부분은 프로덕션 환경에 맞게 수정된 집합이 필요
- 모든 소스에서 SSH 및 RDP를 허용하는 허용 규칙을 원하지 않을 경우 과도하게 허용하지 않음
Creating a custom VPC network
커스텀 VPC 네트워크 만들기
- 가장 좋은 옵션은 이름을 지정하여 서브넷을 추가하고 자체 사용자 지정 VPC 네트워크를 만드는 것
- 내부 IP 주소 범위가 필요
- 서로 다른 서브넷의 범위가 겹치지 않음
Creating firewall rules illustrated
그림에 표시된 방화벽 규칙 만들기
- 콘솔을 사용해 방화벽 규칙 생성을 위한 세부 정보를 작성
- 방화벽 규칙을 생성하기 위한 매개변수에는 네트워크 이름, 우선 순위, 수신, 송신, 대상 소스 프로토콜, 포트 허용 등을 포함
Firewall rule parameters
방화벽 규칙 매개변수
- 각 방화벽 규칙에는 고유한 이름이 있고 일관된 명명 규칙을 사용해야 함
- 여러 규칙이 존재하며 충돌 시 우선순위 규칙을 따름
- 수신 규칙은 기본적으로 수신이 차단되고 송신이 허용
- 작업은 허용 또는 거부
수신 규칙을 생성하는 경우 허용 또는 거부일 수 있고 송신 규칙인 경우 거부 대상일 수 있음 - 네트워크의 어떤 머신이 적용되는지 결정 하는 규칙
모든 머신에 설정할 수 있으며 태그 또는 서비스 계정을 사용해 특정 시스템에만 지정할 수 있음 - 소스는 네트워크 외부의 시스템을 결정하는데 사용되며 일반적으로 IP 주소 범위를 사용해 결정
- 프로토콜 및 포트를 지정하며 프로토콜의 경우 Ping 중인 TCP, UDP, ICMP
Firewall targets and sources
방화벽 대상 및 소스
- 방화벽 대상과 소스 모두를 지정하는데에는 세 가지 방법이 존재
- 네트워크의 모든 시스템을 지정
- 특정 네트워크 태그로 VMs를 지정
- VMs가 생성될 때 할당되는 서비스 계정을 지정
- 소스는 일반적으로 인용 표기법을 사용해 IP 주소 또는 범위를 사용하여 지정하며
슬래시 뒤의 숫자가 작을수록 더 큰 범위를 나타내며 32까지 지정 가능
Use Terraform to automate the creation of resources
Terraform을 사용하여 리소스 생성 자동화
- 자동화를 통해 솔루션 재현 및 테스트를 용이하게 함
- Terraform은 각각 리소스 생성을 자동화할 수 있는 Hashcorp의 도구이며
모든 주요 클라우드 플랫폼에서 지원되기 때문에 클라우드 리소스를 자동화하는데 일반적으로 사용 - Terraform은 기본적으로 클라우드 셸에 포함되어 있으므로
별도의 설치가 필요하지 않아 대부분 작업이 더 쉬워지며 자동화된 파일 사용
Terraform uses a collection of template files to deploy cloud resources
Terraform은 템플릿 파일 모음을 사용하여 클라우드 리소스를 배포
- 지침과 함께 특정 배포에 대한 모든 파일을 하나의 폴더에 넣음
- 만들고 싶은 것을 설명하는 템플릿을 만들 수 있으며
모든 유형의 Google 클라우드 리소스를 만드는데 사용할 수 있는 템플릿도 존재 - .tf 파일 중 하나 이상을 폴더에 추가하고 .tfvars에서 설정할 수 있는 변수가 있는 경우 배포를 위해 결합함
또한 .tfstate 파일은 기존 리소스를 추적하고 리소스가 업데이트되거나 파괴될 때 사용
User the Google Cloud Terraform provider
Google Cloud Terraform 공급자 사용자
- 모든 주요 클라우드 제공업체에 Terraform 제공자가 있음
- 위의 경우 Google Cloud Terraform 제공자
- Google 클라우드 프로젝트 ID 및 지역이 설정되고 다른 .tf 파일에서 생성된 변수로 설정됨
Create variables for your Terraform deployment to more easily change settings
설정을 보다 쉽게 변경할 수 있도록 Terraform 배포용 변수 생성
- 위의 경우 세 가지 변수가 선언되어 있으며 이것은 파일 다양한 .tf에서 수행됨
- 여기서 값이 설정되지 않으며 변수는 단순히 선언만 되는 것이므로 다른 곳에서 값을 설정 가능
Variables can be set in a template or at runtime
변수는 템플릿에서 또는 런타임에 설정할 수 있음
- .tfvars 파일 또는 런타임 환경에서 변수 값을 설정할 수 있음
- 런타임 환경의 경우 템플릿을 실행할 때 변수 값을 묻는 메시지가 표시되어 매개변수로 전달
Terraform template for creating a VPC and subnet
VPC 및 서브넷 생성을 위한 Terraform 템플릿
- 첫 번째 코드 블록에 하나의 서브넷이 있는 public-vpc라는 네트워크가 생성됨
이는 Google 컴퓨팅 네트워크 유형의 리소스 - 그 후 네트워크는 서브넷을 만들 때 두 번째 코드 블록에서 참조하여 서브넷 네트워크 속성을 확인
- 리소스 유형과 이름을 사용하는 네트워크에는 name이라는 속성도 있으며
terraform을 사용하여 서브넷의 네트워크 속성 값을 설정하는데 사용되는 속성은
템플릿을 사용하여 고유한 구성 스크립트를 만드는 것과 관련
Terraform commands
Terraform 명령
- 템플릿을 사용해 고유한 구성 스크립트를 만든 다음 여러 Terraform 명령으로 실행
- terraform init : terraform 파일이 있는 폴더에서 실행하며 작업 디렉토리를 설정하기만 하면 됨
- terraform plan : 실행 계획을 생성하고 표시하며 구성에서 리소스를 주문하는 방법과 리소스를 생성할 순서 등 종속성을 결정
- terraform apply-auto-approve : 템플릿에서 개발된 계획에 따라 인프라를 구축하거나 수정
- terraform destroy-auto-approve : 템플릿에서 정의된 리소스를 .tfstate 파일에서 추적
A secure environment allows only known clients to access the database
보안 환경에서는 알려진 클라이언트만 데이터베이스에 액세스할 수 있음
- 알려진 클라이언트만 방화벽 규칙을 통해 데이터베이스 서버에 액세스할 수 있도록 허용
Creating VMs with Terraform
Terraform으로 VM 만들기
- 우분투 이미지를 기반으로 가상 머신을 생성하기 위한 템플릿
- 네트워크 태그 allow ssh는 ssh 방화벽 규칙의 대상 태그로 사용
- 머신에 대해 설정되는 다양한 속성을 확인 가능하며 이 속성들은 웹 콘솔에서 설정하는 것과 동일한 속성을 가짐
Creating firewall rules with Terraform
Terraform으로 방화벽 규칙 만들기
- 모든 소스는 포트 22와 TCP 프로토콜을 통해 태그가 있는 대상에만 연결할 수 있음
Avoid common pitfalls when configuring networks
네트워크 구성 시 일반적인 함정 방지
- 위험한 프로토콜에 대해 제한적인 규칙을 사용하는 대신 태그 또는 서비스 계정을 사용해야 함
- 비용이 많이 들고 보안을 약화시키는 외부 IP 주소를 사용을 피해야 함
- 서브넷을 구성할 때 송신 비용도 증가하므로 CIDR 범위를 사용해 IP 중복 충돌의 가능성을 줄여야 함
- 모든 트래픽은 기본적으로 암호화되지만 외부도 암호화되어야 하므로 외부와 통신할 때 항상 SSL을 사용해야 함
- 온프레미스 네트워크를 연결해야 할 때는 외부 IP가 아닌 VPN 또는 클라우드 상호 연결을 사용