PKINIT 인증을 사용한 Microsoft SQL Server 접근
Teleport v18.9Teleport는 Teleport Database Service를 통해 Microsoft SQL Server에 대한 보안 접근을 제공할 수 있습니다. Teleport Database Service는 SQL Server 데이터베이스와 동일한 Active Directory 도메인에 가입하고 Kerberos 프로토콜을 사용하여 SQL Server와 인증을 수행합니다.
Teleport는 Teleport Database Service를 통해 Microsoft SQL Server에 대한 보안 접근을 제공할 수 있습니다. 이를 통해 Teleport의 RBAC를 사용한 세분화된 접근 제어가 가능합니다.
이 가이드에서는 다음을 수행합니다:
- Microsoft SQL Server 데이터베이스를 구성합니다 with PKINIT authentication.
- 데이터베이스를 Teleport 클러스터에 추가합니다.
- Teleport를 통해 데이터베이스에 연결합니다.
작동 방식#
Teleport Database Service는 SQL Server 데이터베이스와 동일한 Active Directory 도메인에 가입하고 Kerberos 프로토콜을 사용하여 SQL Server와 인증을 수행합니다. Active Directory 도메인은 Teleport 인증 기관을 신뢰하도록 구성됩니다. 사용자가 Teleport를 통해 SQL Server에 연결하면, Database Service는 PKINIT을 사용하여 Active Directory에서 티켓 부여 티켓(ticket-granting ticket)을 획득합니다. 인증 후, Teleport Database Service는 사용자 트래픽을 데이터베이스로 전달합니다.


이 가이드에서는 셀프 호스팅 Active Directory 인증을 사용하는 SQL Server에 초점을 맞춥니다.
사전 요구 사항#
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.
-
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다.
tctlandtshclients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의/v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다.teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:$ TELEPORT_DOMAIN=teleport.example.com:443 $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
사용 중인 플랫폼에 대한 지침에 따라
tctlandtshclients를 설치합니다:
-
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
보장할 수 없습니다.
Windows - Powershell
```code
$ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
# Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
# NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
# Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
```
Linux
Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다. RPM/DEB
패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
[설치 페이지](../installation/installation.mdx)를 참조하세요.
```code
$ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ cd teleport
$ sudo ./install
# Teleport binaries have been copied to /usr/local/bin
```
-
Active Directory 인증이 활성화된 SQL Server 데이터베이스.
-
SAN(Subject Alternative Names)을 사용하는 인증서로 구성된 SQL Server 네트워크 리스너.
-
데이터베이스와 동일한 Active Directory 도메인에 가입된 Windows 머신.
-
Active Directory 설치에 대한 네트워크 접근 권한과 PKINIT 확장이 설치된
kinit명령어를 갖춘 Linux 노드:$ sudo apt-get update $ sudo apt-get -y install krb5-user krb5-pkinit$ sudo yum -y update $ sudo yum -y install krb5-workstation krb5-pkinitTeleport cluster에 연결할 수 있는지 확인하려면
tsh login으로 로그인한 다음, 현재 자격 증명으로tctl명령을 실행할 수 있는지 확인합니다.예를 들어,
teleport.example.com에 cluster 내 Teleport Proxy Service의 도메인 이름을,email@example.com에 Teleport 사용자 이름을 지정하여 다음 명령을 실행합니다:$ tsh login --proxy=teleport.example.com --user=email@example.com $ tctl status # Cluster (=teleport.url=) # Version (=teleport.version=) # CA pin (=presets.ca_pin=)cluster에 연결하여
tctl status명령을 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 이후의tctl명령을 실행할 수 있습니다. 자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를 호스팅하는 컴퓨터에서tctl명령을 실행할 수도 있습니다.Step 1/7. Teleport 사용자 생성#
Tip기존 사용자를 수정하여 Database Service 접근 권한을 부여하려면 Database Access Controls를 참조하십시오.
Teleport Community Edition
내장
access역할을 가진 로컬 Teleport 사용자를 생성합니다:$ tctl users add \ --roles=access \ --db-users="*" \ --db-names="*" \ aliceTeleport Enterprise/Enterprise Cloud
내장
access및requester역할을 가진 로컬 Teleport 사용자를 생성합니다:$ tctl users add \ --roles=access,requester \ --db-users="*" \ --db-names="*" \ aliceFlag 설명 --roles사용자에게 할당할 역할 목록입니다. 내장 access역할은 Teleport에 등록된 모든 데이터베이스 서버에 연결할 수 있게 합니다.--db-users사용자가 데이터베이스에 연결할 때 사용할 수 있는 데이터베이스 사용자명 목록입니다. 와일드카드는 모든 사용자를 허용합니다. --db-names사용자가 데이터베이스 서버 내에서 연결할 수 있는 논리적 데이터베이스(즉, 스키마) 목록입니다. 와일드카드는 모든 데이터베이스를 허용합니다. Warning데이터베이스 이름은 PostgreSQL, MongoDB, Cloud Spanner 데이터베이스에서만 적용됩니다.
데이터베이스 접근 제어 및 접근 제한 방법에 대한 자세한 정보는 RBAC 문서를 참조하십시오.
Step 2/7. Teleport 연결을 허용하도록 GPO 구성#
Teleport 데이터베이스 세션을 허용하도록 GPO를 구성해야 합니다. 여기에는 컴퓨터가 Teleport의 CA를 신뢰하도록 지정하는 것과 인증서 기반 스마트카드 인증을 허용하는 것이 포함됩니다.
Teleport CA 및 CRL 내보내기#
Database CA RotationTeleport의 데이터베이스 인증 기관을 교체(rotation)하는 경우 이 단계를 반복해야 합니다.
-
다음을 실행하여 Teleport 데이터베이스 CA 인증서를 가져옵니다.
$ tctl auth export --type=db-client-der > db-ca.cer -
다음을 실행하여 Teleport 데이터베이스 CRL을 가져옵니다.
$ tctl auth crl --type=db_client > db-ca.crlHSM을 사용하는 경우, 내보내야 할 CRL이 여러 개 있습니다. 다음을 실행하여 수행할 수 있습니다.
$ tctl auth crl --type=db_client --out=<file_prefix> -
db-ca.cer및db-ca.crl파일을 그룹 정책을 관리할 수 있는 Windows 머신으로 전송합니다.
GPO 생성 및 Teleport CA 가져오기#
Domain Wide Policy이 가이드에서는 지금 생성할 GPO를 전체 AD 도메인에 적용합니다. AD 도메인 내 컴퓨터의 일부만 Teleport를 통해 접근 가능하도록 하려면, 해당 컴퓨터만 포함된 OU에 GPO를 적용해야 합니다.
-
Teleport DB Access라는 이름의 GPO를 생성합니다.$GPOName="Teleport DB Access" New-GPO -Name $GPOName | New-GPLink -Target $((Get-ADDomain).DistinguishedName) -
Group Policy Management프로그램을 열고, 왼쪽 패널에서$FOREST > Domains > $DOMAIN > Group Policy Objects로 이동합니다. -
방금 만든 GPO(
Teleport DB Access)를 마우스 오른쪽 버튼으로 클릭하고Edit...를 선택합니다. -
그룹 정책 편집기에서 다음을 선택합니다.
Computer Configuration > Policies > Windows Settings > Security Settings > Public Key Policies -
Trusted Root Certification Authorities를 마우스 오른쪽 버튼으로 클릭하고Import를 선택합니다. -
마법사를 진행하면서 CA 파일(
db-ca.cer)을 선택합니다.

스마트카드 서비스 활성화#
Teleport는 스마트카드를 에뮬레이션하여 인증서 기반 인증을 수행합니다.
-
계속해서
Teleport DB Access를 편집하면서 다음을 선택합니다.Computer Configuration > Policies > Windows Settings > Security Settings > System Services -
Smart Card를 더블 클릭하고,Define this policy setting을 선택한 후Automatic으로 전환한 다음OK를 클릭합니다.
gpupdate.exeGPO를 수정하게 되며, GPO 수정 사항이 모든 호스트에 전파되기까지 시간이 걸리는 경우가 있습니다. PowerShell 프롬프트를 열고
gpupdate.exe /force를 실행하면 현재 호스트에서 즉시 변경 사항을 적용할 수 있습니다 (다만 변경 사항이 도메인 내 다른 머신에 전파되기까지는 여전히 시간이 걸릴 수 있습니다).Teleport CA 게시#
이 단계는 도메인 컨트롤러가 Teleport CA를 신뢰하도록 하여, Teleport를 통한 스마트카드 로그인이 성공하도록 만듭니다.
도메인에 가입되어 있고
Domain Administrators그룹에 속한 계정으로 로그인한 머신에서, PowerShell 프롬프트로 아래 두 명령을 실행하여 Teleport CA를 Active Directory 도메인에 게시합니다(위에서 복사한 내보낸 Teleportdb-ca.cer파일의 경로를 사용).certutil -dspublish –f RootCA certutil -dspublish -f NTAuthCATeleport CRL 게시#
동일한 머신에서, PowerShell 프롬프트로 아래 명령을 실행하여 Teleport CRL을 Active Directory 도메인에 게시합니다(위에서 복사한 내보낸
db-ca.crl파일의 경로를 사용).certutil -dspublish -f TeleportDBHSM을 사용하는 경우, CRL 내보내기 끝에 출력된 명령을 실행합니다. 이 명령은 다음과 같은 형태입니다.
certutil -dspublish -f TeleportDBTip인증서가 전파될 때까지 기다리지 않으려면, CA와 CRL을 가져온 후 다음 명령으로 LDAP에서 CA 검색을 강제로 실행할 수 있습니다.
certutil -pulseStep 3/7. LDAP CA 인증서 내보내기#
Teleport는 사용자를 인증하기 위해 LDAPS를 사용하며, 이를 위해서는 데이터베이스 구성에서 LDAP CA 인증서를 지정해야 합니다. 초기 SSL 연결 중에 서버가 보내는 인증서를 Teleport가 신뢰하도록 하려면, AD에서 인증서를 내보내야 합니다. Windows 인스턴스에서 다음 PowerShell 스크립트를 실행하여 인증서를 내보낼 수 있습니다.
$WindowsDERFile = $env:TEMP + "\windows.der" $WindowsPEMFile = $env:TEMP + "\windows.pem" certutil "-ca.cert" $WindowsDERFile certutil -encode $WindowsDERFile $WindowsPEMFile $CA_CERT_PEM = Get-Content -Path $WindowsPEMFile Write-Output $CA_CERT_PEM Remove-Item $WindowsDERFile -Recurse Remove-Item $WindowsPEMFile -Recurse이 스크립트는 LDAP CA 콘텐츠를 PEM 형식으로 터미널에 출력하며, 여기서 이를 복사하여 데이터베이스 구성에 사용할 수 있습니다.
Step 4/7. Teleport Database Service 설정#
Database Service가 Teleport 클러스터에 조인하려면 유효한 조인 토큰이 필요합니다. 다음
tctl명령을 실행하고 Database Service를 실행할 서버에서 토큰 출력을/tmp/token에 저장합니다:$ tctl tokens add --type=db --format=text (=presets.tokens.first=)Teleport Database Service를 실행할 호스트에 Teleport를 설치합니다.
Linux 서버에 Teleport Agent를 설치하려면:
권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.
-
teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오. -
클러스터의 설치 스크립트를 실행하십시오:
$ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash
조인 토큰을 Database Service를 실행할 인스턴스의 파일로 복사한 다음, 아래 database 섹션의 필드를 적절히 교체하여 다음 구성을 사용합니다.
uri: 포트를 포함한 서버 주소.domain: SQL Server가 가입된 Active Directory 도메인(Kerberos 렐름) DNS/주소.spn: Kerberos 티켓을 가져오기 위한 SQL Server의 서비스 프린시펄 이름(SPN).kdc_host_name: LDAP CA를 제공하는 도메인 컨트롤러의 SPN.ldap_cert: 이전에 내보낸 LDAP CA의 콘텐츠.ldap_service_account_name: Teleport가 사용자 SID를 조회하기 위해 LDAP에 쿼리할 때 사용하는 서비스 계정 이름.ldap_service_account_sid: 지정된ldap_service_account_name에 해당하는 SID.
LDAP service accountTeleport는 Teleport CA로 발급된 x509 인증서를 사용하여
ldap_service_account_name사용자명으로 LDAP에 인증을 시도합니다. 앞선 단계("Teleport CA 게시")를 통해 LDAP은 이 인증서를 신뢰해야 합니다.최소 권한을 가진 서비스 계정 사용을 권장합니다. 매핑을 수행하기 위해, Teleport는
objectSid,sAMAccountName,sAMAccountType속성에 대한 접근이 필요합니다./etc/teleport.yaml에 Teleport 구성 파일을 구성합니다.version: v3 teleport: auth_token: /tmp/token proxy_server: teleport.example.com:443 auth_service: enabled: false ssh_service: enabled: false proxy_service: enabled: false db_service: enabled: true databases: - name: my-sqlserver protocol: sqlserver uri: SQL-SERVER-INSTANCE.ad.teleport.dev:1433 ad: domain: ad.teleport.dev spn: MSSQLSvc/SQL-SERVER-INSTANCE.ad.teleport.dev:1433 kdc_host_name: DOMAIN-CONTROLLER.ad.teleport.dev ldap_cert: | -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- ldap_service_account_name: 'DEV\svc-teleport' ldap_service_account_sid: "S-1-5-21-1111111111-2222222222-3333333333-4444"TipAD에 가입된 Windows 머신의 Active Directory Users and Computers 대화 상자에서 Attribute Editor를 통해 SPN을 조회할 수 있습니다.
Attribute Editor 탭이 보이지 않는다면, "View > Advanced Features" 토글이 활성화되어 있는지 확인하세요.
Step 5/7. Database Service 시작#
환경에서 Teleport Database Service를 시작합니다.
systemd 서비스를 생성하여 호스트가 부팅될 때 the Database Service이 자동으로 시작되도록 구성합니다. 지침은 the Database Service을 어떻게 설치했는지에 따라 다릅니다.
Package Manager
the Database Service을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
$ sudo systemctl enable teleport $ sudo systemctl start teleportTAR Archive
the Database Service을 실행할 호스트에서 Teleport용 systemd 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
$ sudo teleport install systemd -o /etc/systemd/system/teleport.service $ sudo systemctl enable teleport $ sudo systemctl start teleportsystemctl status teleport로 the Database Service의 상태를 확인하고journalctl -fu teleport로 로그를 볼 수 있습니다.Step 6/7. SQL Server AD 사용자 생성#
NoteSQL Server에 이미 Active Directory 로그인이 있는 경우 이 단계를 건너뛸 수 있습니다.
관리자 계정(예:
sa)으로 SQL Server에 연결하여 Active Directory 인증을 사용할 로그인을 생성합니다.master> CREATE LOGIN [EXAMPLE\alice] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english];Step 7/7. 연결#
Teleport 클러스터에 로그인합니다. SQL Server 데이터베이스가 사용 가능한 데이터베이스 목록에 나타나야 합니다.
$ tsh login --proxy=teleport.example.com --user=alice $ tsh db ls # Name Description Labels # --------- ------------------- ------- # sqlserver env=dev$ tsh login --proxy=mytenant.teleport.sh --user=alice $ tsh db ls # Name Description Labels # --------- ------------------- ------- # sqlserver env=dev데이터베이스의 자격 증명을 가져와 연결하려면:
$ tsh db connect --db-user=teleport sqlserverNote연결하려면
sqlcmd또는mssql-cli명령줄 클라이언트 중 하나가PATH에서 사용 가능해야 합니다.tsh는 먼저sqlcmd실행을 시도하고,PATH에 없으면mssql-cli를 실행합니다.시스템에 두 명령줄 클라이언트가 모두 없는 경우 다음 명령을 실행하여 SQL Server 클라이언트로 연결할 수 있는 로컬 프록시 서버를 시작할 수 있습니다:
$ tsh proxy db --db-user=teleport --tunnel sqlserverDB GUI 클라이언트를 로컬 프록시에 연결하는 방법은 Database GUI Clients 가이드를 참조하세요.
데이터베이스에서 로그아웃하고 자격 증명을 제거하려면:
$ tsh db logout sqlserver문제 해결#
Teleport CA 및 CRL이 올바르게 가져와지지 않음#
데이터베이스에 연결할 때
Error message: authentication failed오류가 발생하고 Teleport Database Service 로그에Failed to authenticate with KDC: kinit: Client not trusted while getting initial credentials오류 메시지가 표시됩니다. 이는 Teleport 데이터베이스 CA가 올바르게 가져와지지 않았거나 아직 전파되지 않은 경우 발생합니다.certutil -pulse를 실행하여 전파를 강제로 실행한 후 데이터베이스에 다시 연결을 시도할 수 있습니다.잘못된 KDC 호스트명#
데이터베이스에 연결할 때
Error message: authentication failed오류가 발생하고 Teleport Database Service 로그에Failed to authenticate with KDC: Password for user@AD.TELEPORT.DEV: \nkinit: Cannot read password while getting initial credentials오류 항목이 있다면, 이는 KDC 호스트명이 잘못되었음을 의미합니다. 도메인 컨트롤러의 SPN이 올바르게 설정되어 있는지 확인하고 데이터베이스 구성의kdc_host_name필드 값을 업데이트하세요.SID 누락으로 인한 PKINIT 인증 실패#
PKINIT 인증이 실패하고 Teleport Database Service 로그에 사용자 SID 누락 또는 LDAP 쿼리 실패와 관련된 오류가 표시되는 경우, 데이터베이스 구성에서
ldap_service_account_name및ldap_service_account_sid필드가 올바르게 설정되어 있는지 확인하세요.ldap_cert필드의 인증서가 유효하지 않아 발생하는 오류가 없는지 확인하세요.서비스 계정이 존재하고, 이름과 SID가 올바르며, 지정된 속성에 대한 접근 권한이 있는지 확인하세요.
Teleport가 데이터베이스 CA를 검증할 수 없음#
데이터베이스에 Teleport가 알지 못하는 CA가 있는 경우, 연결 시 다음과 같은 오류가 반환됩니다:
Error message: TLS Handshake failed: x509: certificate signed by unknown authority (possibly because of "x509: invalid signature: parent certificate cannot sign this kind of certificate" while trying to verify candidate authority certificate "SSL_Self_Signed_Fallback").이를 해결하려면, Teleport Database Service 인스턴스에 다음 구성을 추가할 수 있습니다.
... db_service: databases: - name: sqlserver protocol: sqlserver + tls: + # Point it to your Database CA PEM certificate. + ca_cert_file: "rdsca.pem" + # If your database certificate has an empty CN field, you must change + # the TLS mode to only verify the CA. + mode: verify-ca ad: ...데이터베이스 CA를 확보할 수 없는 경우,
tls.mode: "insecure"구성을 제공하여 TLS 검증을 건너뛸 수 있습니다. 다만 프로덕션 환경에서는 TLS 검증을 건너뛰지 않는 것을 권장합니다.다음 단계#
-
특정 사용자 및 데이터베이스에 대한 접근을 제한하는 방법을 알아보십시오.
-
고가용성 (HA) 가이드를 확인하십시오.
-
YAML 구성 레퍼런스를 살펴보십시오.
-
전체 CLI 레퍼런스를 참조하십시오.
추가 자료#
-