OAuth 토큰 페더레이션을 사용하여 Azure Databricks에 대한 액세스 인증
이 문서에서는 ID 공급자의 토큰을 사용하여 Azure Databricks 계정 및 작업 영역 리소스에 액세스하도록 OAuth 페더레이션을 구성하는 방법을 안내합니다.
중요하다
Databricks OAuth 페더레이션은 공개 프리뷰입니다.
Databricks OAuth 토큰 페더레이션이란?
Databricks OAuth 토큰 페더레이션을 사용하면 IDP(ID 공급자)의 토큰을 사용하여 Databricks API에 안전하게 액세스할 수 있습니다. OAuth 토큰 페더레이션은 개인 액세스 토큰 및 Databricks OAuth 클라이언트 비밀과 같은 Databricks 비밀을 관리할 필요가 없습니다.
Databricks OAuth 토큰 페더레이션을 사용하여 사용자 및 서비스 주체는 Databricks OAuth 토큰에 대한 ID 공급자의 JWT(JSON 웹 토큰) 토큰을 교환한 다음 Databricks API에 액세스하는 데 사용할 수 있습니다.
Databricks는 두 가지 유형의 토큰 페더레이션을 지원합니다.
- 계정 전체 토큰 페더레이션 사용하면 Databricks 계정의 모든 사용자 및 서비스 주체가 ID 공급자의 토큰을 사용하여 Databricks API에 액세스할 수 있습니다. 계정 전체 토큰 페더레이션을 사용하면 ID 공급자에서 토큰 발급 정책 관리를 중앙 집중화할 수 있으며 일반적으로 SCIM과 함께 사용되므로 ID 공급자의 사용자가 Azure Databricks 계정으로 동기화됩니다.
- 워크로드 ID 페더레이션 사용하면 Azure Databricks 외부에서 실행되는 자동화된 워크로드가 Databricks 비밀 없이 Databricks API에 액세스할 수 있습니다. 워크로드 ID 페더레이션을 사용하면 애플리케이션(워크로드)이 워크로드 런타임에서 발급한 토큰을 사용하여 Databricks 서비스 주체로 Databricks에 인증합니다.
메모
Microsoft Azure 사용자는 MS Entra 토큰을 사용하여 Azure Databricks CLI 및 API를 안전하게 사용할 수도 있습니다.
계정 전체 토큰 페더레이션
계정 관리자는 계정 페더레이션 정책을 사용하여 Azure Databricks 계정에서 OAuth 토큰 페더레이션을 구성할 수 있습니다. 계정 페더레이션 정책을 사용하면 Azure Databricks 계정의 모든 사용자 및 서비스 주체가 ID 공급자의 토큰을 사용하여 Databricks API에 액세스할 수 있습니다. 계정 페더레이션 정책은 다음을 지정합니다.
- Azure Databricks가 토큰을 수락할 ID 공급자 또는 발급자입니다.
- 토큰을 해당 Azure Databricks 사용자 또는 서비스 주체에 매핑하기 위한 조건입니다.
계정 페더레이션 정책을 구성하려면 다음을 제공합니다.
토큰의 클레임에 지정된 필수 토큰
iss
. 발급자는 ID 공급자를 식별하는 HTTPS URL입니다.토큰 에 의해 허용된 대상 그룹은 토큰의
aud
클레임에 지정됩니다. 이 식별자는 토큰의 받는 사람을 나타냅니다. 토큰의 대상이 정책에서 하나 이상의 대상과 일치하는 한 토큰은 일치 항목으로 간주됩니다. 지정되지 않은 경우 기본값은 Azure Databricks 계정 ID입니다.의 클레임 주제는입니다. 이는 토큰이 발급된 사용자의 Azure Databricks 사용자 이름을 포함하는 토큰 클레임을 나타냅니다. 지정되지 않은 경우 기본값은
sub
.필요에 따라 JWKS(JSON 웹 키 집합) 형식으로 토큰 서명의 유효성을 검사하는 데 사용되는 공개 키입니다. 지정되지 않은 경우(권장) Databricks는 발급자의 잘 알려진 엔드포인트에서 공개 키를 자동으로 가져옵니다. Databricks는 퍼블릭 키를 검색하기 위해 발급자의 잘 알려진 엔드포인트를 사용하는 것이 좋습니다.
메모
페더레이션 정책에서 JWKS를 지정하지 않는 경우(권장) ID 공급자는
{issuer-url}/.well-known/openid-configuration
OpenID 공급자 메타데이터를 제공해야 합니다. OpenID 공급자 메타데이터에는 토큰 서명을 확인하는 데 사용되는 공개 키의 위치를 지정하는jwks_uri
포함되어야 합니다.
다음은 계정 페더레이션 정책 예제입니다.
issuer: "https://idp.mycompany.com/oidc"
audiences: ["databricks"]
subject_claim: "sub"
다음 예제 JWT 본문은 위의 정책과 일치하며 사용자 username@mycompany.com
Databricks에 인증하는 데 사용할 수 있습니다.
{
"iss": "https://idp.mycompany.com/oidc",
"aud": "databricks",
"sub": "username@mycompany.com"
}
계정 페더레이션 정책 구성
계정 관리자는 Databricks CLI(버전 0.239.0 이상) 또는 Databricks API를 사용하여 계정 페더레이션 정책을 구성할 수 있습니다. Azure Databricks 계정에서 최대 5개의 계정 페더레이션 정책을 지정할 수 있습니다.
Databricks CLI
최신 버전의 Databricks CLI를 설치하거나 업데이트합니다.
계정 관리자로서 CLI를 사용하여 Databricks 계정에 인증합니다. ACCOUNT_CONSOLE_URL(예:https://accounts.cloud.databricks.com) 및 Databricks ACCOUNT_ID 지정합니다.
databricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
계정 페더레이션 정책을 만듭니다. 예를 들어:
databricks account federation-policy create --json \ '{ "oidc_policy": { "issuer": "https://idp.mycompany.com/oidc", "audiences": [ "databricks" ], "subject_claim": "sub" } }'
Databricks 계정 API
다음은 계정 페더레이션 정책을 만들기 위한 Databricks REST API 호출 예제입니다.
curl --request POST \
--header "Authorization: Bearer $TOKEN" \
"https://accounts.cloud.databricks.com/api/2.0/accounts/${ACCOUNT_ID}/federationPolicies" \
--data '{
"oidc_policy": {
"issuer": "https://idp.mycompany.com/oidc",
"audiences": [
"databricks"
],
"subject_claim": "sub"
}
}'
사용자가 Databricks와 교환할 토큰을 생성하도록 ID 공급자를 구성해야 할 수 있습니다. 지침은 ID 공급자에 대한 설명서를 참조하세요.
계정 페더레이션 정책 예제
페더레이션 정책 | 예제 일치하는 토큰 |
---|---|
issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"] |
{ "iss": "https://idp.mycompany.com/oidc", "aud": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "sub": "username@mycompany.com" } |
issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"] subject_claim: "preferred_username" |
{ "iss": "https://idp.mycompany.com/oidc", "aud": ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "other-audience"], "preferred_username": "username@mycompany.com", "sub": "some-other-ignored-value" } |
issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"] jwks_json: {"keys":[{"kty":"RSA","e":"AQAB","use":"sig", "kid":"<key-id>","alg":"RS256", "n":"uPUViFv..."}]} |
{ "iss": "https://idp.mycompany.com/oidc", "aud": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "sub": "username@mycompany.com" } (signature verified using public key in policy) |
issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"] jwks_json: {"keys":[{"kty":"RSA","e":"AQAB","use":"sig", "kid":"<key-id>","alg":"RS256", "n":"uPUViFv..."}]} |
{ "iss": "https://idp.mycompany.com/oidc", "aud": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "sub": "username@mycompany.com" } (signature verified using public key in policy) |
워크로드 ID 페더레이션
워크로드 ID 페더레이션을 사용하면 Azure Databricks 외부에서 실행되는 자동화된 워크로드가 Databricks 비밀 없이 Databricks API에 액세스할 수 있습니다. 계정 관리자는 서비스 주체 페더레이션 정책을 사용하여 워크로드 ID 페더레이션을 구성할 수 있습니다.
서비스 주체 페더레이션 정책은 Azure Databricks 계정의 서비스 주체와 연결되며 다음을 지정합니다.
- 서비스 주체가 인증할 수 있는 ID 공급자(또는 발급자)입니다.
- Databricks 서비스 주체로 인증할 수 있는 워크로드 ID(또는 주체)입니다.
서비스 주체 페더레이션 정책을 구성하려면 다음을 제공합니다.
워크로드 ID 토큰의 클레임에 지정된 필수 토큰
iss
. 발급자는 워크로드 ID 공급자를 식별하는 HTTPS URL입니다.필수 토큰
sub
입니다. 주체는 워크로드 런타임 환경에서 워크로드를 고유하게 식별합니다.허용된 토큰은 워크로드 ID 토큰의 클레임에 지정된 대상 그룹
aud
. 대상 그룹은 토큰의 받는 사람을 나타냅니다. 토큰의 대상이 정책에서 하나 이상의 대상과 일치하는 한 토큰은 일치 항목으로 간주됩니다. 지정되지 않은 경우 기본값은 Azure Databricks 계정 ID입니다.필요에 따라 JWKS(JSON 웹 키 집합) 형식으로 워크로드 ID 토큰의 서명의 유효성을 검사하는 데 사용되는 공개 키입니다. 지정되지 않은 경우(권장) Azure Databricks는 발급자의 잘 알려진 엔드포인트에서 공개 키를 자동으로 가져옵니다. Databricks는 퍼블릭 키를 검색하기 위해 발급자의 잘 알려진 엔드포인트를 사용하는 것이 좋습니다.
필요에 따라 주체 클레임이 있을 수 있습니다. 이는 토큰의 워크로드 ID(또는 주체)를 포함하는 토큰 클레임을 나타냅니다. 지정되지 않은 경우 기본값은
sub
. Databricks는 워크로드 ID 페더레이션에 대한 기본sub
클레임을 사용하는 것이 좋습니다.sub
이외의 클레임은sub
클레임이 적절하거나 안정적인 주체 식별자가 아닌 드문 경우에만 사용해야 합니다. 자세한 내용은 아래 예제 서비스 주체 페더레이션 정책을 참조하세요.메모
페더레이션 정책에서 JWKS를 지정하지 않는 경우(권장) ID 공급자는
{issuer-url}/.well-known/openid-configuration
OpenID 공급자 메타데이터를 제공해야 합니다. OpenID 공급자 메타데이터에는 토큰 서명을 확인하는 데 사용되는 공개 키의 위치를 지정하는jwks_uri
포함되어야 합니다.
다음은 Github Actions 워크로드에 대한 서비스 주체 페더레이션 정책의 예입니다.
issuer: "https://token.actions.githubusercontent.com"
audiences: ["https://github.com/my-github-org"]
subject: "repo:my-github-org/my-repo:environment:prod"
다음 예제 JWT 본문은 위의 정책과 일치하며 Azure Databricks에 인증하는 데 사용할 수 있습니다.
{
"iss": "https://token.actions.githubusercontent.com",
"aud": "https://github.com/my-github-org",
"sub": "repo:my-github-org/my-repo:environment:prod"
}
서비스 주체 페더레이션 정책 구성
계정 관리자는 Databricks CLI(버전 0.239.0 이상) 또는 Databricks API를 사용하여 서비스 주체 페더레이션 정책을 구성할 수 있습니다. Databricks 서비스 주체당 최대 5개의 서비스 주체 페더레이션 정책을 만들 수 있습니다.
Databricks CLI
최신 버전의 Databricks CLI를 설치하거나 업데이트합니다.
계정 관리자로서 CLI를 사용하여 Databricks 계정에 인증합니다. ACCOUNT_CONSOLE_URL(예:https://accounts.cloud.databricks.com) 및 Databricks ACCOUNT_ID 지정합니다.
databricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
서비스 주체 애플리케이션 ID(예:
3659993829438643
)를 지정하여 서비스 주체 페더레이션 정책을 만듭니다. 다음은 Github Actions 워크로드의 예입니다.databricks account service-principal-federation-policy create ${SERVICE_PRINCIPAL_ID} --json \ '{ "oidc_policy": { "issuer": "https://token.actions.githubusercontent.com", "audiences": [ "https://github.com/my-github-org" ], "subject": "repo:my-github-org/my-repo:environment:prod" } }'
Databricks 계정 API
다음은 Github Actions 워크로드에 대한 정책을 만들기 위한 Databricks REST API 호출 예제입니다.
curl --request POST \
--header "Authorization: Bearer $TOKEN" \
"https://accounts.cloud.databricks.com/api/2.0/accounts/${ACCOUNT_ID}/servicePrincipals/${SERVICE_PRINCIPAL_ID}/federationPolicies" \
--data '{
"oidc_policy": {
"issuer": "https://token.actions.githubusercontent.com",
"audiences": [
"https://github.com/my-github-org"
],
"subject": "repo:my-github-org/my-repo:environment:prod"
}
}'
예제 Databricks 계정 및 서비스 주체 페더레이션 정책
도구 | 페더레이션 정책 | 예제 일치하는 토큰 |
---|---|---|
GitHub Actions | issuer: "https://token.actions.githubusercontent.com" audiences: ["https://github.com/<github-org>"] subject: "repo:<github-org>/<repo>:environment:prod" |
{ "iss": "https://token.actions.githubusercontent.com", "aud": "https://github.com/<github-org>", "sub": "repo:<github-org>/<repo>:environment:prod" } |
Kubernetes | issuer: "https://kubernetes.default.svc" audiences: ["https://kubernetes.default.svc"] subject: "system:serviceaccount:namespace:podname" jwks json: {"keys":[{"kty":"rsa","e":"AQAB","use":"sig", "kid":"<key-id>","alg":"RS256","n":"uPUViFv..."}]} |
{ "iss": "https://kubernetes.default.svc", "aud": ["https://kubernetes.default.svc"], "sub": "system:serviceaccount:namespace:podname" } |
Azure DevOps | issuer: "https://vstoken.dev.azure.com/<org_id>" audiences: ["api://AzureADTokenExchange"] subject: "sc://my-org/my-project/my-connection" |
{ "iss": "https://vstoken.dev.azure.com/<org_id>", "aud": "api://AzureADTokenExchange", "sub": "sc://my-org/my-project/my-connection" } |
GitLab | issuer: "https://gitlab.example.com" audiences: ["https://gitlab.example.com"] subject: "project_path:my-group/my-project:..." |
{ "iss": "https://gitlab.example.com", "aud": "https://gitlab.example.com", "sub": "project_path:my-group/my-project:..." } |
CircleCI | issuer: "https://oidc.circleci.com/org/<org_id>" audiences: ["<org_id>"] subject: "7cc1d11b-46c8-4eb2-9482-4c56a910c7ce" subject_claim: "oidc.circleci.com/project-id" |
{ "iss": "https://oidc.circleci.com/org/<org_id>", "aud": "<org_id>", "oidc.circleci.com/project-id": "7cc1d11b-46c8-4eb2-9482-4c56a910c7ce" } |
계정에 대한 페더레이션 정책을 구성한 후 ID 공급자의 JWT를 사용하여 Databricks API에 액세스할 수 있습니다. 이렇게 하려면 먼저 ID 공급자의 JWT 토큰을 Databricks OAuth 토큰으로 교환한 다음 API 호출의 Bearer:
필드에서 Databricks OAuth 토큰을 사용하여 액세스 권한을 얻고 호출을 완료합니다. 토큰은 RS256 또는 ES256 알고리즘을 사용하여 서명된 유효한 JWT여야 합니다.
이 프로세스에 대한 지침은 ID 공급자 토큰을 사용하여 Databricks인증하는 방법을 참조하세요.
리소스
- Databricks 클라이언트 통합 인증
- OAuth 사용하여 사용자 계정으로 Azure Databricks 리소스에 대한 대화형 액세스 권한 부여
- OAuth 사용하여 서비스 주체를 사용하여 Azure Databricks 리소스에 대한 무인 액세스 권한 부여