클라이언트 자격 증명으로 AI 연결 인증
클라이언트 자격 증명으로 AI 연결 인증 (Authenticate AI Connections with Client Credentials)
OAuth2 보호 AI 앱 엔드포인트에, 매 요청 전에 Confident AI가 클라이언트 자격 증명 그랜트로 토큰을 가져오게 해 연결하는 방법을 설명하는 문서예요. 이 문서에서는 자격 증명 수집, Azure AD와 Auth0 구성, 핑 검증, 그리고 일반적 실패 원인을 다뤄요.
출처: 문서
본문
개요 (Overview)
이 가이드는 AI 앱이 OAuth2 보호 게이트웨이, Azure API 게이트웨이, Databricks serving 엔드포인트, Auth0 보호 API 등 뒤에 있는 팀을 위한 문서예요. 이런 엔드포인트는 정적 API 키를 받지 않고, 먼저 ID 제공자에서 가져와야 하는 단기 Bearer 토큰을 기대해요.
클라이언트 자격 증명(client credentials) 그랜트는 정확히 이 경우를 위한 머신 간 OAuth2 흐름이에요. 사람이 개입하지 않고, 애플리케이션 신원(client ID와 client secret)이 자격 증명을 access token과 교환해요. 이를 AI Connection에 구성하면, Confident AI가 ID 제공자에서 새 토큰을 가져와 엔드포인트로 보내는 모든 요청에 Authorization: Bearer ***로 붙여요.
클라이언트 자격 증명 그랜트를 구현하는 두 가지 인증 유형이 있어요:
- Azure AD — Microsoft Entra ID / Azure AD. Azure Databricks serving 엔드포인트를 포함해 Entra로 보호된 엔드포인트에 사용해요.
- Auth0 — Auth0의 OAuth2 클라이언트 자격 증명 흐름.
클라이언트 자격 증명은 사용자가 아니라 애플리케이션을 인증하므로, 사용자 이름이나 비밀번호가 없어요. 제공자가 사용자 계정에 대해서만 토큰을 발급한다면 Password(ROPC) 그랜트를 대신 사용할 수 있는데, 이는 대부분 폐기되었고 MFA / Conditional Access에서 깨져요. 서비스 엔드포인트에는 클라이언트 자격 증명을 선호해요.
구축하기 (Build It)
자격 증명 모으기
플랫폼을 만지기 전에 ID 제공자에서 다음을 수집해요. 정확한 이름은 Azure AD와 Auth0에서 다르지만 개념은 같아요:
| 필요한 것 | Azure AD | Auth0 |
|---|---|---|
| 애플리케이션 신원 | 앱 등록의 Client ID | Auth0 애플리케이션의 Client ID |
| 애플리케이션 시크릿 | 앱 등록의 Client Secret | Client Secret |
| 토큰을 얻을 곳 | Tenant ID (토큰 URL이 여기서 만들어짐) | Auth0 Domain |
| 접근하려는 것 | Scope (리소스 식별자 + /.default) |
Audience (API 식별자) |
Azure AD에서는 Tenant ID만 제공하면 돼요. Confident AI가 토큰 엔드포인트
https://login.microsoftonline.com/<tenantId>/oauth2/v2.0/token을 만들어 줘요. 어떤 필드에도 토큰 URL을 붙여 넣지 마세요. 가장 흔한 오류 원인인 scope 형식은 Azure AD 섹션을 참고해요.
Authentication 탭 열기
AI Connection에서 Authentication 탭을 열고 드롭다운에서 인증 유형을 골라요: Azure AD 또는 Auth0.
인증 유형 선택
클라이언트 자격 증명 필드 구성
Azure AD
Grant Type 토글을 Client Credentials(기본값)로 설정하고 다음을 채워요:
| 필드 | 값 |
|---|---|
| Tenant ID | Microsoft Entra tenant ID (GUID) |
| Client ID | 앱 등록의 Application (client) ID |
| Client Secret | 그 앱 등록에 생성된 클라이언트 시크릿 |
| Scope | 토큰을 받을 리소스에 /.default를 붙인 값 (예: api://<app-id>/.default) |
Username과 Password는 비워 두세요. Password(ROPC) 그랜트에만 적용돼요.
Auth0
Auth0의 클라이언트 자격 증명 흐름은 다음을 요구해요:
| 필드 | 값 |
|---|---|
| Auth0 Domain | Auth0 tenant 도메인 (예: your-tenant.auth0.com) |
| Audience | 이 토큰이 접근하도록 인가된 API 식별자 |
| Client ID | Auth0 애플리케이션의 client ID |
| Client Secret | Auth0 애플리케이션의 client secret |
(선택) 볼트에 시크릿 저장
플랫폼에 리터럴 Client Secret을 붙여 넣는 대신 Secrets Manager를 활성화하고 볼트(예: Azure Key Vault)의 시크릿 이름을 제공할 수 있어요. Confident AI가 런타임에 검색해요. 설정은 Authorization을 참고해요.
핑으로 검증
Ping을 클릭해 연결을 테스트해요. Confident AI가 토큰을 가져와 엔드포인트를 호출해요:
200은 토큰 교환이 성공했고 엔드포인트가 Bearer 토큰을 받았다는 뜻. ✅- 토큰 교환 오류(ID 제공자의
400)는 자격 증명이나 scope가 잘못된 것. 아래 문제 해결을 참고해요. - 엔드포인트의
401/403은 토큰은 발급됐지만 신원에 권한이 없는 것. 인증 흐름 문제가 아니라 RBAC / 인가 문제예요.
Azure AD와 Azure Databricks
가장 흔한 실패는 잘못된 scope예요. Azure AD v2.0 엔드포인트의 클라이언트 자격 증명 흐름은 scope가 /.default가 붙은 리소스 식별자여야 해요.
scope는 /.default로 끝나야 해요
Ping에서 다음 오류가 보이면:
AADSTS1002012: The provided value for scope ... is not valid. Client credential flows must have a scope value with /.default suffixed to the resource identifier (application ID URI).거의 항상 다음 중 하나를 의미해요:
- Scope에
/.default접미사가 없음.- Scope 필드에 토큰 URL이 붙여 넣어짐 (예:
https://login.microsoftonline.com/<tenant>/oauth2/v2.0/token). 그 값은 scope가 아니고, 안의 tenant GUID는 Tenant ID 필드에 들어가야 하며, Confident AI가 그것으로 토큰 URL을 만들어요.
Databricks serving 엔드포인트에 연결
Azure Databricks는 고정된 Entra 리소스라, scope는 모든 워크스페이스에서 같아요:
| 필드 | 값 |
|---|---|
| Tenant ID | Entra tenant GUID |
| Client ID | 서비스 주체의 Application (client) ID |
| Client Secret | 그 서비스 주체용 시크릿 |
| Scope | 7ff2314a6-3904-4as8-12at-gn036f619c0d/.default |
7ff2314a6-3904-4as8-12at-gn036f619c0d는 Azure Databricks 리소스의 전역적이고 잘 알려진 프로그래매틱 ID예요. 모든 워크스페이스에서 동일하므로, 워크스페이스 URL이나 자체 앱 ID로 바꾸지 마세요.
엔드포인트 URL을 serving 엔드포인트의 invocations 경로로 지정해요. 예:
https://adb-<workspace-id>.<n>.azuredatabricks.net/serving-endpoints/<endpoint-name>/invocations
토큰 이후: RBAC
성공적인 토큰 교환은 서비스 주체가 인증되었음을 증명할 뿐, 엔드포인트 접근을 허용하지는 않아요. Ping이 토큰을 성공적으로 반환했는데 엔드포인트가 403으로 응답하면, 서비스 주체를 Databricks 워크스페이스에 추가하고 serving 엔드포인트에 CAN_QUERY를 부여해야 해요. 이는 Databricks 쪽의 인가(RBAC) 단계로, 이 인증 구성과는 별개예요.
다음 단계
AI Connections
AI Connection의 엔드포인트, 페이로드, 출력 파싱을 구성해요.
Authorization
모든 인증 유형과 시크릿 매니저의 레퍼런스.