Azure Key Vault에서 읽어 ARM 템플릿에서 비밀을 관리합니다.

완료됨

IaC(Infrastructure as code)는 인프라 요구 사항을 사람이 읽을 수 있는 텍스트 파일로 설명하는 것을 의미합니다. ARM(Azure Resource Manager) 템플릿은 IaC의 유형입니다.

애플리케이션 코드와 마찬가지로 Git와 같은 버전 제어 시스템에서 인프라 코드를 관리할 수 있습니다. 이렇게 하면 다른 사용자와 공동 작업을 수행하고 인프라 요구 사항이 진화하는 과정에서 변경 내용을 추적할 수 있습니다.

애플리케이션 코드의 경우와 마찬가지로 암호 및 API 키와 같은 중요한 정보를 ARM 템플릿에 하드 코딩해서는 안됩니다. 그럴 경우 리포지토리에 대한 읽기 권한이 있는 사용자가 이 비밀 정보에 액세스할 수 있기 때문입니다.

조직에서 권한 있는 사용자만 중요한 정보에 액세스할 수 있어야 하지만, ARM 템플릿도 이 정보가 필요합니다. Azure Key Vault는 중요한 정보를 보호하는 한 가지 방법입니다.

Azure Key Vault를 활용한 중요 정보 보호

Azure Key Vault는 보안 비밀 저장소 역할을 하는 클라우드 서비스입니다. Key Vault를 사용하면 자격 증명 모음이라는 보안 컨테이너를 여러 개 만들 수 있습니다. 이러한 자격 증명 모음은 HSM(하드웨어 보안 모듈)에 의해 백업됩니다. 자격 증명 모음은 애플리케이션 비밀을 중앙 집중식으로 스토리지하여 보안 정보의 우발적인 손실 가능성을 줄이는 데 도움이 됩니다. 또한 자격 증명 모음은 저장된 모든 항목에 대한 액세스를 제어하고 기록합니다.

Key Vault는 키와 비밀을 모두 저장할 수 있습니다. 다양한 기능 덕분에 암호를 관리하는 데 적합한 선택이지만, 배포 프로세스에 사용하는 것도 좋습니다.

  • 역할 기반 액세스 제어. 다양한 역할을 사용하여 키 자격 증명 모음을 관리할 수 있으므로 앱 및 여러 수준의 관리자가 사용할 수 있도록 할 수 있습니다.

  • 사용자 및 앱 허용. 특정 사용자 및 앱이 모두 키 자격 증명 모음에 액세스할 수 있도록 키 자격 증명 모음을 구성할 수 있습니다. 앱의 경우 ‘서비스 주체’를 만듭니다. 실제로 서비스 주체만 액세스할 수 있도록 키 자격 증명 모음을 구성할 수 있습니다.

    참고

    서비스 주체는 Azure 리소스에 액세스하기 위해 애플리케이션, 호스팅된 서비스 및 자동화된 도구와 함께 사용하도록 만든 ID입니다. 보안 주체에 제한된 액세스 권한이 있는 역할 또는 역할 하위 집합만 할당하여 리소스에 대한 액세스를 제한합니다. 이 접근 방식을 사용하면 리소스에 액세스할 수 있는 대상을 보다 세부적으로 제어할 수 있습니다.

  • ARM 템플릿과 상호 작용이 가능. ARM 템플릿을 배포하는 동안 키 자격 증명 모음에서 읽을 수 있습니다. 작동하는 데 필요한 구성이 거의 없습니다. 다음 섹션에서는 자세한 정보를 제공합니다.

권한 구성

Key Vault를 저장하는 서비스로 키 자격 증명 모음을 선택했습니다. 예를 들어 가상 머신의 암호를 설정할 수 있도록 배포 중에 키 자격 증명 모음에서 비밀을 읽을 수 있기를 원합니다.

배포 중에 읽을 수 있도록 Key Vault를 설정하려면 수행해야 하는 몇 가지 구성 단계가 있습니다. 단계는 다음과 같습니다.

  1. 배포를 위해 Key Vault를 사용. 배포하는 동안 Key Vault에서 읽을 수 있도록 허용해야 합니다. 이 설정은 만들 때 전달하거나 나중에 수정할 수 있습니다.

  2. 사용자에게 리소스 그룹에 대한 배포 권한이 필요. 이 점은 다른 배포와 다르지 않습니다. 그러나 리소스 그룹을 만들지 않은 경우 역할을 할당하여 배포가 가능하도록 할 수 있습니다.

  3. 사용자에게 키 자격 증명 모음에 대한 적절한 액세스 권한이 필요. 배포하는 동안 키 자격 증명 모음에서 읽을 수 있도록 키 자격 증명 모음에 대한 적절한 액세스 권한이 있어야 합니다. 키 자격 증명 모음을 만들 때 모든 비밀, 키 및 인증서를 관리할 수 있는 권한을 사용자에게 부여하는 액세스 정책을 만듭니다.

배포를 위해 Key Vault를 구성.

ARM 템플릿을 배포하는 동안 Key Vault에서 자격 증명을 읽을 수 있도록 Key Vault 인스턴스를 구성합니다.

배포를 위해 Key Vault를 사용하도록 설정하려면 Key Vault 인스턴스를 만들 때 전달하거나 나중에 수정할 수 있는 설정이 있습니다. PowerShell의 경우 -EnabledForTemplateDeployment라는 스위치입니다. Azure CLI의 경우 --enabled-for-template-deployment라는 인수입니다(true 값이 필요함).

참고

Azure CLI에서는 추가적으로 true 값을 사용하여 부울을 전달해야 합니다.

사용자에게 Key Vault 및 리소스 그룹에 대한 배포 권한이 필요

배포를 수행하고 키 자격 증명 모음에서 비밀을 읽으려면 먼저 ‘배포 권한’이 있어야 합니다. 이 권한을 제공하는 두 가지 역할이 있습니다.

  • Owner: 키 자격 증명 모음을 만든 경우 이 역할이 자동으로 부여됩니다.
  • Contributor: 이 역할은 모든 비밀을 관리할 수 있는 액세스 권한을 부여합니다. 키 자격 증명 모음을 직접 만들지 않은 경우 가장 쉬운 방법은 Contributor 역할을 자신에게 부여하는 것입니다.

또 다른 방법은 사용자 지정 역할을 만들고 할당하여 이 역할에 Microsoft.KeyVault/vaults/deploy/action 권한이 포함되도록 하는 것입니다.

배포 매개 변수 파일 구성

배포하는 동안 각 매개 변수 및 해당 값을 키-값 쌍으로 지정하는 대신 매개 변수 파일을 사용할 수 있습니다.

이 매개 변수 파일에서 어느 키 자격 증명 모음에 관심이 있는지 그리고 해당 키 자격 증명 모음의 어느 비밀에 관심이 있는지 지정합니다. 매개 변수를 수정한 후 이 매개 변수를 사용하도록 배포 템플릿을 업데이트하여 이 작업을 수행합니다.

참고

해당 템플릿에는 키 자격 증명 모음 또는 해당 비밀에 대한 개념이 없습니다. 지정하는 구성은 매개 변수 파일에서 수행됩니다.

매개 변수에 대해 키 자격 증명 모음 및 비밀 구성

매개 변수 파일에서 또한 특정 매개 변수에 대해 배포 권한이 있는 키 자격 증명 모음을 가리킵니다. 다음으로, 관심 있는 비밀을 지정합니다. 이름을 사용하여 비밀을 가리킵니다. 배포하는 동안 이 구성이 비밀 값으로 확인됩니다. 다음은 특정 키 자격 증명 모음을 사용하도록 구성되고 databaseSecret이라는 비밀을 사용하는 myPassword라는 매개 변수입니다.

"myPassword" : {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>",
      "secretName": "databaseSecret"
    }
  }
}

위의 JSON에서 키 자격 증명 모음에 대한 전체 ID를 지정하고 비밀 databaseSecret을 요청합니다. 그런 다음 이 비밀의 값을 추출하여 myPassword 매개 변수에 할당합니다.

리소스의 암호에 매개 변수 할당

이 단계는 키 자격 증명 모음과 관련이 없습니다. 원하는 리소스에 자격 증명 모음에서 비밀 값을 읽도록 구성된 매개 변수가 사용되도록 보장하는 것과 관련 있습니다. 다음은 myPassword 매개 변수에서 읽는 adminPassword 요소를 보여 주는 VM의 축약된 코드 조각입니다(템플릿 파일). 그런 다음, 배포 시 비밀 값을 키 자격 증명 모음에서 읽어서 adminPassword 요소에 할당합니다.

{
  "osProfile": {
    "adminPassword": "[parameters('myPassword')]"
  }
}