토큰 인증을 사용하여 API Databricks 앱에 연결

OAuth 2.0 전달자 토큰 인증을 사용하여 HTTP API(예: FastAPI 또는 Gradio 앱)를 노출하는 Databricks 앱을 호출할 수 있습니다. 이 방법은 로컬 개발 환경, 외부 애플리케이션 및 기타 Azure Databricks 앱에서 작동합니다.

비고

이 메서드는 API 또는 엔드포인트를 노출하는 앱에만 적용됩니다(경로를 사용하여 /api/ 액세스할 수 있음). 사용자 인터페이스 또는 백그라운드 처리만 제공하는 앱의 경우 토큰 인증을 사용하여 연결할 수 없습니다.

요구 사항

토큰 인증을 사용하여 Databricks 앱에 연결하려면 다음 요구 사항을 충족해야 합니다.

  • 앱은 경로를 사용하여 /api/ 액세스할 수 있는 하나 이상의 API 엔드포인트를 노출해야 합니다.
  • 앱에 대한 권한이 있어야 합니다 CAN USE . Databricks 앱에 대한 권한 구성을 참조하세요.
  • 지원되는 인증 방법 중 하나를 사용하여 Azure Databricks 액세스 토큰을 생성할 수 있어야 합니다.

인증 방법

비고

Azure Entra ID 토큰을 사용하여 Databricks 앱을 직접 호출할 수 없습니다. 토큰 페더레이션에는 클라이언트 쪽에서 토큰 교환 단계가 필요하며, Azure Databricks는 이를 서버 쪽에서 수행하지 않습니다. 인증에 Azure Entra ID 토큰을 사용하려면 먼저 OAuth 토큰으로 교환해야 합니다. ID 공급자 토큰을 사용하여 인증을 참조하세요.

연결 시나리오와 일치하는 인증 방법을 선택합니다.

로컬 개발

로컬 개발 환경에서 연결하려면 사용자 자격 증명과 함께 Databricks CLI 또는 SDK를 사용합니다.

  1. CLI를 사용하여 로그인합니다.

    databricks auth login --host https://<workspace-url> --profile my-env
    

    Azure Databricks는 OAuth 사용자 대 컴퓨터(U2M) 인증을 사용하는 것을 권장합니다.

  2. 액세스 토큰 생성:

    CLI

    databricks auth token --profile my-env
    

    Python

    from databricks.sdk.core import Config
    config = Config(profile="my-env")
    token = config.oauth_token().access_token
    

외부 애플리케이션

외부 애플리케이션에서 프로그래밍 방식으로 액세스하려면 M2M(컴퓨터-컴퓨터) 자격 증명으로 서비스 주체 인증을 사용합니다. OAuth 사용하여 Azure Databricks 대한 서비스 주체 액세스 권한 인증을 참조하세요.

  1. 서비스 주체를 만들고 클라이언트 ID 및 비밀을 가져옵니다. 서비스 주체를 참조하세요.

  2. Databricks SDK를 사용하여 액세스 토큰을 생성합니다.

    from databricks.sdk import WorkspaceClient
    import requests
    
    # Option 1: Explicit credentials
    wc = WorkspaceClient(
        host="https://<workspace-url>",
        client_id="<service-principal-client-id>",
        client_secret="<service-principal-client-secret>"
    )
    
    # Option 2: Environment variables
    # Set DATABRICKS_HOST, DATABRICKS_CLIENT_ID, DATABRICKS_CLIENT_SECRET
    wc = WorkspaceClient()
    
    # Generate Bearer token
    headers = wc.config.authenticate()
    

다른 Databricks 애플리케이션에서

한 Databricks 앱에서 다른 앱으로 연결하는 경우 앱은 할당된 서비스 주체를 사용하여 인증을 자동으로 처리합니다.

from databricks.sdk import WorkspaceClient
import requests

# No explicit credentials needed, uses app's service principal
wc = WorkspaceClient()
headers = wc.config.authenticate()

Azure Databricks 노트북에서

Azure Databricks Notebook에서 앱 API를 호출하려면 대상 그룹 범위 OAuth 토큰에 대해 Notebook의 내부 토큰을 교환한 다음, 해당 토큰을 사용하여 앱을 쿼리해야 합니다.

  1. 앱의 OAuth 클라이언트 ID를 가져옵니다. Azure Databricks SDK를 사용하여 ID를 검색합니다.

    from databricks.sdk import WorkspaceClient
    
    w = WorkspaceClient()
    app_client_id = w.apps.get("<app-name>").oauth2_app_client_id
    
  2. 노트북 토큰을 청중 범위 액세스 토큰으로 교환합니다.

    import requests
    
    url = "https://<workspace-url>/oidc/v1/token"
    notebook_token = (
        dbutils.notebook.entry_point.getDbutils()
        .notebook().getContext().apiToken().get()
    )
    
    data = {
        "grant_type": "urn:ietf:params:oauth:grant-type:token-exchange",
        "subject_token": notebook_token,
        "subject_token_type": "urn:databricks:params:oauth:token-type:personal-access-token",
        "requested_token_type": "urn:ietf:params:oauth:token-type:access_token",
        "scope": "all-apis",
        "audience": app_client_id,
    }
    
    response = requests.post(url=url, data=data)
    audience_token = response.json()["access_token"]
    
  3. audience_token를 베어러 토큰으로 사용하여 앱을 호출합니다. 예제는 앱에 요청 보내기를 참조하세요.

비고

교환된 토큰은 특정 앱으로 범위가 지정되므로 다른 Azure Databricks API를 호출하는 데 사용할 수 없습니다. 토큰 교환 요청의 매개 변수는 scope사용자 권한 부여에서 앱에 대해 구성된 범위의 상위 집합이거나 일치해야 합니다.

사용자 권한 부여에 대한 OAuth 범위 지정

앱에서 사용자 권한 부여를 사용하는 경우 액세스 토큰에는 앱에 대해 구성된 범위의 상위 집합인 범위가 포함되어야 합니다. 토큰에 필요한 범위가 없으면 401 또는 403 오류로 요청이 실패할 수 있습니다.

Databricks CLI를 사용하여 생성된 토큰에는 기본적으로 모든 앱에 all-apis 대한 사용자 권한 부여 요구 사항을 충족하는 범위가 포함됩니다.

databricks auth token --profile my-env

대신 all-apis특정 범위를 요청하려면 사용자 지정 OAuth 흐름을 사용하여 명시적 범위가 있는 액세스 토큰을 수동으로 요청할 수 있습니다. 예를 들어 다음 요청은 sql, file.files, 및 dashboards.genie 범위로 액세스 토큰을 명시적으로 요청합니다.

curl --request POST \
https://<databricks-instance>/oidc/v1/token \
--data "client_id=databricks-cli" \
--data "grant_type=authorization_code" \
--data "redirect_uri=<redirect-url>" \
--data "code_verifier=<code-verifier>" \
--data "code=<authorization-code>" \
--data "scope=sql+file.files+dashboards.genie"

전체 지침은 OAuth U2M 액세스 토큰 수동 생성을 참조하세요.

앱에 요청 보내기

앱의 API 엔드포인트를 호출할 때, 권한 부여 헤더에 전달자 토큰을 포함시키고, <your-endpoint>을 앱의 실제 API 경로로 바꾸세요.

CURL

curl "https://<app-name>-<id>.<region>.databricksapps.com/api/<your-endpoint>" \
     -H "Authorization: Bearer <YOUR_TOKEN>"

요청이 있는 Python

import requests

response = requests.get(
    "https://<app-name>-<id>.<region>.databricksapps.com/api/<your-endpoint>",
    headers={"Authorization": f"Bearer {token}"}
)

SDK를 사용하여 Python

from databricks.sdk import WorkspaceClient
import requests

wc = WorkspaceClient()
headers = wc.config.authenticate()

response = requests.get(
    "https://<app-name>-<id>.<region>.databricksapps.com/api/<your-endpoint>",
    headers=headers
)

보안 고려 사항

로컬 환경에서 앱에 연결하는 경우 다음 보안 모범 사례를 따릅니다.

  • 소스 코드에서 액세스 토큰을 하드 코딩하지 않습니다. 환경 변수 또는 보안 자격 증명 저장소를 사용합니다.
  • 토큰이 손상된 경우 보안 위험을 최소화하기 위해 정기적으로 토큰을 새로 고칩니다.
  • 애플리케이션 로그에서 액세스 토큰 또는 중요한 데이터를 로깅하지 않습니다.

Troubleshooting

로컬 컴퓨터에서 앱에 연결할 때 문제가 발생하는 경우 이러한 솔루션을 사용해 보세요.

인증 실패(401 오류)

다음을 확인합니다.

  • 토큰이 유효합니다(실행 databricks auth token --profile my-env).
  • 프로필이 올바르게 구성됨 databricks auth login
  • 토큰이 만료되지 않았습니다.
  • 토큰에는 필요한 OAuth 범위가 포함됩니다. 토큰의 범위는 사용자 권한 부여에서 앱에 대해 구성된 범위의 상위 집합이어야 합니다.

사용 권한이 거부됨(403 오류)

다음을 확인합니다.

  • CAN USE 앱에 대한 권한이 있습니다.
  • 토큰에는 필요한 OAuth 범위가 포함됩니다. 범위가 부족하면 유효한 사용 권한이 있더라도 403 오류가 발생할 수 있습니다.

앱을 찾을 수 없음(404 오류)

다음을 확인합니다.

  • ID 및 작업 영역 URL이 올바릅니다.
  • 앱이 배포되고 실행되고 있습니다.
  • 엔드포인트 경로가 앱에 있음

네트워크 연결 문제

다음을 확인합니다.

  • 네트워크에서 아웃바운드 HTTPS 연결을 허용합니다.
  • *.databricksapps.com 네트워크에서 도메인에 액세스할 수 있습니다.

또한 조직에서 구성이 필요한 프록시를 사용하는지 확인합니다.

추가 리소스

자세한 내용은 다음 리소스를 참조하세요.