안녕하세요! 하씨가문의 영광입니다
이번에는 이제까지 Terraform 으로 구축한 내용만 다루어보았는데요
이번에는 그속을 세세하게 파헤쳐보도록 하겠습니다.
그럼 시작해보도록 하겠습니다! 고고
Azure 공급자
저희가 Azure 테라폼을 구축하기에 앞서 제일 먼저 하는 첫 순서가 "Azure 공급자"에 대한 구성입니다.
Azure 공급자는 Azure Resource Manager API를 사용하여 Microsoft Azure에서 인프라를 구성하는 데 사용할 수 있습니다.
Azure에 인증
Terraform은 Azure에 인증하기 위한 다양한 방법을 지원합니다.
- Azure CLI를 사용하여 Azure에 인증
- 관리형 서비스 ID를 사용하여 Azure에 인증
- 서비스 주체 및 클라이언트 인증서를 사용하여 Azure에 인증
- 서비스 주체 및 클라이언트 암호를 사용하여 Azure에 인증
- OpenID Connect를 사용하여 Azure에 인증
저는 주로 "Azure CLI를 사용하여 Azure에 인증" 하는 방법으로 많이 사용하고 있습니다. (제일 간편하더라구요!)
Terraform을 비대화형으로 실행할 때(예: CI 서버에서 Terraform을 실행할 때) 서비스 주체 또는 관리 서비스 ID를 사용하고 Terraform을 로컬로 실행할 때 Azure CLI를 사용하여 인증하는 것이 좋습니다.
사용 예시
# Azure 제공 소스 & 사용되는 버전
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "=3.0.0"
}
}
}
# Azure 제공자 구성
provider "azurerm" {
features {}
}
위와 같이 Azure 제공 Source는 하쉬코프이고 버전은 3.0.0 임을 나타내줍니다.
제공자 구성을 조금더 자세히 살펴보도록 하겠습니다.
- features : 필수! 로 사용되야하는 인수이며 특정 Azure 공급자 리소스의 동작을 사용자 지정하는 데 사용할 수 있는 정의된 블록입니다.
간단하게 features 블록에 사용되는 인수를 살펴보도록 하겠습니다. 모두 선택 사항이므로 필요하실때에 사용하면 되는 인수들 입니다.
- client_id : 사용해야 하는 클라이언트 ID 입니다. 이것은 ARM _CLIENT_ID 환경 변수에서도 얻을 수 있습니다.
- environment : 사용해야 하는 클라우드 환경입니다. 가능한 값은 public, usgoverment, german 및 china 입니다. 기본값은 public입니다. 이것은 ARM_ENVIRONMENT 환경 변수에서도 얻을 수 있습니다.
- subscription_id : 사용해야 하는 구독 ID 입니다. 이것은 ARM_SUBSCRIPTION_ID 환경 변수에서도 얻을 수 있습니다.
- tenant_id : 테넌트 ID를 사용해야 합니다. 이것은 ARM_TENANT_ID 환경 변수에서도 얻을 수 있습니다.
- auxiliary_tenant_ids : 다중 테넌시 및 교차 테넌트 시나리오에 필요한 보조 테넌트 ID 목록입니다. 이것은 ARM_AUXILIARY_TENANT_IDS 환경 변수에서도 얻을 수 있습니다.
여기까지 간단하게 Azure 공급자에 대해서 세세하게 파헤져 보았습니다! 이제는 Azure의 배포의 시작인 Azure Resource Group을 한번 살펴보겠습니다.
Azure Resource Group
resource "azurerm_resource_group" "example" {
name = "example"
location = "West Europe"
}
azurerm_resource_group 블록에서 사용되는 인수는 다음과 같습니다.
- name : 필수! 로 생성해야하는 인수입니다. 이 리소스 그룹에 사용해야 하는 이름입니다. 이를 변경하면 새 리소스 그룹이 생성됩니다.
여기서 중요한점은 resource "azurerm_resource_group" "example" 에서 example이 이 리소스의 이름이 아님을 아셔야합니다. example은 terraform을 사용하여 resource group을 만들때 사용하는 이름이고 이 블록 안에서 사용하는 name은 실제 Azure Portal안에서 배포될때 사용되는 resource group의 이름입니다. 다른 자원들도 동일하니 주의 하셔야합니다.
- location : (필수!) 이 리소스 그룹이 있어야 하는 Azure 지역입니다. 예를 들면, Korea Central에 생성하는것을 의미합니다. 이를 변경하면 마찬가지로 새 리소스 그룹이 생성됩니다.
- tags : 선택사항 입니다. 리소스 그룹에 할당해야 하는 태그 매핑을 의미합니다.
NSG
네트워크 보안 규칙 목록이 포함된 네트워크 보안 그룹을 관리합니다. 네트워크 보안 그룹을 사용하면 인바운드 또는 아웃바운드 트래픽을 활성화하거나 거부할 수 있습니다.
resource "azurerm_network_security_group" "example" {
name = "acceptanceTestSecurityGroup1"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
security_rule {
name = "test123"
priority = 100
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "*"
source_address_prefix = "*"
destination_address_prefix = "*"
}
tags = {
environment = "Production"
}
}
"azurerm_network_security_group" 블록에서 사용되는 인수들은 다음과 같습니다.
- name : (필수!) 네트워크 보안 그룹의 이름을 지정합니다. 이를 변경하면 새 리소스가 생성됩니다.
- resource_group_name : (필수!) 네트워크 보안 그룹을 생성할 리소스 그룹의 이름 입니다.
- location : (필수!) 리소스가 있는 지원되는 Azure 위치를 지정합니다. 이를 변경하면 새 리소스가 생성됩니다.
- security_rule : (선택 사항) 정의된 보안 규칙을 정의하고할때 사용하는 블록입니다. 열고 닫고 하는 포트에 대한 것을 나타내줍니다.
security_rule 블록에서 사용되는 인수는 다음과 같습니다. 여기서는 필수로 적어야하는 사항과 선택에 따른 사항을 따로 구분하여 적도록 하겠습니다.
필수사항
- name : 보안 규칙의 이름입니다.
- protocol : 이 규칙이 적용되는 네트워크 프로토콜입니다. 가능한 값으로는 Tcp, Udp, Icmp, Esp, Ah, * 이 가능합니다.
- access : 네트워크 트래픽의 허용 여부를 지정합니다. 가능한 값은 Allow 및 Deny 입니다.
- priority : 규칙의 우선 순위를 지정합니다. 값은 100에서 4096 사이일 수 있습니다. 우선 순위 번호는 컬렉션의 각 규칙에 대해 고유해야 합니다. 우선 순위 번호가 낮을수록 우선 순위가 높아집니다.
- direction : 방향은 들어오는 트래픽 또는 나가는 트래픽에 대해 규칙을 평가할지 여부를 지정합니다. 가능한 값은 Inbound 및 Outbound 입니다.
선택사항
- description : 이 규칙에 대한 설명입니다. 140자로 제한됩니다.
- source_port_range : 소스 포트 또는 범위 뜻합니다. 0 ~ 65535 사이 숫자 또는 범위 또는 * 중에 기재하시면됩니다.( * 는 모두를 뜻합니다.)
- destination_port_range : 대상 포트 또는 범위를 뜻합니다. 마찬가지로 0 ~ 65535 사이의 숫자 또는 범위 또는 * 를 지정해주시면됩니다.
- source_address_prefix : CIDR 또는 소스 IP 범위 또는 모든 IP를 뜻하는 ' * '을 사용할 수 있으며, 'VirtualNetwork', 'AzureLoadBalancer' 및 'Internet'과 같은 태그도 사용할 수 있습니다.
- destination_address_prefix : 대상 주소 접두사 목록입니다. 태그를 사용 할 수 없습니다.
저는 NSG를 구성하실때에 지금까지 설명해놓은 필수사항, 선택사항 구분없이 다 지정하여 기재하시는걸 더 추천드립니다. 그렇게 해야 더 확실하게 나중에 코드를 볼때에도 제가 어떤것을 열어두었고 닫아두었는지를 한눈에 구분할 수 있습니다.
오늘은 지금까지 Terraform으로 구성한것을 더 세분화하여 알아보았습니다.
다음주에도 마저 이어서 Azure 리소스에 대해서 더 자세히 파헤쳐보도록 하겠습니다.
그럼 담주에 또만나요~
'INFRA > Operation' 카테고리의 다른 글
쿠버네티스 이론 STEP7 PV, PVC (1) | 2022.08.23 |
---|---|
쿠버네티스 이론 STEP6 Service (3) Ingress - 2 (0) | 2022.08.23 |
쿠버네티스 이론 STEP5 Service (3) Ingress - 1 (0) | 2022.08.18 |
Terraform Script 파일 사용 웹 설치 방법 - AWS (0) | 2022.08.09 |
쿠버네티스 이론 STEP4 Service (2) LB, ExternalName (0) | 2022.08.05 |
댓글