연습 - ARM 템플릿에서 비밀 관리

완료됨

이전 연습에서 Linux 가상 머신을 프로비저닝하는 기본 ARM(Azure Resource Manager) 템플릿을 실행했습니다. 이 부분에서도 비슷한 프로세스를 수행합니다.

이번에는 암호를 매개 변수로 전달하는 대신 Azure Key Vault에 암호를 저장합니다. ARM 템플릿이 암호에 액세스할 수 있도록 하려면 구독의 키 자격 증명 모음 비밀을 참조하는 매개 변수 파일을 만듭니다.

Azure Key Vault 배포

참고

샌드박스의 제한 사항으로 인해 여기서는 Azure Portal에서 Azure Key Vault에 키 자격 증명 모음을 만듭니다. 일반적으로 New-AzKeyVault cmdlet을 사용하여 Azure PowerShell에서 키 자격 증명 모음을 만듭니다.

키 자격 증명 모음을 만들고 배포 시간 액세스를 허용합니다. 이를 수행하려면:

  1. 키 자격 증명 모음 이름을 포함하는 PowerShell 변수를 만듭니다.

    $KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
    
  2. $KVNAME을 실행하여 값을 출력합니다.

    $KVNAME
    

    출력은 다음과 같습니다(표시되는 숫자는 다름).

    tailwind-secrets5978564
    

    다음 단계에 편리한 위치에 값을 복사합니다.

  3. 샌드박스를 활성화한 계정과 동일한 계정을 사용하여 Azure Portal에 로그인합니다.

  4. Azure Portal 메뉴 또는 페이지에서 리소스 만들기를 선택합니다.

  5. 검색 상자에 Key Vault를 입력합니다.

  6. 목록에서 Key Vault를 선택하고 만들기를 선택하여 키 자격 증명 모음을 구성하기 시작합니다.

  7. 만들기 창에서 다음 값을 지정합니다.

    1. 리소스 그룹: 리소스 그룹 이름입니다.
    2. Key Vault 이름: $KVNAME의 값입니다(예: tailwind-secrets5978564).
  8. 검토 + 만들기를 선택합니다.

  9. 만들기를 선택합니다. 이 작업은 1분 정도 걸릴 수 있습니다. 리소스를 만들었으면 리소스로 이동을 선택합니다.

  10. 설정에서 액세스 구성을 선택합니다. 템플릿 배포를 위한 Azure Resource Manager 옵션을 사용하도록 설정하고 적용을 선택합니다.

  11. PowerShell 세션에서 ConvertTo-SecureString cmdlet을 실행하고 결과를 secretSecureString 변수에 할당합니다.

    $secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
    
  12. 다음 Set-AzKeyVaultSecret 명령을 실행하여 키 자격 증명 모음에 비밀을 만듭니다. 비밀의 이름은 vmPassword이고 그 값은 insecurepassword123!입니다.

    $secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
    

매개 변수 파일 만들기

여기서는 VM의 이름, 관리자 사용자 이름 및 Key Vault에 있는 VM 암호에 대한 참조를 포함하는 매개 변수 파일을 만듭니다.

명령줄에서 템플릿으로 매개 변수를 전달할 수 있습니다. 매개 변수 파일은 배포 중에 ARM 템플릿으로 매개 변수를 전달하는 대체 방법입니다. 매개 변수 파일을 사용하면 템플릿에서 Key Vault 암호에 액세스할 수 있습니다.

  1. 다음 Get-AzKeyVault 명령을 실행하여 Key Vault ID를 출력합니다.

    Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
    

    다음과 유사한 출력이 표시됩니다.

    /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
    

    다음 단계를 위해 출력을 기록해 둡니다.

  2. Visual Studio Code의 azuredeploy.json이 포함된 디렉터리에서 azuredeploy.parameters.json이라는 파일을 만듭니다.

  3. azuredeploy.parameters.json에 다음 내용을 추가합니다.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUsername": {
          "value": "azureuser"
        },
        "vmName": {
          "value": "vm2"
        },
        "adminPasswordOrKey": {
          "reference": {
             "keyVault": {
             "id": ""
             },
             "secretName": "vmPassword"
          }
        }
      }
    }
    
  4. id 값(빈 문자열)을 이전 단계에서 복사한 값으로 바꿉니다. 그런 다음, 파일을 저장합니다.

Linux VM 배포

여기서는 이전 연습에서 배포한 동일한 ARM 템플릿을 배포합니다. 이번에는 Key Vault에서 VM 암호를 참조하는 매개 변수 파일을 제공합니다.

  1. 다음 New-AzResourceGroupDeployment 명령을 실행합니다.

    New-AzResourceGroupDeployment `
      -TemplateFile "./azuredeploy.json" `
      -TemplateParameterFile "./azuredeploy.parameters.json" `
      -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
    

    이전 연습에서는 명령줄에서 각 키-값 쌍을 직접 제공했습니다. 여기서는 "./azuredeploy.parameters.json"을 지정하여 매개 변수 파일을 제공합니다.

    dnsLabelPrefixvm2-로 설정되고 그 뒤에 난수가 이어집니다. 이는 DNS 이름이 이전 연습에 사용된 DNS 이름과 다르도록 하기 위해 필요합니다.

배포 확인

VM이 프로비전되고 SSH를 통해 연결 가능한지 확인합니다. 이를 수행하려면:

  1. Invoke-Expression 명령을 실행하여 SSH를 통해 VM에 연결합니다.

    Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
    

    메시지가 표시되면 yes를 입력하여 연결을 계속 진행합니다. 그런 다음 관리자 암호 insecurepassword123!를 입력합니다.

    중요

    실제에서는 암호를 안전하게 유지하세요. 또한 퍼블릭 키 인증을 사용할 수 있습니다. 일반적으로 이 방법이 암호를 사용하는 것보다 안전합니다.

  2. VM에 대한 SSH 연결에서 hostname을 실행하여 VM의 호스트 이름을 출력합니다.

    hostname
    

    VM의 내부 호스트 이름 vm1이 표시됩니다.

    vm2
    
  3. exit를 실행하여 SSH 세션을 종료합니다.

    exit
    

잘하셨습니다! Key Vault에서 비밀 정보를 읽는 매개 변수 파일을 포함하도록 배포를 확장했습니다.

Azure Key Vault 배포

Azure Key Vault에서 키 자격 증명 모음을 만들고 VM 암호를 보안 비밀로 추가합니다. 이를 수행하려면:

  1. 키 자격 증명 모음 이름을 포함하는 Bash 변수를 만듭니다.

    KVNAME=tailwind-secrets$RANDOM
    

    키 자격 증명 모음 이름은 고유해야 합니다. $RANDOM 부분은 키 자격 증명 모음 이름이 난수로 끝나도록 합니다.

  2. 다음 az keyvault create 명령을 실행하여 키 자격 증명 모음을 만듭니다.

    az keyvault create \
      --name $KVNAME \
      --enabled-for-template-deployment true
    

    --enabled-for-template-deployment 인수는 ARM(Azure Resource Manager) 템플릿이 키 자격 증명 모음에서 비밀을 검색할 수 있도록 허용합니다.

  3. 다음 az keyvault secret set 명령을 실행하여 키 자격 증명 모음에 비밀을 만듭니다. 비밀의 이름은 vmPassword이고 그 값은 insecurepassword123!입니다.

    az keyvault secret set \
      --vault-name $KVNAME \
      --name vmPassword \
      --value 'insecurepassword123!'
    

매개 변수 파일 만들기

여기서는 VM의 이름, 관리자 사용자 이름 및 Key Vault에 있는 VM 암호에 대한 참조를 포함하는 매개 변수 파일을 만듭니다.

명령줄에서 템플릿으로 매개 변수를 전달할 수 있습니다. 매개 변수 파일은 배포 중에 ARM 템플릿으로 매개 변수를 전달하는 대체 방법입니다. 매개 변수 파일을 사용하면 템플릿에서 Key Vault 암호에 액세스할 수 있습니다.

  1. 다음 az keyvault show 명령을 실행하여 Key Vault ID를 출력합니다.

    az keyvault show \
      --name $KVNAME \
      --query id \
      --output tsv
    

    다음과 유사한 출력이 표시됩니다.

    /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
    

    다음 단계를 위해 출력을 기록해 둡니다.

  2. Visual Studio Code의 azuredeploy.json이 포함된 디렉터리에서 azuredeploy.parameters.json이라는 파일을 만듭니다.

  3. azuredeploy.parameters.json에 다음 내용을 추가합니다.

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUsername": {
          "value": "azureuser"
        },
        "vmName": {
          "value": "vm2"
        },
        "adminPasswordOrKey": {
          "reference": {
             "keyVault": {
             "id": ""
             },
             "secretName": "vmPassword"
          }
        }
      }
    }
    
  4. id 값(빈 문자열)을 이전 단계에서 복사한 값으로 바꿉니다. 그런 다음, 파일을 저장합니다.

Linux VM 배포

여기서는 이전 연습에서 배포한 동일한 ARM 템플릿을 배포합니다. 이번에는 Key Vault에서 VM 암호를 참조하는 매개 변수 파일을 제공합니다.

다음 az deployment group create 명령을 실행하여 템플릿을 배포합니다.

az deployment group create \
  --template-file azuredeploy.json \
  --parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"

이전 연습에서는 --parameters 인수에 각 키-값 쌍을 제공했습니다. 여기서는 @azuredeploy.parameters.json을 지정하여 매개 변수 파일을 제공합니다.

dnsLabelPrefixvm2-로 설정되고 그 뒤에 난수가 이어집니다. 이는 DNS 이름이 이전 연습에 사용된 DNS 이름과 다르도록 하기 위해 필요합니다.

배포 확인

이전 연습에서와 같이 VM이 프로비전되고 SSH를 통해 연결 가능한지 확인합니다. 간단히 하기 위해 이번에는 중간 단계 중 일부를 건너뜁니다.

  1. 다음을 실행하여 SSH를 통해 VM에 연결합니다.

    $(az deployment group show \
      --name azuredeploy \
      --query properties.outputs.sshCommand.value \
      --output tsv)
    

    메시지가 표시되면 yes를 입력하여 연결을 계속 진행합니다. 그런 다음 관리자 암호 insecurepassword123!를 입력합니다.

  2. VM에 대한 SSH 연결에서 hostname을 실행하여 VM의 호스트 이름을 출력합니다.

    hostname
    

    VM의 내부 호스트 이름 vm2이 표시됩니다.

    vm2
    
  3. exit를 실행하여 SSH 세션을 종료합니다.

    exit
    

잘하셨습니다! Key Vault에서 비밀 정보를 읽는 매개 변수 파일을 포함하도록 배포를 확장했습니다.