인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Azure의 SQL Server로 데이터베이스 접근
Teleport은 Teleport Database Service를 통해 Azure SQL Server에 대한 안전한 액세스를 제공할 수 있습니다. 이를 통해 Teleport의 RBAC를 통한 세부적인 액세스 제어가 가능합니다.
이 가이드에서는 다음을 수행합니다:
- Azure SQL Server 데이터베이스 Microsoft Entra ID 기반 인증을 사용하여를 구성합니다.
- 데이터베이스를 Teleport 클러스터에 추가합니다.
- Teleport를 통해 데이터베이스에 연결합니다.
작동 방식
Teleport 데이터베이스 서비스는 Azure 가상 머신에서 실행되며, Azure Active Directory에서 인증 토큰을 검색할 수 있는 권한을 가진 Azure 아이덴티티가 연결됩니다. 사용자가 Teleport로 SQL Server에 연결하면, Teleport 데이터베이스 서비스가 Azure AD와 인증한 후 인증 토큰을 사용하여 SQL Server에 연결합니다. 데이터베이스 서비스는 사용자 트래픽을 데이터베이스로 전달합니다.
전제 조건
Azure Active Directory 인증을 통한 Azure SQL Server의 데이터베이스 접근은 Teleport 11.0
부터 가능합니다.
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
- Azure에서 실행 중인 SQL Server.
- Azure 가상 인스턴스에서 실행 중인 Teleport 데이터베이스 서비스.
- 연결이 가능한지 확인하기 위해
tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결할 수 있고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 17.0.0-dev
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속tctl
명령어를 실행할 수 있습니다.
자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다.
1/8단계. Teleport 사용자 생성
Tip
기존 사용자를 수정하여 데이터베이스 서비스에 대한 액세스를 제공하려면 데이터베이스 액세스 제어를 참조하십시오.
내장된 access
역할을 가진 로컬 Teleport 사용자 생성:
tctl users add \ --roles=access \ --db-users="*" \ --db-names="*" \ alice
내장된 access
및 requester
역할을 가진 로컬 Teleport 사용자 생성:
tctl users add \ --roles=access,requester \ --db-users="*" \ --db-names="*" \ alice
Flag | Description |
---|---|
--roles | 사용자에게 할당할 역할 목록. 내장된 access 역할은 사용자가 Teleport에 등록된 모든 데이터베이스 서버에 연결할 수 있도록 합니다. |
--db-users | 사용자가 데이터베이스에 연결할 때 사용할 수 있는 데이터베이스 사용자 이름 목록. 와일드카드는 모든 사용자를 허용합니다. |
--db-names | 사용자가 데이터베이스 서버 내에서 연결할 수 있는 논리 데이터베이스(즉, 스키마) 목록. 와일드카드는 모든 데이터베이스를 허용합니다. |
Warning
데이터베이스 이름은 PostgreSQL, MongoDB 및 Cloud Spanner 데이터베이스에 대해서만 적용됩니다.
데이터베이스 액세스 제어 및 액세스를 제한하는 방법에 대한 자세한 정보는 RBAC 문서를 참조하십시오.
2/8단계. SQL Server Azure Active Directory 통합 활성화
이미 활성화되어 있다면, 다음 단계로 넘어갈 수 있습니다.
Azure Portal로 이동하여 데이터베이스 서버를 선택하고 Azure Active Directory 통합을 활성화할 데이터베이스를 선택합니다.
왼쪽 열에서 Azure Active Directory를 선택합니다.
관리자 설정을 선택하고 SQL Server에 관리자 로그인으로 추가할 계정을 선택합니다.
3/8단계. Teleport를 위한 IAM 권한 구성
Teleport 데이터베이스 서비스는 Azure IAM 권한이 필요합니다:
- SQL Server 인스턴스를 검색하고 등록합니다.
- 로그인에 사용되는 가상 머신 관리 아이덴티티를 가져옵니다.
Azure 서비스 주체 구성
Teleport는 다음 권한이 필요합니다:
- 리소스를 검색하기 위한
<resource-type>/read
권한은 보유하고 있는 리소스 유형에 대해서만 필요합니다. 예:Microsoft.Sql/managedInstances/read
. Microsoft.Compute/virtualMachines/read
.
다음은 Teleport가 Azure SQL Servers와 Azure SQL Managed Instances를 읽을 수 있도록 허용하는 샘플 역할 정의입니다:
{
"properties": {
"roleName": "SQLServerAutoDiscovery",
"description": "Teleport가 SQL Servers 및 SQL Managed Instances를 검색할 수 있도록 허용합니다.",
"assignableScopes": ["/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],
"permissions": [
{
"actions": [
"Microsoft.Sql/managedInstances/read",
"Microsoft.Sql/servers/read",
"Microsoft.Compute/virtualMachines/read"
],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
]
}
}
위의 assignableScopes
필드는 구독을 포함하고 있으며, 역할이 해당 구독 내의 모든 리소스 범위 또는 구독 범위 자체에 할당될 수 있도록 허용합니다. assignableScopes
를 더욱 제한하려면 리소스 그룹(/subscriptions/<subscription>/resourceGroups/<group>
) 또는 관리 그룹(/providers/Microsoft.Management/managementGroups/<group>
)을 대신 사용할 수 있습니다.
구독 페이지로 이동하여 구독을 선택합니다.
구독에서 **액세스 제어(IAM)**를 클릭하고 추가 > 사용자 지정 역할 추가를 선택합니다:

사용자 정의 역할 생성 페이지에서 JSON 탭을 클릭하고 편집을 클릭한 후 JSON 예제를 붙여넣고 assignableScopes
의 구독을 자신의 구독 ID로 교체합니다:
4/8단계. 가상 머신 아이덴티티 구성
Teleport Database Service 가상 머신의 아이덴티티 섹션에서 시스템 할당 아이덴티티를 활성화합니다. 이는 Teleport가 Azure API에 접근하는 데 사용됩니다.
Teleport에 권한을 부여하려면, 생성한 커스텀 역할이 가상 머신의 시스템 할당 아이덴티티에 할당되어야 합니다. 같은 페이지에서 Azure 역할 할당을 클릭한 다음 역할 할당 추가를 클릭합니다. 커스텀 역할을 선택하고 저장합니다.
Azure 역할 할당
역할 할당은 Teleport Database Service가 모든 매칭 데이터베이스를 발견할 수 있도록 충분히 높은 범위여야 합니다. Azure 범위 및 역할 할당 생성에 대한 자세한 내용은 필요한 범위 식별 을 참조하십시오.
로그인 아이덴티티
Teleport Database Service는 SQL Server 데이터베이스와 인증하기 위해 Azure AD의 액세스 토큰이 필요합니다.
이는 인증 토큰을 가져오기 위해 가상 머신에 연결된 관리 아이덴티티를 사용합니다.
사용자 할당 관리 아이덴티티를 새로 만들려면 Azure Portal에서 관리 아이덴티티 페이지로 이동하여 생성을 클릭합니다. 이름과 리소스 그룹을 선택하고 생성합니다:

다음으로 Teleport Database Service 가상 머신 인스턴스의 아이덴티티 섹션으로 이동하여 사용자 할당을 선택하고 방금 생성한 아이덴티티를 추가합니다:
5/8단계. SQL Server에서 관리 아이덴티티 로그인 활성화
Azure AD SQL Server 통합은 데이터베이스 레벨 인증(포함된 사용자)을 사용하므로, 접근하고자 하는 각 데이터베이스에 대해 아이덴티티에 대한 사용자를 생성해야 합니다.
아이덴티티에 대한 포함된 사용자를 생성하려면, SQL Server로 Activity Directory 관리자 계정으로 연결한 후 다음 쿼리를 실행합니다:
USE MyDatabase;
CREATE USER [sqlserver-identity] FROM EXTERNAL PROVIDER;
새로 생성된 사용자는 공용 역할에 연결되며, 이는 쿼리를 수행하기에 충분한 권한이 없을 수 있습니다. 사용자에게 개별 권한을 부여하거나 기존 역할에 할당하는 것을 고려하십시오. 예를 들어, 사용자를 db_datareader
역할의 구성원으로 추가합니다:
ALTER ROLE db_datareader ADD MEMBER [sqlserver-identity];
6/8단계. Database Service 구성 생성
Teleport Database Service를 실행할 호스트에 Teleport를 설치합니다:
Linux 서버에 Teleport 설치하기:
-
Teleport 에디션에 따라 edition를 다음 중 하나로 할당합니다:
에디션 값 Teleport Enterprise Cloud cloud
Teleport Enterprise (자가 호스팅) enterprise
Teleport Community Edition oss
-
설치할 Teleport 버전을 가져옵니다. 클러스터에서 자동 에이전트 업데이트가 활성화된 경우, 최신 Teleport 버전을 쿼리하여 업데이트된 내용과의 호환성을 확인합니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"그렇지 않으면, Teleport 클러스터의 버전을 가져옵니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')" -
Linux 서버에 Teleport를 설치합니다:
curl https://cdn.teleport.dev/install-v15.4.11.sh | bash -s ${TELEPORT_VERSION} edition설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 정의하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.
데이터베이스 서비스용 구성 파일을 /etc/teleport.yaml
에 생성합니다. --proxy
명령줄 옵션을 Teleport 클러스터의 주소로 설정하고, --azure-sqlserver-discovery
를 적절한 지역으로 설정합니다:
sudo teleport db configure create \ -o file \ --token=/tmp/token \ --proxy=teleport.example.com:443 \ --azure-sqlserver-discovery=eastus
이 명령은 eastus
지역에서 Azure SQL Server 자동 검색을 활성화한 Database Service 구성을 생성하고 /etc/teleport.yaml
위치에 배치합니다.
7/8단계. Teleport 데이터베이스 서비스 시작
호스트가 부팅될 때 Teleport 데이터베이스 서비스가 자동으로 시작되도록 systemd 서비스를 생성하여 구성합니다. 지침은 Teleport 데이터베이스 서비스를 설치한 방법에 따라 다릅니다.
Teleport 데이터베이스 서비스를 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
sudo systemctl enable teleportsudo systemctl start teleport
Teleport 데이터베이스 서비스를 실행할 호스트에서 Teleport의 systemd 서비스 구성을 만들고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
sudo teleport install systemd -o /etc/systemd/system/teleport.servicesudo systemctl enable teleportsudo systemctl start teleport
systemctl status teleport
로 Teleport 데이터베이스 서비스의 상태를 확인하고, journalctl -fu teleport
로 로그를 볼 수 있습니다.
팁
단일 Teleport 프로세스는 여러 가지 다른 서비스를 실행할 수 있습니다. 예를 들어, 여러 데이터베이스 서비스 에이전트와 SSH 서비스 또는 애플리케이션 서비스를 실행할 수 있습니다.
8/8단계. 연결
당신의 Teleport 클러스터에 로그인하십시오. 데이터베이스는 사용 가능한 데이터베이스 목록에 나타나야 합니다:
tsh login --proxy=teleport.example.com --user=alicetsh db lsName Description Allowed Users Labels Connect------------------ ---------------------------------- ------------- ------ -------sqlserver Azure SQL Server in westeurope [*] ...sqlserver-managed Azure Managed SQL Server in eastus [*] ...
데이터베이스에 대한 자격 증명을 가져오고 연결하려면:
tsh db connect --db-user=sqlserver-identity --db-name=master sqlserver
여기서 --db-user
는 관리되는 ID의 이름입니다.
Note
sqlcmd
또는 mssql-cli
명령줄 클라이언트가 PATH
에 있어야 연결할 수 있습니다. tsh
는 먼저 sqlcmd
를 실행하려고 시도하고, PATH
에 없으면 mssql-cli
를 실행합니다.
시스템에 명령줄 클라이언트가 모두 없는 경우, SQL Server 클라이언트로 연결할 수 있는 로컬 프록시 서버를 시작하는 다음 명령을 실행할 수 있습니다:
tsh proxy db --db-user=teleport --tunnel sqlserver
데이터베이스 액세스 GUI 클라이언트 가이드를 참조하여 DB GUI 클라이언트를 로컬 프록시에 연결하는 방법을 확인하세요.
문제 해결
아이덴티티를 찾을 수 없음
데이터베이스에 연결할 때 could not find identity "my-identity" attached to the instance
오류가 표시되면, 연결하려는 아이덴티티가 Teleport 데이터베이스 서비스 가상 머신에 연결되어 있지 않다는 의미입니다. Azure 포털 내 가상 머신 페이지로 이동하여 Teleport 인스턴스, Identity 섹션을 열고 User assigned를 선택하여 연결할 수 있는 모든 아이덴티티를 확인하십시오. 아이덴티티가 보이지 않으면 4단계를 확인하여 아이덴티티를 추가하는 방법을 참조하십시오.
사용자 로그인 실패
데이터베이스에 연결할 때 mssql: login error: Login failed for user '<token-identified principal>'
오류가 표시되면 관리되는 아이덴티티 로그인이 SQL 데이터베이스에 존재하지 않는다는 의미입니다. 6단계에 설명된 대로 사용자로 생성을 해야 합니다. 기억하세요: 연결하려는 모든 데이터베이스에서 사용자를 생성해야 합니다.
데이터베이스 연결 시 시간 초과
데이터베이스에 연결할 때 i/o timeout issue
오류가 발생하면, Teleport 데이터베이스 서비스가 Azure에 있는 데이터베이스에 접근할 수 있는지 확인하십시오.
데이터베이스가 공개된 경우, 방화벽 규칙을 만들지 않고 Azure 서비스에서 연결을 받을 수 있도록 활성화할 수 있습니다: 데이터베이스 페이지로 이동하여, Network 탭에서 페이지 하단의 Exceptions 섹션에서 "Allow Azure services and resources to access this server" 옵션을 체크하고 저장합니다.
데이터베이스가 공개가 아니고 프라이빗 엔드포인트를 사용하는 경우, 같은 VPC 내에 있는지 또는 Teleport VM VPC가 데이터베이스와 피어링되어 있는지 확인하십시오.
VM의 접근을 확인하려면 VM에서 다음을 수행할 수 있습니다:
netcat
사용:nc -v yourdatabase.database.windows.net 1433
telnet
사용:telnet yourdatabase.database.windows.net 1433
다음 단계
- 특정 사용자와 데이터베이스에 대한 액세스 제한하기 방법을 배우십시오.
- 고가용성(HA) 가이드를 확인하십시오.
- YAML 구성 참조를 살펴보십시오.
- 전체 CLI 참조를 확인하십시오.