Background
글을 쓰는 시점에서 참여하고 있는 프로젝트는 Azure DX 운용 기반 설계 및 구축 지원에 관한 프로젝트이다.
이전 프로젝트에 Azure 도입부터 운용보수 지원까지의 경험이 있어서 업무 자체는 전혀 문제가 없었다. 하지만 왜 운용 기반 설계가 가능한 인원을 모집하고 있었는지 프로젝트에 합류하고 일주일이 지나지 않아서 깨닫게 되었다.
어떻게 업무를 보고 있었는지 신기할 정도로 시스템에 관한 문서화 및 관리가 개판이었다.
무엇을 하려고 하면 자료가 맞는지 아닌지 의심부터 들어서 간단한 작업임에도 불구하고 시간이 많이 소요되었다. 그래서 Azure 리소스 구축에 있어서만은 업무를 편하게 보기 위해서 IaC
작업을 (혼자서) 진행하기로 하였다.
Note. 참고 자료
Azure Key Vault 구성
Key Vaults main.bicep 코드 구성
Tip. 기본적으로 Bicep IaC 코드는 4가지 구간으로 작성된다.
- 매개 변수(Prameteres)
- 변수(Variables)
- 리소스(Resources)
- 아웃풋(Outputs)
Parameters 구간
// Creates a KeyVault with Private Link Endpoint
@description('The Azure Region to deploy the resources into')
param location string = resourceGroup().location
@description('Tags to apply to the Key Vault Instance')
param tags object = {}
@description('The name of the Key Vault')
param keyvaultName string
@description('The name of the Key Vault private link endpoint')
param keyvaultPleName string
@description('The Subnet ID where the Key Vault Private Link is to be created')
param subnetId string
@description('The VNet ID where the Key Vault Private Link is to be created')
param virtualNetworkId string
location
Key Vault를 배포할 지역(Region)을 지정한다. resourceGroup().location
을 사용하면 배포할 리소스 그룹의 지역과 동일한 값이 적용된다.
keyvaultPleName
이번에 배포할 Key Vault 는 퍼블릭 액세스는 차단하고, 안전한 통신을 위해서 Private endpoint를 사용할 필요가 있다.
Tip. keyvaultPleName
은 Private endpoint 와 Private DNS zone(.vaultcore.azure.net)의 링크 이름을 뜻한다.
virtualNetworkId & subnetId
Private endpoint를 할당할 Virtual network 및 Subnet을 지정해 주어야 하기 때문에 필요한 파라메터이다.
Tip. 추가로 Subnet의 Network Policy
설정에서 Private endpoint가 NSG(Network Security Group)의 규칙을 적용하도록 해야 한다.
Variable 구간
var privateDnsZoneName = 'privatelink${environment().suffixes.keyvaultDns}'
environment().suffixes.keyvaultsDns
위의 변수는 Azure Key Vault와 관련된 프라이빗 DNS 존의 이름을 설정하는 데 사용된다.
'privatelink${environment().suffixes.keyvaultDns}'
는 Azure 환경에 따라 달라지는 Key Vault 서비스의 DNS 접미사(.vaultcore.azure.net)를 자동으로 가져오는 함수이다.
Tip. 이렇게 코드를 구성하면 다양한 Azure 환경에서 코드를 재사용할 수 있다.
Key Vault 를 예를 들면, Azure 공용 클라우드 환경에서 vaultcore.azure.net
이 Key Vault 서비스의 접미사이므로, 코드로 배포를 진행하면, 프라이빗 DNS 존은 privatelink.vaultcore.azure.net
으로 생성된다.
Resources 구간
- Azure Key Vault
- Private endpoint
- Private DNS Zone (privatelink.vaultcore.azure.net)
- Private endpoint link (with Private DNS Zone)
- Virtual network (with Private DNS Zone)
Note. 리소스 구간의 코드가 길어서 GitHub 링크에서 확인
app service auth azcli azure azure lb azure monitor bicep data factory devops docker key vaults kubernetes linux on-premise openstack resource group route table sql database storage accounts terraform virtual machine windows