템플릿에서 비밀 관리하기

완료됨

배포 중에 비밀 값(예: 암호)을 매개 변수로 전달할 때 Azure Key Vault에서 값을 가져올 수 있습니다.

매개 변수 파일에서 키 자격 증명 모음과 비밀을 참조하세요.

이 값은 해당 Key Vault ID만 참조되기 때문에 절대 노출되지 않습니다.

키 자격 증명 모음은 배포 대상 리소스 그룹과 다른 구독에 존재해도 됩니다.

키 자격 증명 모음 및 비밀 배포하기

키 자격 증명 모음과 비밀을 만들려면 Azure CLI 또는 PowerShell을 사용합니다.

Resource Manager 배포에서 이 키 자격 증명 모음에 있는 비밀에 액세스하려면 키 자격 증명 모음 속성 enabledForTemplateDeploymenttrue여야 합니다.

Azure CLI 사용

다음 코드 조각은 Azure CLI를 사용하여 키 자격 증명 모음과 비밀을 배포하는 예를 보여 줍니다.

keyVaultName='{your-unique-vault-name}'
resourceGroupName='{your-resource-group-name}'
location='centralus'
userPrincipalName='{your-email-address-associated-with-your-subscription}'

# Create a resource group
az group create --name $resourceGroupName --location $location

# Create a Key Vault
az keyvault create \
  --name $keyVaultName \
  --resource-group $resourceGroupName \
  --location $location \
  --enabled-for-template-deployment true
az keyvault set-policy --upn $userPrincipalName --name $keyVaultName --secret-permissions set delete get list

# Create a secret with the name, vmAdminPassword
password=$(openssl rand -base64 32)
echo $password
az keyvault secret set --vault-name $keyVaultName --name 'vmAdminPassword' --value $password

비밀에 대한 액세스를 사용하도록 설정

키 자격 증명 모음 속성 enabledForTemplateDeploymenttrue로 설정하는 것 외에도, 템플릿을 배포하는 사용자에게 키 자격 증명 모음 및 리소스 그룹을 포함하는 범위에 대한 Microsoft.KeyVault/vaults/deploy/action 권한이 있어야 합니다.

또한 리소스 그룹 및 Key Vault를 포함합니다. 소유자 및 참여자 역할 모두 이 액세스 권한을 부여합니다.

키 자격 증명 모음을 직접 만드는 경우 만든 사람이 소유자가 되므로 기본적으로 이 권한을 갖게 됩니다.

그러나, 키 자격 증명 모음이 다른 구독에 포함된 경우 키 자격 증명 모음의 소유자가 엑세스 권한을 부여해야 합니다.

정적 ID로 비밀 참조

키 자격 증명 모음은 템플릿이 아닌 매개 변수 파일에서 참조됩니다.

다음 이미지에서는 매개 변수 파일이 암호를 참조하고 템플릿에 해당 값을 전달하는 방법을 보여줍니다.

Diagram showing the illustration of the flow of a secret during template deployment. The parameter file references the secret from the template and passes that value to the template.

다음 템플릿은 관리자 암호를 포함하는 SQL 데이터베이스를 배포합니다.

암호 매개 변수는 보안 문자열로 설정됩니다. 그러나 템플릿은 이 값이 어디에 있는지 지정하지 않습니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "adminLogin": {
      "type": "string"
    },
    "adminPassword": {
      "type": "securestring"
    },
    "sqlServerName": {
      "type": "string"
    }
  },
  "resources": [
    {
      "name": "[parameters('sqlServerName')]",
      "type": "Microsoft.Sql/servers",
      "apiVersion": "2015-05-01-preview",
      "location": "[resourceGroup().location]",
      "tags": {},
      "properties": {
        "administratorLogin": "[parameters('adminLogin')]",
        "administratorLoginPassword": "[parameters('adminPassword')]",
        "version": "12.0"
      }
    }
  ],
  "outputs": {
  }
}

이제 앞에 나온 템플릿에 대해 매개 변수 파일을 만들 수 있습니다. 매개 변수 파일에서 템플릿의 매개 변수 이름과 일치하는 매개 변수를 지정합니다.

매개 변수 값의 경우 키 자격 증명 모음에서 비밀을 참조합니다. 비밀은 키 자격 증명 모음의 리소스 식별자와 비밀의 이름을 전달하여 참조합니다.

키 자격 증명 모음 비밀은 다음 매개 변수 파일에 이미 존재해야 하며, 리소스 ID에 대한 정적 값을 제공해야 합니다.

이 파일을 로컬로 복사하고 구독 ID, 자격 증명 모음 이름 및 SQL 서버 이름을 설정합니다.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "adminLogin": {
            "value": "exampleadmin"
        },
        "adminPassword": {
            "reference": {
              "keyVault": {
                "id": "/subscriptions/<subscription-id>/resourceGroups/examplegroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
              },
              "secretName": "examplesecret"
            }
        },
        "sqlServerName": {
            "value": "<your-server-name>"
        }
    }
}

템플릿을 배포하고 템플릿에 매개 변수 파일을 전달해야 합니다.

자세한 내용은 Azure Key Vault를 사용하여 배포 중에 보안 매개 변수 값 전달을 참조하세요.

이 웹 페이지에는 동적 ID를 사용하여 비밀을 참조하는 방법도 나와 있습니다.