관리되는 서비스에 고객 관리형 키 사용

중요

이 기능은 공개 미리 보기 상태입니다.

참고

이 기능에는 Azure Databricks 프리미엄 플랜이 필요합니다.

데이터에 대한 추가 제어를 위해 사용자 고유의 키를 추가하여 일부 유형의 데이터에 대한 액세스를 보호하고 제어할 수 있습니다. Azure Databricks에는 서로 다른 유형의 데이터 및 위치에 대한 두 가지 고객 관리형 주요 기능이 있습니다. 비교하려면 암호화를 위한 고객 관리형 키를 참조하세요.

Azure Databricks 컨트롤 플레인의 관리되는 서비스 데이터는 미사용 시 암호화됩니다. 관리되는 서비스에 대한 고객 관리형 키를 추가하여 다음과 같은 유형의 암호화된 데이터에 대한 액세스를 보호하고 제어할 수 있습니다.

작업 영역에 대한 고객 관리형 키 암호화를 추가한 후에는 Azure Databricks가 이 키를 사용하여 작업 영역의 관리되는 서비스 데이터에 대한 향후 쓰기 작업을 암호화하는 키에 대한 액세스를 제어합니다. 기존 데이터는 다시 암호화되지 않습니다. 데이터 암호화 키는 여러 읽기 및 쓰기 작업을 위해 메모리에 캐시되고 정기적으로 메모리에서 제거됩니다. 해당 데이터에 대한 새 요청에는 클라우드 서비스의 키 관리 시스템에 대한 또 다른 요청이 필요합니다. 키를 삭제하거나 해지하면 캐시 시간 간격이 끝날 때 보호된 데이터에 대한 읽기 또는 쓰기가 실패합니다.

나중에 고객 관리형 키를 회전(업데이트)할 수 있습니다. 키 회전을 참조하세요.

참고

이 기능은 컨트롤 플레인 외부에 저장된 데이터를 암호화하지 않습니다. 작업 영역의 루트 Blob Storage에서 데이터를 암호화하려면 DBFS 루트에 대한 고객 관리형 키 구성을 참조하세요.

1단계: 키 자격 증명 모음 만들기 또는 기존 자격 증명 모음 사용

Azure Key Vault 인스턴스를 만들고 해당 권한을 설정해야 합니다. 이 작업은 Azure Portal을 통해 수행할 수 있지만, 다음 지침에서는 Azure CLI를 사용합니다.

  1. 키 자격 증명 모음을 만들거나 기존 키 자격 증명 모음을 선택합니다.

    • 키 자격 증명 모음을 만들려면 대괄호 안에 있는 항목을 지역, 키 자격 증명 모음 이름 및 리소스 그룹 이름으로 바꿉니다.

      az keyvault create --location <region> \
                         --name <key-vault-name> \
                         --resource-group <resource-group-name>
      
    • 기존 키 자격 증명 모음을 사용하려면 다음 단계에서 키 자격 증명 모음 이름을 복사합니다.

  2. AzureDatabricks 애플리케이션의 개체 ID를 가져옵니다.

    az ad sp show --id "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d" \
                  --query "objectId" \
                  --output tsv
    

    Azure CLI를 사용하는 대신 Azure Portal 내에서 개체 ID를 가져올 수 있습니다.

    1. Azure Active Directory의 사이드바 메뉴에서 엔터프라이즈 애플리케이션을 선택합니다.
    2. AzureDatabricks를 검색하고, 결과에서 엔터프라이즈 애플리케이션을 클릭합니다.
    3. 속성에서 개체 ID를 복사합니다.
  3. 키 자격 증명 모음에 필요한 권한을 설정합니다. <key-vault-name>을 이전 단계에서 사용한 자격 증명 모음 이름으로 바꾸고, <object-id>를 AzureDatabricks 애플리케이션의 개체 ID로 바꿉니다.

    az keyvault set-policy -n <key-vault-name> \
                           --key-permissions get wrapKey unwrapKey  \
                           --object-id <object-id>
    

2단계: 새 키 만들기 또는 기존 키 사용

키를 키 자격 증명 모음 아래에 만듭니다. KeyType은 RSA여야 하지만, RSA 키 크기와 HSM은 중요하지 않습니다. KeyVault는 Azure Databricks 작업 영역과 동일한 Azure 테넌트에 있어야 합니다. Azure Portal, Azure CLI 또는 기타 도구 중에서 선호하는 도구를 사용합니다.

CLI에서 키를 만들려면 다음 명령을 실행합니다.

az keyvault key create --name <key name> \
                       --vault-name <key vault name>

응답의 kid 속성에 있는 키 ID에서 가져올 수 있는 다음 값을 적어 둡니다. 이 값은 이후 단계에서 사용합니다.

  • 키 자격 증명 모음 URL: 키 자격 증명 모음 이름을 포함하는 키 ID의 시작 부분입니다. 형식은 https://<key-vault-name>.vault.azure.net입니다.
  • 키 이름: 키의 이름입니다.
  • 키 버전: 키의 버전입니다.

전체 키 ID의 형식은 <key-vault-URL>/keys/<key-name>/<key-version>입니다.

대신 기존 키를 사용하는 경우 다음 단계에서 사용할 수 있도록 키에 대한 이러한 값을 가져와서 복사합니다. 계속하기 전에 기존 키가 사용하도록 설정되어 있는지 확인합니다.

3단계: 키를 사용하여 작업 영역 만들기 또는 업데이트

관리되는 서비스에 대한 고객 관리형 키를 사용하여 새 작업 영역을 배포하거나 고객 관리형 키를 기존 작업 영역에 추가할 수 있습니다. 이러한 두 작업은 모두 ARM 템플릿을 사용하여 수행할 수 있습니다. Azure Portal, Azure CLI 또는 기타 도구 중에서 선호하는 도구를 사용합니다.

다음 ARM 템플릿은 Microsoft.Databricks/workspaces 리소스에 대한 미리 보기 API 버전을 사용하여 고객 관리형 키를 통해 새 작업 영역을 만듭니다. 이 텍스트를 databricks-cmk-template.json이라는 파일에 로컬로 저장합니다.

참고

이 예제 템플릿에는 사용자 고유의 VNet을 제공하는 것과 같은 가능한 모든 기능이 포함되어 있지 않습니다. 템플릿을 이미 사용하는 경우 이 템플릿의 매개 변수, 리소스 및 출력을 기존 템플릿에 병합합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "workspaceName": {
      "type": "string",
      "metadata": {
        "description": "The name of the Azure Databricks workspace to create."
      }
    },
    "pricingTier": {
      "type": "string",
      "defaultValue": "premium",
      "allowedValues": [
        "standard",
        "premium"
      ],
      "metadata": {
        "description": "The pricing tier of workspace."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    },
    "apiVersion": {
      "type": "string",
      "defaultValue": "2021-04-01-preview",
      "allowedValues":[
        "2021-04-01-preview"
      ],
      "metadata": {
        "description": "The api version to create the workspace resources"
      }
    },
    "keyvaultUri": {
      "type": "string",
      "metadata": {
        "description": "The key vault URI for customer-managed key for managed services"
      }
    },
    "keyName": {
      "type": "string",
      "metadata": {
        "description": "The key name used for customer-managed key for managed services"
      }
    },
    "keyVersion": {
      "type": "string",
      "metadata": {
        "description": "The key version used for customer-managed key for managed services"
      }
    }
  },
  "variables": {
    "managedResourceGroupName": "[concat('databricks-rg-', parameters('workspaceName'), '-', uniqueString(parameters('workspaceName'), resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Databricks/workspaces",
      "name": "[parameters('workspaceName')]",
      "location": "[parameters('location')]",
      "apiVersion": "[parameters('apiVersion')]",
      "sku": {
        "name": "[parameters('pricingTier')]"
      },
      "properties": {
        "ManagedResourceGroupId": "[concat(subscription().id, '/resourceGroups/', variables('managedResourceGroupName'))]",
        "encryption": {
          "entities": {
             "managedServices": {
                "keySource": "Microsoft.Keyvault",
                "keyVaultProperties": {
                   "keyVaultUri": "[parameters('keyvaultUri')]",
                   "keyName": "[parameters('keyName')]",
                   "keyVersion": "[parameters('keyVersion')]"
                }
             }
          }
        }
      }
    }
  ],
  "outputs": {
    "workspace": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Databricks/workspaces', parameters('workspaceName')))]"
    }
  }
}

다른 템플릿을 이미 사용하고 있다면 이 템플릿의 매개 변수, 리소스 및 출력을 기존 템플릿에 병합할 수 있습니다.

이 템플릿을 사용하여 작업 영역을 만들거나 업데이트하려면 도구에 따라 몇 가지 옵션이 있습니다.

Azure CLI를 사용하여 작업 영역 만들기

Azure CLI를 사용하여 새 작업 영역을 만들려면 다음 명령을 실행합니다.

az deployment group create --resource-group <resource-group-name>  \
                           --template-file <file-name>.json \
                           --parameters workspaceName=<new-workspace-name> \
                           keyvaultUri=<keyvaultUrl> \
                           keyName=<keyName> keyVersion=<keyVersion>

Azure CLI를 사용하여 작업 영역 업데이트

Azure CLI를 사용하여 고객 관리형 키 작업 영역을 사용하거나 기존 키를 회전하도록 기존 작업 영역을 업데이트하려면 다음을 수행합니다.

  1. 작업 영역을 배포한 ARM 템플릿에서 고객 관리형 키를 추가하지 않은 경우 resources.properties.encryption 섹션 및 관련 매개 변수를 추가합니다. 이 문서의 앞부분에 있는 템플릿을 참조하세요.

    1. 템플릿에서 resources.properties.encryption 섹션을 추가합니다.
    2. parameters 섹션에서 템플릿의 세 개의 새 매개 변수(keyvaultUri, keyNamekeyVersion)를 추가합니다.
  2. 새 작업 영역을 만들 때와 동일한 명령을 실행합니다. 리소스 그룹 이름과 작업 영역 이름이 기존 작업 영역과 동일한 경우 이 명령은 새 작업 영역을 만드는 대신 기존 작업 영역을 업데이트합니다.

    중요

    키 관련 매개 변수의 변경 내용 외에는 작업 영역을 만드는 데 사용한 것과 동일한 매개 변수를 사용합니다.

    az deployment group create --resource-group <existing-resource-group-name>  \
                               --template-file <file-name>.json \
                               --parameters workspaceName=<existing-workspace-name> \
                               keyvaultUri=<keyvaultUrl> \
                               keyName=<keyName> keyVersion=<keyVersion>
    

Azure Portal을 사용하여 작업 영역 만들기 또는 업데이트

Azure Portal에서 템플릿을 사용하여 작업 영역을 만들거나 업데이트하려면 다음을 수행합니다.

  1. 사용자 지정 배포 페이지로 이동합니다.

  2. 편집기에서 사용자 고유의 템플릿을 빌드합니다.를 클릭합니다.

  3. JSON을 붙여넣습니다.

  4. 저장을 클릭합니다.

  5. 매개 변수를 작성합니다.

    기존 작업 영역을 업데이트하려면 작업 영역을 만드는 데 사용한 것과 동일한 매개 변수를 사용합니다. 키를 처음 추가하려면 세 개의 키 관련 매개 변수를 추가합니다. 키를 회전하려면 키 관련 매개 변수의 일부 또는 전부를 변경합니다. 리소스 그룹 이름과 작업 영역 이름이 기존 작업 영역과 동일한지 확인합니다. 동일한 경우 이 명령은 새 작업 영역을 만드는 대신 기존 작업 영역을 업데이트합니다.

    중요

    키 관련 매개 변수의 변경 내용 외에는 작업 영역을 만드는 데 사용한 것과 동일한 매개 변수를 사용합니다.

  6. 검토 + 만들기를 클릭합니다.

  7. 유효성 검사 문제가 없으면 만들기를 클릭합니다.

자세한 내용은 Azure 문서 빠른 시작: Azure Portal을 사용하여 ARM 템플릿 만들기 및 배포를 참조하세요.

4단계: 필요에 따라 기존 Notebook 내보내기 및 다시 가져오기

기존 작업 영역에 대해 관리되는 서비스를 위한 키가 추가되면 향후의 쓰기 작업에서만 이 키를 사용합니다. 기존 데이터는 다시 암호화되지 않습니다.

데이터를 암호화하는 키가 해당 키로 보호 및 제어되도록 모든 Notebook을 내보낸 다음, 다시 가져올 수 있습니다. 작업 영역 내보내기 및 가져오기 API를 사용할 수 있습니다.

키 회전

고객 관리형 키를 관리되는 서비스에 이미 사용하고 있는 경우 작업 영역을 새 키 버전 또는 완전히 새로운 키로 업데이트할 수 있습니다. 이를 키 회전이라고 합니다.

  1. Key Vault에서 새 키를 만들거나 기존 키를 회전합니다. 1단계: 키 자격 증명 모음 만들기 또는 기존 자격 증명 모음 사용을 참조하세요.

    중요

    새 키에 적절한 권한이 있는지 확인합니다.

  2. 템플릿에 올바른 2021-04-01-preview API 버전이 있는지 확인합니다.

  3. 작업 영역을 업데이트합니다.

    • Azure Portal을 사용하려면 사용자 지정 배포 도구를 사용하여 템플릿을 적용합니다. Azure Portal을 사용하여 작업 영역 만들기 또는 업데이트를 참조하세요. 새 작업 영역을 만드는 대신 기존 작업 영역을 업데이트하도록 동일한 값을 리소스 그룹 이름과 작업 영역 이름에 사용해야 합니다.

    • Azure CLI를 사용하려면 다음 명령을 실행합니다. 새 작업 영역을 만드는 대신 기존 작업 영역을 업데이트하도록 동일한 값을 리소스 그룹 이름과 작업 영역 이름에 사용해야 합니다.

      중요

      키 관련 매개 변수의 변경 내용 외에는 작업 영역을 만드는 데 사용한 것과 동일한 매개 변수를 사용합니다.

      az deployment group create --resource-group <existing-resource-group-name>  \
                                 --template-file <file-name>.json \
                                 --parameters workspaceName=<existing-workspace-name> \
                                 keyvaultUri=<keyvaultUrl> \
                                 keyName=<keyName> keyVersion=<keyVersion>
      
  4. 필요에 따라 모든 기존 Notebook에서 새 키를 사용할 수 있도록 기존 Notebook을 내보내고 다시 가져옵니다.

문제 해결 및 모범 사례

실수로 키 삭제

Azure Key Vault에서 키를 삭제하면 작업 영역 로그인이 실패하기 시작하고 Azure Databricks에서 Notebook을 읽을 수 없습니다. 이를 방지하려면 일시 삭제를 사용하도록 설정하는 것이 좋습니다. 이 옵션을 사용하면 키가 삭제된 경우 30일 이내에 복구할 수 있습니다. 일시 삭제가 사용하도록 설정된 경우 키를 다시 사용하도록 설정하여 문제를 해결하면 됩니다.

분실한 키를 복구할 수 없음

키를 분실하여 복구할 수 없는 경우 키를 통해 암호화된 모든 Notebook 데이터는 복구할 수 없습니다.

키 자격 증명 모음 권한으로 인한 키 업데이트 실패

작업 영역을 만드는 데 문제가 있는 경우 키 자격 증명 모음에 올바른 권한이 있는지 확인합니다. Azure에서 반환된 오류는 이를 근본 원인으로 올바르게 표시하지 않을 수 있습니다. 또한 필수 권한은 get, wrapKeyunwrapKey입니다. 1단계: 키 자격 증명 모음 만들기 또는 기존 자격 증명 모음 사용을 참조하세요.