Share via


Microsoft Entra ID 서비스 주체를 사용하여 작업 실행

작업은 Azure Databricks 클러스터에서 애플리케이션을 실행하는 비대화형 방법을 제공합니다(예: 예약된 기준으로 실행되어야 하는 ETL 작업 또는 데이터 분석 작업). 일반적으로 이러한 작업은 해당 작업을 만든 사용자로 실행되지만 다음과 같은 몇 가지 제한 사항이 있을 수 있습니다.

  • 작업 만들기 및 실행은 적절한 권한이 있는 사용자에 따라 달라집니다.
  • 작업을 만든 사용자만 작업에 액세스할 수 있습니다.
  • 사용자가 Azure Databricks 작업 영역에서 제거될 수 있습니다.

특정 사용자가 아닌 애플리케이션과 연결된 계정인 서비스 계정을 사용하는 것은 이러한 제한 사항을 해결하는 일반적인 방법입니다. Azure에서 Microsoft Entra ID(이전의 Azure Active Directory) 애플리케이션 및 서비스 주체를 사용하여 서비스 계정을 만들 수 있습니다.

이것이 중요한 예는 서비스 주체가 Azure Data Lake Storage Gen2 계정에 저장된 데이터에 대한 액세스를 제어하는 경우입니다. 이러한 서비스 주체를 사용하여 작업을 실행하면 작업이 스토리지 계정의 데이터에 액세스할 수 있으며 데이터 액세스 범위를 제어할 수 있습니다.

이 자습서에서는 Microsoft Entra ID 애플리케이션 및 서비스 주체를 만들고 해당 서비스 주체를 작업의 소유자로 만드는 방법을 설명합니다. 또한 작업을 소유하지 않는 다른 그룹에 작업 실행 권한을 부여하는 방법도 알아봅니다. 다음은 이 자습서에서 안내하는 작업에 대한 개략적인 개요입니다.

  1. Microsoft Entra ID에서 서비스 주체를 만듭니다.
  2. Azure Databricks에서 PAT(개인용 액세스 토큰)를 만듭니다. PAT를 사용하여 Databricks REST API를 인증합니다.
  3. Databricks SCIM API를 사용하여 Azure Databricks에 비 관리 사용자로 서비스 주체를 추가합니다.
  4. Azure Databricks에서 Azure Key Vault 지원 비밀 범위를 만듭니다.
  5. 서비스 주체에게 비밀 범위에 대한 읽기 액세스 권한을 부여합니다.
  6. Azure Databricks에서 작업을 만들고 비밀 범위에서 비밀을 읽도록 작업 클러스터를 구성합니다.
  7. 작업의 소유권을 서비스 주체로 이전합니다.
  8. 서비스 주체로 실행하여 작업을 테스트합니다.

Azure 구독이 아직 없는 경우 시작하기 전에 무료 계정을 만듭니다.

참고 항목

자격 증명 통과가 설정된 클러스터를 사용하여 서비스 주체가 소유한 작업을 실행할 수 없습니다. 작업에 Azure Storage에 액세스하는 데 서비스 주체가 필요한 경우 Azure 자격 증명을 사용하여 Azure Data Lake Storage Gen2 또는 Blob Storage에 대한 커넥트 참조하세요.

요구 사항

이 자습서에는 다음이 필요합니다.

  • Microsoft Entra ID 테넌트에 애플리케이션을 등록하는 데 필요한 권한이 있는 사용자 계정입니다.
  • 작업을 실행할 Azure Databricks 작업 영역의 관리 권한.
  • Azure Databricks에 대한 API 요청을 만들기 위한 도구입니다. 이 자습서에서는 cURL을 사용하지만 REST API 요청을 제출할 수 있는 도구를 사용할 수 있습니다.

Microsoft Entra ID에서 서비스 주체 만들기

서비스 주체는 Microsoft Entra ID 애플리케이션의 ID입니다. 작업을 실행하는 데 사용할 서비스 주체를 만들려면 다음을 수행합니다.

  1. Azure Portal에서 Microsoft Entra ID > 앱 등록 새 등록을 > 선택합니다. 애플리케이션의 이름을 입력하고 등록을 클릭합니다.
  2. 인증서 및 비밀로 이동하여 새 클라이언트 비밀을 클릭하고 새 클라이언트 비밀을 생성합니다. 비밀을 복사하여 안전한 장소에 저장합니다.
  3. 개요로 이동하여 애플리케이션(클라이언트) ID디렉터리(테넌트) ID를 확인합니다.

Azure Databricks 개인용 액세스 토큰 만들기

Azure Databricks PAT(개인용 액세스 토큰)를 사용하여 Databricks REST API 대해 인증합니다. API 요청을 만드는 데 사용할 수 있는 PAT를 만들려면 다음을 수행합니다.

  1. Azure Databricks 작업 영역으로 이동합니다.
  2. 화면의 오른쪽 위 모서리에서 사용자 이름을 클릭하고 설정 클릭합니다.
  3. 개발자를 클릭합니다.
  4. 액세스 토큰 옆에 있는 관리를 클릭합니다.
  5. 새 토큰 생성을 클릭합니다.
  6. 토큰 값을 복사하고 저장합니다.

이 예제에서는 개인용 액세스 토큰을 사용하지만 대부분의 API에 Microsoft Entra ID 토큰을 사용할 수 있습니다. PAT는 관리 구성 작업에 적합하지만 프로덕션 워크로드에는 Microsoft Entra ID 토큰을 사용하는 것이 가장 좋습니다.

PAT 생성을 보안 목적으로만 관리자로 제한할 수 있습니다. 자세한 내용은 개인용 액세스 토큰 모니터링 및 관리를 참조하세요.

Azure Databricks 작업 영역에 서비스 주체 추가

그룹 API를 사용하여 작업 영역에 Microsoft Entra ID 서비스 주체를 추가합니다. 또한 서비스 주체에게 자동화된 작업 클러스터를 시작할 수 있는 권한을 부여해야 합니다. 사용 권한을 통해 이 권한을 부여할 allow-cluster-create 수 있습니다. 터미널을 열고 다음 명령을 실행하여 서비스 주체를 추가하고 필요한 권한을 부여합니다.

curl -X POST 'https://<per-workspace-url>/api/2.0/preview/scim/v2/ServicePrincipals' \
  --header 'Content-Type: application/scim+json' \
  --header 'Authorization: Bearer <personal-access-token>' \
  --data-raw '{
    "schemas":[
      "urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal"
    ],
    "applicationId":"<application-id>",
    "displayName": "test-sp",
    "entitlements":[
      {
        "value":"allow-cluster-create"
      }
    ]
  }'
  • <per-workspace-url>을 Azure Databricks 작업 공간에 대한 고유한 작업 공간별 URL로 대체합니다.
  • Azure Databricks 개인용 액세스 토큰으로 바꿉 <personal-access-token> 니다.
  • Microsoft Entra ID 애플리케이션 등록용으로 Application (client) ID 바꿉 <application-id> 니다.

Azure Databricks에서 Azure Key Vault 지원 비밀 범위 만들기

비밀 범위는 보안 스토리지 및 비밀 관리를 제공합니다. 서비스 주체와 연결된 비밀을 비밀 범위에 저장합니다. Azure Databricks 비밀 범위 또는 Azure Key Vault 지원 비밀 범위에 비밀을 저장할 수 있습니다. 다음 지침에서는 Azure Key Vault 기반 옵션을 설명합니다.

  1. Azure Portal에서 Azure Key Vault 인스턴스를 만듭니다.
  2. Azure Key Vault 인스턴스에서 지원되는 Azure Databricks 비밀 범위를 만듭니다.

1단계: Azure Key Vault 인스턴스 만들기

  1. Azure Portal에서 Key Vault + 추가를 선택하고 Key Vault에 이름을 지정합니다 > .

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

  3. 유효성 검사가 완료되면 만들기를 클릭합니다.

  4. Key Vault를 만든 후 새 Key Vault의 속성 페이지로 이동합니다.

  5. 자격 증명 모음 URI 및 리소스 ID복사하고 저장합니다.

    Azure Key Vault 속성

2단계: Azure Key Vault 지원 비밀 범위 만들기

Azure Databricks 리소스는 Key Vault 지원 비밀 범위를 만들어 Azure Key Vault에 저장된 비밀을 참조할 수 있습니다. Azure Databricks 비밀 범위를 만들려면 다음을 수행합니다.

  1. Azure Databricks 비밀 범위 만들기 페이지(https://<per-workspace-url>/#secrets/createScope)로 이동합니다. per-workspace-url을 Azure Databricks 작업 공간에 대한 고유한 작업 공간별 URL로 대체합니다.

  2. 범위 이름을 입력합니다.

  3. 1단계: Azure Key Vault 인스턴스 만들기에서 만든 Azure Key Vault의 자격 증명 모음 URI리소스 ID 값을 입력합니다.

  4. 만들기를 클릭합니다.

    비밀 범위 만들기

Azure Key Vault에 클라이언트 비밀 저장

  1. Azure Portal에서 Key Vaults 서비스로 이동합니다.

  2. 1단계: Azure Key Vault 인스턴스 만들기에서 만든 Key Vault를 선택합니다.

  3. 설정 > 비밀 아래에서 생성/가져오기를 클릭합니다.

  4. 수동 업로드 옵션을 선택하고 값 필드에 클라이언트 암호를 입력합니다.

    비밀 만들기

  5. 만들기를 클릭합니다.

서비스 주체에게 비밀 범위에 대한 읽기 액세스 권한 부여

비밀 범위를 만들고 해당 범위에 서비스 주체의 클라이언트 비밀을 저장했습니다. 이제 서비스 주체에게 비밀 범위에서 비밀을 읽을 수 있는 액세스 권한을 부여합니다.

터미널을 열고 다음 명령을 실행합니다.

curl -X POST 'https://<per-workspace-url/api/2.0/secrets/acls/put' \
  --header 'Authorization: Bearer <personal-access-token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "scope": "<scope-name>",
    "principal": "<application-id>",
    "permission": "READ"
  }'
  • <per-workspace-url>을 Azure Databricks 작업 공간에 대한 고유한 작업 공간별 URL로 대체합니다.
  • Azure Databricks 개인용 액세스 토큰으로 바꿉 <personal-access-token> 니다.
  • 클라이언트 암호를 포함하는 Azure Databricks 비밀 범위의 이름으로 바꿉 <scope-name> 니다.
  • Microsoft Entra ID 애플리케이션 등록용으로 Application (client) ID 바꿉 <application-id> 니다.

Azure Databricks에서 작업을 만들고 비밀 범위에서 비밀을 읽도록 클러스터를 구성합니다.

이제 새 서비스 주체로 실행할 수 있는 작업을 만들 준비가 되었습니다. Azure Databricks UI에서 만든 Notebook을 사용하고 작업 클러스터가 서비스 주체의 비밀을 검색할 수 있도록 구성을 추가합니다.

  1. Azure Databricks 방문 페이지로 이동하여 새 > Notebook을 선택합니다. Notebook에 이름을 지정하고 SQL을 기본 언어로 선택합니다.

  2. 전자 필기장의 첫 번째 셀에 입력 SELECT 1 합니다. 성공하면 1만 표시하는 간단한 명령입니다. Azure Data Lake Storage Gen 2의 특정 파일 또는 경로에 대한 서비스 주체 액세스 권한을 부여한 경우 해당 경로에서 대신 읽을 수 있습니다.

  3. 워크플로로 이동하여 작업 만들기를 클릭합니다. 작업 및 작업 이름을 지정하고 전자 필기장 선택을 클릭한 다음 방금 만든 전자 필기장을 선택합니다.

  4. 클러스터 정보 옆에 있는 편집을 클릭합니다.

  5. 클러스터 구성 페이지에서 고급 옵션을 클릭합니다.

  6. Spark 탭에서 다음 Spark 구성을 입력합니다.

    fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
    fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
    fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
    fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope-name>/<secret-name>}}
    fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token
    
    • <storage-account>를 데이터를 포함하는 스토리지 계정의 이름으로 바꿉니다.
    • 클라이언트 암호를 포함하는 Azure Databricks 비밀 범위의 이름으로 바꿉 <secret-scope-name> 니다.
    • Microsoft Entra ID 애플리케이션 등록용으로 Application (client) ID 바꿉 <application-id> 니다.
    • 비밀 범위에서 클라이언트 비밀 값과 연결된 이름으로 바꿉 <secret-name> 니다.
    • Microsoft Entra ID 애플리케이션 등록용으로 Directory (tenant) ID 바꿉 <directory-id> 니다.

서비스 주체에게 작업의 소유권 이전

작업에는 정확히 하나의 소유자가 있을 수 있으므로 작업의 소유권을 자신에게서 서비스 주체로 이전해야 합니다. 다른 사용자가 작업을 관리할 수 있도록 그룹에 CAN MANAGE 권한을 부여할 수도 있습니다. 이 예제에서는 권한 API를 사용하여 이러한 권한을 설정합니다.

터미널을 열고 다음 명령을 실행합니다.

curl -X PUT 'https://<per-workspace-url>/api/2.0/permissions/jobs/<job-id>' \
  --header 'Authorization: Bearer <personal-access-token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "access_control_list": [
      {
        "service_principal_name": "<application-id>",
        "permission_level": "IS_OWNER"
      },
      {
        "group_name": "admins",
        "permission_level": "CAN_MANAGE"
      }
    ]
  }'
  • <per-workspace-url>을 Azure Databricks 작업 공간에 대한 고유한 작업 공간별 URL로 대체합니다.
  • <job-id>를 작업의 고유 식별자로 바꿉니다. 작업 ID를 찾으려면 사이드바에서 워크플로를 클릭하고 작업 이름을 클릭합니다. 작업 ID는 작업 세부 정보 측면 패널에 있습니다.
  • Azure Databricks 개인용 액세스 토큰으로 바꿉 <personal-access-token> 니다.
  • Microsoft Entra ID 애플리케이션 등록용으로 Application (client) ID 바꿉 <application-id> 니다.

작업에는 Notebook에 대한 읽기 권한도 필요합니다. 다음 명령을 실행하여 필요한 권한을 부여합니다.

curl -X PUT 'https://<per-workspace-url>/api/2.0/permissions/notebooks/<notebook-id>' \
  --header 'Authorization: Bearer <personal-access-token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "access_control_list": [
      {
        "service_principal_name": "<application-id>",
        "permission_level": "CAN_READ"
      }
    ]
  }'
  • <per-workspace-url>을 Azure Databricks 작업 공간에 대한 고유한 작업 공간별 URL로 대체합니다.
  • 작업과 연결된 Notebook의 ID로 바꿉 <notebook-id> 니다. ID를 찾으려면 Azure Databricks 작업 영역의 Notebook으로 이동하여 Notebook의 URL에서 notebook/ 뒤에 오는 숫자 ID를 찾습니다.
  • Azure Databricks 개인용 액세스 토큰으로 바꿉 <personal-access-token> 니다.
  • Microsoft Entra ID 애플리케이션 등록용으로 Application (client) ID 바꿉 <application-id> 니다.

작업 테스트

UI, API 또는 CLI를 통해 사용자로 작업을 실행하는 것과 동일한 방식으로 서비스 주체로 작업을 실행합니다. Azure Databricks UI를 사용하여 작업을 테스트하려면 다음을 수행합니다.

  1. Azure Databricks UI에서 워크플로로 이동하여 작업을 선택합니다.
  2. 지금 실행을 클릭합니다.

모든 것이 올바르게 실행되면 작업에 성공 상태가 표시됩니다. UI에서 작업을 선택하여 출력을 확인할 수 있습니다.

작업 출력

자세한 정보

작업을 만들고 실행하는 방법에 대한 자세한 내용은 Azure Databricks 작업 만들기 및 실행을 참조 하세요.