아우라베이스 로고
아우라베이스문서
문서›가이드›User impersonation

사용자 가장

비밀번호를 묻지 않고 사용자를 대신하여 지원 및 디버깅을 수행합니다. 10분으로 제한되며 보안 로그에서 엄격하게 감사됩니다.

5분 읽기·레벨 중급·2026. 10. 26.에 개정됨
이 번역 이후 영어 소스가 변경되었습니다. 일부 정보는 최신 정보가 아닐 수 있습니다.
이 페이지는 자동으로 번역되었습니다. 영어 버전은 권위가 있습니다.
#
개요

명의 도용이란 무엇입니까?

사용자 가장을 사용하면 관리자나 지원 엔지니어가 특정 사용자 역할을 하는 단기 전달자 토큰을 생성할 수 있습니다. 이를 통해 자격 증명을 요청하지 않고도 고객 버그를 재현하고, RLS 정책 권한을 확인하거나 데이터 문제를 해결할 수 있습니다.

Aurabase의 가장은 세 가지 기본 보안 원칙을 보장합니다.

  1. 짧은 수명: 가장 토큰은 1~600초(최대 10분, 기본값 300초) 사이에서 유효합니다. 새로 고침 토큰은 포함되지 않습니다.
  2. 명시적 행위자 속성: 발급된 액세스 토큰은 누가 세션을 시작했는지 나타내는 표준 RFC 8693 act 클레임을 전달합니다.
  3. 발행 전 감사: 토큰이 생성되기 전에 행위자, 이유, 기간 및 대상 사용자와 함께 작업이 auth_audit_log에 기록됩니다. 로그 삽입에 실패하면 토큰이 발급되지 않습니다.
#
토큰 청구

RFC 8693 행위 청구 구조

가장 토큰은 프로젝트의 활성 ES256 키로 서명되며 추가 act(행위자) 개체와 함께 표준 사용자 액세스 토큰 형식을 준수합니다.

디코딩된 JWT 페이로드json
{
  "sub": "b2f4c3a1-7788-4e89-a5c2-98e3b1234567",
  "project_id": "ecd48fb4-4fe6-48d0-a8cd-f0641ceb8b1c",
  "role": "authenticated",
  "email": "user@example.com",
  "act": {
    "sub": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  },
  "exp": 1730000300,
  "iat": 1730000000,
  "iss": "https://auth-lab-n7qn5stb.localhost:8080/v1/auth"
}
  • sub: 가장되는 사용자의 ID입니다. Postgres RLS (auth.uid())는 이 값으로 평가됩니다.
  • act.sub: 토큰을 생성한 운영자의 ID입니다(예: 콘솔 사용자 ID 또는 service_role).
#
HTTP API

관리 엔드포인트

가장을 수행하려면 service_role 키 또는 admin 역할을 가진 운영자를 통한 관리자 인증이 필요합니다.

Terminalbash
curl -X POST "$AURABASE_URL/v1/auth/admin/users/$TARGET_USER_ID/impersonate" \
  -H "apikey: $AURABASE_SERVICE_ROLE_KEY" \
  -H "Authorization: Bearer $AURABASE_SERVICE_ROLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "Investigating ticket #4812",
    "ttl_seconds": 300,
    "allow_privileged": false
  }'

요청 본문

필드유형필수설명
reason문자열선택 과목보안 로그에 근거가 기록되었습니다. 권한 있는 대상 계정(admin/owner)에 필요합니다.
ttl_seconds번호선택사항토큰 수명(초)(1~600, 기본값 300)
allow_privileged부울선택사항대상 사용자에게 admin 또는 owner 역할이 있는 경우 true로 설정해야 합니다.

응답(200 OK)

json
{
  "data": {
    "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6...",
    "token_type": "Bearer",
    "expires_in": 300,
    "act": {
      "sub": "service_role"
    },
    "user": {
      "id": "b2f4c3a1-7788-4e89-a5c2-98e3b1234567",
      "email": "user@example.com",
      "role": "authenticated"
    }
  }
}
#
SDK

TypeScript SDK

service_role 키로 구성된 Aurabase 클라이언트와 함께 authAdmin.impersonate()을 사용합니다.

admin-debug.tstypescript
import { createClient } from '@aurabase/aurabase-js'

const aura = createClient(process.env.AURABASE_URL!, process.env.AURABASE_SERVICE_ROLE_KEY!)

// 5분 동안 가장 토큰을 생성합니다.
const { data, error } = await aura.authAdmin.impersonate('b2f4c3a1-7788-4e89-a5c2-98e3b1234567', {
  reason: 'Reproducing issue reported on dashboard',
  ttlSeconds: 300,
})

if (error) {
  console.error('Failed to impersonate:', error.message)
} else {
  console.log('Impersonation token:', data.access_token)
  console.log('Token expires in:', data.expires_in, 'seconds')

  // 이 사용자로 쿼리를 실행하려면 임시 사용자 클라이언트를 만듭니다.
  const userClient = createClient(process.env.AURABASE_URL!, process.env.AURABASE_ANON_KEY!, {
    accessToken: data.access_token,
  })

  // 이제 대상 사용자의 RLS 컨텍스트에서 쿼리가 실행됩니다.
  const { data: posts } = await userClient.from('posts').select('*')
}
#
보안

권한 있는 계정 및 감사 로그

특권 계정 보호

관리 역할(예: role = 'admin', role = 'owner'또는 'admin'을 포함하는 app_metadata.roles)을 소유한 대상 계정은 높은 가치의 대상을 나타냅니다. 실수로 권한 상승을 방지하려면 다음을 수행하세요.

  1. allow_privileged: true을 명시적으로 전달해야 합니다.
  2. 비어 있지 않은 reason 문자열을 제공해야 합니다.
  3. 두 확인 중 하나라도 실패하면 백엔드는 403 Forbidden를 사용하여 요청을 거부합니다.

보안 감사 로그

모든 가장 이벤트는 테넌트의 auth_audit_log 테이블에 삽입됩니다.

  • 작업: admin_impersonation
  • 사용자 ID: 대상 사용자의 ID
  • 메타데이터: { "actor": "...", "reason": "...", "ttl_seconds": 300, "privileged": false }을 포함하는 JSON 개체

이 추적은 Studio › 인증 › 감사 로그에서 볼 수 있으며 데이터베이스 드레이닝을 통해 SIEM 도구로 전달할 수 있습니다.

마지막 업데이트 · 2026. 10. 26.