가상 네트워크 아키텍처 3 - Key Vault Private Endpoint
요약
이 기사는 가상 네트워크 아키텍처 시리즈의 Part.3입니다. 개인 끝점의 세부 정보를 api-management-vnet에서 Key Vault와 공유하겠습니다.
목차
프라이빗 엔드포인트 구성
KeyVaultId:existingKv.id
VirtualNetwork2SubnetIdKv:existingVnet2.properties.subnets[3].id
properties: {
privateLinkServiceConnections: [
{
name: pe_name_kv
properties: {
privateLinkServiceId: KeyVaultId
groupIds: [
'vault'
]
}
}
]
subnet: {
id: VirtualNetwork2SubnetIdKv
properties: {
privateEndpointNetworkPolicies: 'Enabled'
}
}
}
사설 DNS: PrivateDns2.bicep에 DNS 이름이
privatelink.vaultcore.azure.net
인 사설 DNS를 배포합니다.var pdns_name_kv = 'privatelink.vaultcore.azure.net'
resource PrivateDnsKv 'Microsoft.Network/privateDnsZones@2020-06-01' = {
name: pdns_name_kv
location: 'global'
}
가상 네트워크 링크: 배포된 개인 DNS를 Key Vault 서브넷이 있는 가상 네트워크에 연결합니다PrivateDns2.bicep.
VirtualNetwork2Id:existingVnet2.id
resource VnetLinkKv 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = {
name: '${PrivateDnsKv.name}/${PrivateDnsKv.name}-linkc'
location: 'global'
properties: {
registrationEnabled: false
virtualNetwork: {
id: VirtualNetwork2Id
}
}
}
프라이빗 DNS A 레코드: DNS A 레코드를 생성하고 PrivateDns2.bicep에 배포된 프라이빗 엔드포인트의 IP 주소를 설정합니다.
output PrivateEndpointKvIpAddress string = PrivateEndpointKv.properties.customDnsConfigs[0].ipAddresses[0]
resource PrivateDnsAKv 'Microsoft.Network/privateDnsZones/A@2020-06-01' = {
name: '${PrivateDnsKv.name}/${KeyVaultName}'
properties: {
ttl: 3600
aRecords: [
{
ipv4Address: PrivateEndpointKvIpAddress
}
]
}
}
Key Vault에 대한 액세스
resource AppServiceConfig 'Microsoft.Web/sites/config@2021-02-01' = {
properties: {
'Sql:ConnectionString': '@Microsoft.KeyVault(VaultName=${kv_name};SecretName=${kvsecret_name_sqlcs})'
'Servicebus:ConnectionString': '@Microsoft.KeyVault(VaultName=${kv_name};SecretName=${kvsecret_name_sbcs})'
}
}
Functions는 App Service와 동일한 방식으로 Key Vault에서 자격 증명을 추출합니다. Key Vault 참조는 FunctionApp.bicep 에 정의되어 있습니다.
resource FuncConfig 'Microsoft.Web/sites/config@2021-02-01' = {
properties: {
'ServiceBusConnectionString': '@Microsoft.KeyVault(VaultName=${kv_name};SecretName=${kvsecret_name_sbcs})'
'SqlConnectionString': '@Microsoft.KeyVault(VaultName=${kv_name};SecretName=${kvsecret_name_sqlcs})'
}
}
자체 호스팅 에이전트를 실행하는 컨테이너 인스턴스는 Key Vault에서 Azure Active Directory 클라이언트 앱 비밀을 추출하여 integration-test-bash.yml의 통합 테스트를 위한 Azure Active Directory OAuth2.0 토큰을 가져옵니다.
clientSecret=$(az keyvault secret show --vault-name $(KEYVAULT_NAME) --name $(KVSECRET_NAME_AADCLIENT) --query value -o tsv)
Application Gateway는 Key Vault에 저장된 인증서를 사용하여 API Management를 의미하는 백 엔드 풀에 대한 TLS 종료를 구현합니다. Application Gateway는 Private Endpoint를 통해 Key Vault에 액세스할 수 없지만 Service Endpoint를 통해 액세스할 수 있습니다.
var agw_kv_secret_id = 'https://${kv_name}${environment().suffixes.keyvaultDns}/secrets/${kvcert_name_agw}'
sslCertificates: [
{
name: agw_ssl_certificate_name
properties: {
keyVaultSecretId: agw_kv_secret_id
}
}
]
httpListeners: [
{
properties: {
sslCertificate: {
id: resourceId('Microsoft.Network/applicationGateways/sslCertificates', agw_name, agw_ssl_certificate_name)
}
}
}
]
Application Gateway SSL 인증서
The problem is that Application Gateway cannot access Key Vault through Private Endpoint to extract SSL certificate in the configuration above, as of August 2022. This is discussed in the forum Application Gateway: Integration with Key Vault does not work #33157 . 요컨대 Application Gateway는 개인 IP가 아닌 Service Endpoint을 통해 Key Vault의 공용 IP에 액세스해야 합니다.
서비스 엔드포인트: 이 경우에 서비스 엔드포인트를 사용하려면 Key Vault에 대한 가상 네트워크 서브넷을 배포할 때 구성을 추가해야 합니다. VirtualNetwork.bicep을 보고 아래 구성을 찾을 수 있습니다. Service Endpoint 구성은 Application Gateway 서브넷을 의미하는 Key Vault에 액세스하려는 서비스가 있는 가상 네트워크 서브넷에 구현되어야 합니다.
resource VirtualNetwork1 'Microsoft.Network/virtualNetworks@2021-03-01' = {
properties: {
subnets: [
{
name: snet_name_1_agw
properties: {
addressPrefix: snet_prefix_1_agw
networkSecurityGroup: {
id: Nsg1AgwId
}
serviceEndpoints: [
{
service: 'Microsoft.KeyVault'
locations: [
'*'
]
}
]
}
}
]
}
}
Application Gateway가 공용 IP를 통해 Key Vault에 도달하기 때문에 공용 네트워크 액세스를 사용하도록 설정해야 하지만 KeyVault2.bicep 의 Application Gateway 서브넷에서만 액세스를 제한할 수 있습니다.
bypass: 'AzureServices'
는 모든 Azure 서비스가 공용 IP를 통해 Key Vault에 액세스할 수 있도록 하고, virtualNetworkRules: [{id: VirtualNetwork1SubnetIdAgw}]
는 Application Gateway 서브넷에서 액세스를 허용하고, defaultAction: 'Deny'
Azure 서비스 및 Application Gateway 가상 네트워크 서브넷을 제외한 모든 액세스를 종료합니다. Application Gateway SSL 인증서 이외의 모든 액세스는 Private Endpoint를 통해 이루어집니다.resource KeyVault 'Microsoft.KeyVault/vaults@2021-10-01' = {
properties: {
publicNetworkAccess: 'Enabled'
networkAcls: {
bypass: 'AzureServices'
defaultAction: 'Deny'
virtualNetworkRules: [
{
id: VirtualNetwork1SubnetIdAgw
}
]
}
}
}
Reference
이 문제에 관하여(가상 네트워크 아키텍처 3 - Key Vault Private Endpoint), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/koheikawata/virtual-network-architecture-3-key-vault-private-endpoint-43nj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)