Azure Stack 허브에 안전 하 게 저장 된 인증서를 사용 하 여 VM 배포Deploy a VM with a securely stored certificate on Azure Stack Hub

이 문서에서는 Key Vault 인증서가 설치 된 Azure Stack 허브 VM (가상 머신)을 배포 하는 방법을 설명 합니다.This article describes how to deploy an Azure Stack Hub virtual machine (VM) with a Key Vault certificate installed.

개요Overview

인증서는 Active Directory을 인증 하거나 웹 트래픽을 암호화 하는 등의 다양 한 시나리오에서 사용 됩니다.Certificates are used in many scenarios, such as authenticating to Active Directory, or encrypting web traffic. 인증서를 Azure Stack 허브 키 자격 증명 모음에 암호로 안전 하 게 저장할 수 있습니다.You can securely store certificates as secrets in an Azure Stack Hub key vault. Azure Stack Hub Key Vault를 사용 하는 이점은 다음과 같습니다.The benefits of using Azure Stack Hub Key Vault are:

  • 인증서는 스크립트, 명령줄 기록 또는 템플릿에 노출 되지 않습니다.Certificates are not exposed in a script, command-line history, or template.
  • 인증서 관리 프로세스가 간소화 됩니다.The certificate management process is streamlined.
  • 인증서에 액세스 하는 키를 제어할 수 있습니다.You have control of the keys that access certificates.

프로세스 설명Process description

다음 단계에서는 VM에 인증서를 푸시하는 데 필요한 프로세스를 설명 합니다.The following steps describe the process required to push a certificate to the VM:

  1. 키 자격 증명 모음 비밀을 만듭니다.Create a key vault secret.
  2. 파일 의azuredeploy.parameters.js 를 업데이트 합니다.Update the azuredeploy.parameters.json file.
  3. 템플릿을 배포합니다.Deploy the template.

참고

VPN을 통해 연결 된 경우에는 Azure Stack Development Kit (ASDK) 또는 외부 클라이언트에서 이러한 단계를 사용할 수 있습니다.You can use these steps from the Azure Stack Development Kit (ASDK), or from an external client if you're connected through VPN.

사전 요구 사항Prerequisites

키 자격 증명 모음 비밀 만들기Create a key vault secret

다음 스크립트는 .pfx 형식으로 인증서를 만들고, 키 자격 증명 모음을 만들고, 인증서를 key vault에 암호로 저장 합니다.The following script creates a certificate in the .pfx format, creates a key vault, and stores the certificate in the key vault as a secret. contentType암호의를로 설정 해야 합니다 pfx .The contentType of the secret must be set to pfx.

중요

-EnabledForDeployment키 자격 증명 모음을 만들 때 매개 변수를 사용 해야 합니다.You must use the -EnabledForDeployment parameter when creating the key vault. 이 매개 변수를 사용 하면 Azure Resource Manager 템플릿에서 키 자격 증명 모음을 참조할 수 있습니다.This parameter ensures that the key vault can be referenced from Azure Resource Manager templates.

# Create a certificate in the .pfx format
New-SelfSignedCertificate `
  -certstorelocation cert:\LocalMachine\My `
  -dnsname contoso.microsoft.com

$pwd = ConvertTo-SecureString `
  -String "<Password used to export the certificate>" `
  -Force `
  -AsPlainText

Export-PfxCertificate `
  -cert "cert:\localMachine\my\<certificate thumbprint that was created in the previous step>" `
  -FilePath "<Fully qualified path to where the exported certificate can be stored>" `
  -Password $pwd

# Create a key vault and upload the certificate into the key vault as a secret
$vaultName = "contosovault"
$resourceGroup = "contosovaultrg"
$location = "local"
$secretName = "servicecert"
$fileName = "<Fully qualified path to where the exported certificate can be stored>"
$certPassword = "<Password used to export the certificate>"

$fileContentBytes = get-content $fileName `
  -Encoding Byte

$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
$jsonObject = @"
{
"data": "$filecontentencoded",
"dataType" :"pfx",
"password": "$certPassword"
}
"@
$jsonObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject)
$jsonEncoded = [System.Convert]::ToBase64String($jsonObjectBytes)

New-AzResourceGroup `
  -Name $resourceGroup `
  -Location $location

New-AzKeyVault `
  -VaultName $vaultName `
  -ResourceGroupName $resourceGroup `
  -Location $location `
  -sku standard `
  -EnabledForDeployment

$secret = ConvertTo-SecureString `
  -String $jsonEncoded `
  -AsPlainText -Force

Set-AzureKeyVaultSecret `
  -VaultName $vaultName `
  -Name $secretName `
   -SecretValue $secret

이 스크립트를 실행 하면 출력에 비밀 URI가 포함 됩니다.When you run this script, the output includes the secret URI. 이 URI는 Windows에 인증서 푸시 리소스 관리자 템플릿에참조 해야 하므로 적어 둡니다.Make a note of this URI, as you must reference it in the Push certificate to Windows Resource Manager template. 개발 컴퓨터에 vm-푸시 인증서-windows 템플릿 폴더를 다운로드 합니다.Download the vm-push-certificate-windows template folder to your development computer. 이 폴더에는 다음 단계에서 필요한 파일에 대 한azuredeploy.jsazuredeploy.parameters.js 포함 되어 있습니다.This folder contains the azuredeploy.json and azuredeploy.parameters.json files, which you need in the following steps.

환경 값에 따라 파일 의azuredeploy.parameters.js 을 수정 합니다.Modify the azuredeploy.parameters.json file according to your environment values. 중요 한 매개 변수는 자격 증명 모음 이름, 자격 증명 모음 리소스 그룹 및 암호 URI (이전 스크립트에서 생성 됨)입니다.The important parameters are the vault name, the vault resource group, and the secret URI (as generated by the previous script). 다음 섹션에서는 매개 변수 파일의 예를 보여 줍니다.The following section shows an example of a parameter file.

파일의 azuredeploy.parameters.js업데이트Update the azuredeploy.parameters.json file

환경에 azuredeploy.parameters.json vaultName 따라, 비밀 URI, VmName 및 기타 매개 변수를 사용 하 여 파일의azuredeploy.parameters.js를 업데이트 합니다.Update the azuredeploy.parameters.json file with the vaultName, secret URI, VmName, and other parameters as per your environment. 다음 JSON 파일은 템플릿 매개 변수 파일의 예를 보여 줍니다.The following JSON file shows an example of the template parameters file:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "newStorageAccountName": {
      "value": "kvstorage01"
    },
    "vmName": {
      "value": "VM1"
    },
    "vmSize": {
      "value": "Standard_D1_v2"
    },
    "adminUserName": {
      "value": "demouser"
    },
    "adminPassword": {
      "value": "demouser@123"
    },
    "vaultName": {
      "value": "contosovault"
    },
    "vaultResourceGroup": {
      "value": "contosovaultrg"
    },
    "secretUrlWithVersion": {
      "value": "https://testkv001.vault.local.azurestack.external/secrets/testcert002/82afeeb84f4442329ce06593502e7840"
    }
  }
}

템플릿 배포Deploy the template

다음 PowerShell 스크립트를 사용 하 여 템플릿을 배포 합니다.Deploy the template by using the following PowerShell script:

# Deploy a Resource Manager template to create a VM and push the secret to it
New-AzResourceGroupDeployment `
  -Name KVDeployment `
  -ResourceGroupName $resourceGroup `
  -TemplateFile "<Fully qualified path to the azuredeploy.json file>" `
  -TemplateParameterFile "<Fully qualified path to the azuredeploy.parameters.json file>"

템플릿이 성공적으로 배포 되 면 다음과 같은 출력이 표시 됩니다.When the template is deployed successfully, it displays the following output:

템플릿 배포 결과

Azure Stack 허브는 배포 하는 동안 VM에 인증서를 푸시합니다.Azure Stack Hub pushes the certificate to the VM during deployment. 인증서 위치는 VM의 운영 체제에 따라 달라 집니다.The certificate location depends on the operating system of the VM:

  • Windows에서 인증서는 사용자가 제공한 인증서 저장소를 사용 하 여 LocalMachine 인증서 위치에 추가 됩니다.In Windows, the certificate is added to the LocalMachine certificate location, with the certificate store that the user provided.
  • Linux에서 인증서는 UppercaseThumbprint 파일 이름 (X509 /var/lib/waagent 인증서 파일에 대 한 파일 이름) 및 개인 키에 대 한 UppercaseThumbprint.In Linux, the certificate is placed under the /var/lib/waagent directory, with the file name UppercaseThumbprint.crt for the X509 certificate file and UppercaseThumbprint.prv for the private key.

인증서 사용 중지Retire certificates

인증서 사용 중지는 인증서 관리 프로세스의 일부입니다.Retiring certificates is part of the certificate management process. 이전 버전의 인증서는 삭제할 수 없지만 cmdlet을 사용 하 여 사용 하지 않도록 설정할 수 있습니다 Set-AzureKeyVaultSecretAttribute .You can't delete the older version of a certificate, but you can disable it by using the Set-AzureKeyVaultSecretAttribute cmdlet.

다음 예제에서는 인증서를 사용 하지 않도록 설정 하는 방법을 보여 줍니다.The following example shows how to disable a certificate. VaultName, 및 매개 변수에 대해 고유한 값을 사용 Name Version 합니다.Use your own values for the VaultName, Name, and Version parameters.

Set-AzureKeyVaultSecretAttribute -VaultName contosovault -Name servicecert -Version e3391a126b65414f93f6f9806743a1f7 -Enable 0

다음 단계Next steps